From a67ed2858417b9d795460f05126c01fb0cd344f9 Mon Sep 17 00:00:00 2001 From: IWASE Yusuke Date: Mon, 26 Jun 2017 15:04:43 +0900 Subject: tests: Separate test files from Ryu module To prevent redundant files (e.g., pcap files, json files for tests, packet data generator) to be installed, this patch separates test directory from Ryu module. Signed-off-by: IWASE Yusuke Signed-off-by: FUJITA Tomonori --- .travis.yml | 2 +- CONTRIBUTING.rst | 2 +- MANIFEST.in | 3 +- doc/source/ofproto_v1_0_ref.rst | 68 +- doc/source/ofproto_v1_2_ref.rst | 84 +- doc/source/ofproto_v1_3_ref.rst | 110 +- doc/source/ofproto_v1_4_ref.rst | 142 +- doc/source/ofproto_v1_5_ref.rst | 152 +- doc/source/test-vrrp.rst | 4 +- doc/source/writing_ryu_app.rst | 2 +- run_tests.sh | 6 +- ryu/tests/integrated/__init__.py | 0 ryu/tests/integrated/bgp/__init__.py | 0 ryu/tests/integrated/bgp/base.py | 84 - ryu/tests/integrated/bgp/base_ip6.py | 84 - ryu/tests/integrated/bgp/test_basic.py | 49 - ryu/tests/integrated/bgp/test_ip6_basic.py | 49 - ryu/tests/integrated/common/__init__.py | 0 ryu/tests/integrated/common/docker_base.py | 801 - .../integrated/common/install_docker_test_pkg.sh | 43 - .../common/install_docker_test_pkg_common.sh | 39 - .../common/install_docker_test_pkg_for_travis.sh | 12 - ryu/tests/integrated/common/quagga.py | 332 - ryu/tests/integrated/common/ryubgp.py | 212 - ryu/tests/integrated/run_test.py | 54 - ryu/tests/integrated/run_tests_with_ovs12.py | 110 - ryu/tests/integrated/test_add_flow_v10.py | 257 - ryu/tests/integrated/test_add_flow_v12_actions.py | 495 - ryu/tests/integrated/test_add_flow_v12_matches.py | 1199 - ryu/tests/integrated/test_of_config.py | 328 - ryu/tests/integrated/test_request_reply_v12.py | 1054 - ryu/tests/integrated/test_vrrp_linux_multi.py | 103 - ryu/tests/integrated/test_vrrp_linux_multi.sh | 34 - ryu/tests/integrated/test_vrrp_multi.py | 143 - ryu/tests/integrated/test_vrrp_multi.sh | 42 - ryu/tests/integrated/tester.py | 214 - ryu/tests/integrated/vrrp_common.py | 221 - ryu/tests/mininet/l2/mpls/PopMPLS_mpls.mn | 6 - ryu/tests/mininet/l2/mpls/PushMPLS_ip.mn | 6 - ryu/tests/mininet/l2/mpls/PushMPLS_mpls.mn | 6 - ryu/tests/mininet/l2/mpls/test_mpls.py | 127 - ryu/tests/mininet/l2/vlan/PopVLAN_vlan.mn | 6 - ryu/tests/mininet/l2/vlan/PopVLAN_vlanvlan.mn | 6 - ryu/tests/mininet/l2/vlan/PushVLAN_icmp.mn | 6 - ryu/tests/mininet/l2/vlan/test_vlan.py | 130 - ryu/tests/mininet/l3/icmp/ICMP_ping.mn | 6 - ryu/tests/mininet/l3/icmp/ICMP_reply.mn | 6 - ryu/tests/mininet/l3/icmp/test_icmp.py | 84 - ryu/tests/mininet/l3/ip_ttl/DecNwTtl.mn | 6 - ryu/tests/mininet/l3/ip_ttl/test_ip_ttl.py | 84 - ryu/tests/mininet/packet_lib/arp/ARP_gratuitous.mn | 7 - ryu/tests/mininet/packet_lib/arp/ARP_reply.mn | 7 - ryu/tests/mininet/packet_lib/arp/ARP_request.mn | 7 - ryu/tests/mininet/packet_lib/arp/test_arp.py | 199 - ryu/tests/mininet/run_mnet-test.sh | 274 - ryu/tests/packet_data/bgp4/bgp4-keepalive.pcap | Bin 113 -> 0 bytes ryu/tests/packet_data/bgp4/bgp4-open.pcap | Bin 147 -> 0 bytes ryu/tests/packet_data/bgp4/bgp4-update.pcap | Bin 146 -> 0 bytes ryu/tests/packet_data/bgp4/bgp4-update_ipv6.pcap | Bin 233 -> 0 bytes ryu/tests/packet_data/bgp4/bgp4-update_vpnv6.pcap | Bin 209 -> 0 bytes ryu/tests/packet_data/bgp4/evpn_esi_arbitrary.pcap | Bin 156 -> 0 bytes ryu/tests/packet_data/bgp4/evpn_esi_as_based.pcap | Bin 156 -> 0 bytes ryu/tests/packet_data/bgp4/evpn_esi_l2_bridge.pcap | Bin 156 -> 0 bytes ryu/tests/packet_data/bgp4/evpn_esi_lacp.pcap | Bin 156 -> 0 bytes ryu/tests/packet_data/bgp4/evpn_esi_mac_base.pcap | Bin 156 -> 0 bytes ryu/tests/packet_data/bgp4/evpn_esi_router_id.pcap | Bin 156 -> 0 bytes ryu/tests/packet_data/bgp4/evpn_nlri_eth_a-d.pcap | Bin 156 -> 0 bytes ryu/tests/packet_data/bgp4/evpn_nlri_eth_seg.pcap | Bin 154 -> 0 bytes .../bgp4/evpn_nlri_inc_multi_eth_tag.pcap | Bin 148 -> 0 bytes .../packet_data/bgp4/evpn_nlri_ip_prefix.pcap | Bin 190 -> 0 bytes .../packet_data/bgp4/evpn_nlri_mac_ip_ad.pcap | Bin 168 -> 0 bytes .../packet_data/bgp4/flowspec_action_redirect.pcap | Bin 173 -> 0 bytes .../bgp4/flowspec_action_traffic_action.pcap | Bin 173 -> 0 bytes .../bgp4/flowspec_action_traffic_marking.pcap | Bin 173 -> 0 bytes .../bgp4/flowspec_action_traffic_rate.pcap | Bin 173 -> 0 bytes ryu/tests/packet_data/bgp4/flowspec_nlri_ipv4.pcap | Bin 273 -> 0 bytes ryu/tests/packet_data/bgp4/flowspec_nlri_ipv6.pcap | Bin 264 -> 0 bytes .../packet_data/bgp4/flowspec_nlri_l2vpn.pcap | Bin 241 -> 0 bytes ryu/tests/packet_data/bgp4/flowspec_nlri_vpn4.pcap | Bin 289 -> 0 bytes ryu/tests/packet_data/bgp4/flowspec_nlri_vpn6.pcap | Bin 273 -> 0 bytes .../packet_data/mrt/rib.20161101.0000_pick.bz2 | Bin 271 -> 0 bytes .../packet_data/mrt/updates.20161101.0000.bz2 | Bin 20939 -> 0 bytes .../packet_data/of10/1-1-ofp_packet_out.packet | Bin 122 -> 0 bytes ryu/tests/packet_data/of10/1-2-ofp_flow_mod.packet | Bin 80 -> 0 bytes .../packet_data/of10/1-4-ofp_packet_in.packet | Bin 60 -> 0 bytes .../packet_data/of10/1-5-features_request.packet | Bin 8 -> 0 bytes .../of10/1-6-ofp_switch_features.packet | Bin 128 -> 0 bytes ...roto-OFP10-ofp_packet_out_packet_library.packet | Bin 122 -> 0 bytes .../of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet | Bin 88 -> 0 bytes .../of10/ovs-ofctl-of10-action_dec_nw_ttl.packet | Bin 88 -> 0 bytes .../of10/ovs-ofctl-of10-action_pop_mpls.packet | Bin 88 -> 0 bytes .../of10/ovs-ofctl-of10-action_push_mpls.packet | Bin 88 -> 0 bytes .../ovs-ofctl-of10-action_set_mpls_label.packet | Bin 88 -> 0 bytes .../of10/ovs-ofctl-of10-action_set_mpls_tc.packet | Bin 88 -> 0 bytes .../of10/ovs-ofctl-of10-action_set_mpls_ttl.packet | Bin 88 -> 0 bytes .../of12/3-0-ofp_desc_stats_reply.packet | Bin 1072 -> 0 bytes .../packet_data/of12/3-1-ofp_packet_out.packet | Bin 138 -> 0 bytes ryu/tests/packet_data/of12/3-10-ofp_hello.packet | Bin 8 -> 0 bytes .../of12/3-11-ofp_flow_stats_request.packet | Bin 56 -> 0 bytes .../of12/3-12-ofp_flow_stats_reply.packet | Bin 320 -> 0 bytes .../packet_data/of12/3-13-ofp_echo_request.packet | Bin 12 -> 0 bytes .../packet_data/of12/3-14-ofp_echo_reply.packet | Bin 12 -> 0 bytes .../packet_data/of12/3-15-ofp_error_msg.packet | Bin 20 -> 0 bytes .../packet_data/of12/3-16-ofp_experimenter.packet | Bin 20 -> 0 bytes .../of12/3-17-ofp_barrier_request.packet | Bin 8 -> 0 bytes .../packet_data/of12/3-18-ofp_barrier_reply.packet | Bin 8 -> 0 bytes .../packet_data/of12/3-19-ofp_role_request.packet | Bin 24 -> 0 bytes ryu/tests/packet_data/of12/3-2-ofp_flow_mod.packet | Bin 128 -> 0 bytes .../packet_data/of12/3-20-ofp_role_reply.packet | Bin 24 -> 0 bytes .../packet_data/of12/3-21-ofp_group_mod.packet | Bin 48 -> 0 bytes .../packet_data/of12/3-22-ofp_port_mod.packet | Bin 40 -> 0 bytes .../packet_data/of12/3-23-ofp_table_mod.packet | Bin 16 -> 0 bytes .../of12/3-24-ofp_desc_stats_request.packet | Bin 16 -> 0 bytes .../of12/3-25-ofp_aggregate_stats_request.packet | Bin 56 -> 0 bytes .../of12/3-26-ofp_aggregate_stats_reply.packet | Bin 40 -> 0 bytes .../of12/3-27-ofp_table_stats_request.packet | Bin 16 -> 0 bytes .../of12/3-28-ofp_table_stats_reply.packet | Bin 32656 -> 0 bytes .../of12/3-29-ofp_port_stats_request.packet | Bin 24 -> 0 bytes ryu/tests/packet_data/of12/3-3-ofp_flow_mod.packet | Bin 80 -> 0 bytes .../of12/3-30-ofp_port_stats_reply.packet | Bin 224 -> 0 bytes .../3-31-ofp_group_features_stats_request.packet | Bin 16 -> 0 bytes .../3-32-ofp_group_features_stats_reply.packet | Bin 56 -> 0 bytes .../of12/3-33-ofp_group_desc_stats_request.packet | Bin 16 -> 0 bytes .../of12/3-34-ofp_group_desc_stats_reply.packet | Bin 56 -> 0 bytes .../of12/3-35-ofp_queue_get_config_request.packet | Bin 16 -> 0 bytes .../of12/3-36-ofp_queue_get_config_reply.packet | Bin 112 -> 0 bytes .../of12/3-37-ofp_queue_stats_request.packet | Bin 24 -> 0 bytes .../of12/3-38-ofp_queue_stats_reply.packet | Bin 112 -> 0 bytes .../packet_data/of12/3-39-ofp_port_status.packet | Bin 80 -> 0 bytes .../packet_data/of12/3-4-ofp_packet_in.packet | Bin 140 -> 0 bytes .../packet_data/of12/3-40-ofp_flow_removed.packet | Bin 64 -> 0 bytes .../of12/3-41-ofp_error_msg_experimenter.packet | Bin 27 -> 0 bytes .../of12/3-5-ofp_features_request.packet | Bin 8 -> 0 bytes .../packet_data/of12/3-59-ofp_packet_in.packet | Bin 314 -> 0 bytes .../packet_data/of12/3-6-ofp_features_reply.packet | Bin 160 -> 0 bytes .../packet_data/of12/3-60-ofp_flow_mod.packet | Bin 344 -> 0 bytes .../of12/3-61-ofp_group_stats_request.packet | Bin 24 -> 0 bytes .../of12/3-62-ofp_group_stats_reply.packet | Bin 64 -> 0 bytes .../packet_data/of12/3-7-ofp_set_config.packet | Bin 12 -> 0 bytes .../of12/3-8-ofp_get_config_request.packet | Bin 8 -> 0 bytes .../of12/3-9-ofp_get_config_reply.packet | Bin 12 -> 0 bytes ...roto-OFP12-ofp_packet_out_packet_library.packet | Bin 138 -> 0 bytes .../packet_data/of13/4-0-ofp_desc_reply.packet | Bin 1072 -> 0 bytes .../packet_data/of13/4-1-ofp_packet_out.packet | Bin 138 -> 0 bytes ryu/tests/packet_data/of13/4-10-ofp_hello.packet | Bin 16 -> 0 bytes .../of13/4-11-ofp_flow_stats_request.packet | Bin 56 -> 0 bytes .../of13/4-12-ofp_flow_stats_reply.packet | Bin 552 -> 0 bytes .../packet_data/of13/4-13-ofp_echo_request.packet | Bin 12 -> 0 bytes .../packet_data/of13/4-14-ofp_echo_reply.packet | Bin 12 -> 0 bytes .../packet_data/of13/4-15-ofp_error_msg.packet | Bin 20 -> 0 bytes .../packet_data/of13/4-16-ofp_experimenter.packet | Bin 20 -> 0 bytes .../of13/4-17-ofp_barrier_request.packet | Bin 8 -> 0 bytes .../packet_data/of13/4-18-ofp_barrier_reply.packet | Bin 8 -> 0 bytes .../packet_data/of13/4-19-ofp_role_request.packet | Bin 24 -> 0 bytes ryu/tests/packet_data/of13/4-2-ofp_flow_mod.packet | Bin 280 -> 0 bytes .../packet_data/of13/4-20-ofp_role_reply.packet | Bin 24 -> 0 bytes .../packet_data/of13/4-21-ofp_group_mod.packet | Bin 48 -> 0 bytes .../packet_data/of13/4-22-ofp_port_mod.packet | Bin 40 -> 0 bytes .../packet_data/of13/4-23-ofp_table_mod.packet | Bin 16 -> 0 bytes .../packet_data/of13/4-24-ofp_desc_request.packet | Bin 16 -> 0 bytes .../of13/4-25-ofp_aggregate_stats_request.packet | Bin 56 -> 0 bytes .../of13/4-26-ofp_aggregate_stats_reply.packet | Bin 40 -> 0 bytes .../of13/4-27-ofp_table_stats_request.packet | Bin 16 -> 0 bytes .../of13/4-28-ofp_table_stats_reply.packet | Bin 64 -> 0 bytes .../of13/4-29-ofp_port_stats_request.packet | Bin 24 -> 0 bytes ryu/tests/packet_data/of13/4-3-ofp_flow_mod.packet | Bin 80 -> 0 bytes .../of13/4-30-ofp_port_stats_reply.packet | Bin 240 -> 0 bytes .../of13/4-31-ofp_group_features_request.packet | Bin 16 -> 0 bytes .../of13/4-32-ofp_group_features_reply.packet | Bin 56 -> 0 bytes .../of13/4-33-ofp_group_desc_request.packet | Bin 16 -> 0 bytes .../of13/4-34-ofp_group_desc_reply.packet | Bin 56 -> 0 bytes .../of13/4-35-ofp_queue_get_config_request.packet | Bin 16 -> 0 bytes .../of13/4-36-ofp_queue_get_config_reply.packet | Bin 211 -> 0 bytes .../of13/4-37-ofp_queue_stats_request.packet | Bin 24 -> 0 bytes .../of13/4-38-ofp_queue_stats_reply.packet | Bin 136 -> 0 bytes .../packet_data/of13/4-39-ofp_port_status.packet | Bin 80 -> 0 bytes .../packet_data/of13/4-4-ofp_packet_in.packet | Bin 148 -> 0 bytes .../packet_data/of13/4-40-ofp_flow_removed.packet | Bin 64 -> 0 bytes .../of13/4-41-ofp_error_msg_experimenter.packet | Bin 27 -> 0 bytes .../of13/4-42-ofp_get_async_request.packet | Bin 8 -> 0 bytes .../of13/4-43-ofp_get_async_reply.packet | Bin 32 -> 0 bytes .../packet_data/of13/4-44-ofp_set_async.packet | Bin 32 -> 0 bytes .../packet_data/of13/4-45-ofp_meter_mod.packet | Bin 64 -> 0 bytes .../packet_data/of13/4-46-ofp_flow_mod.packet | Bin 96 -> 0 bytes .../of13/4-47-ofp_meter_config_request.packet | Bin 24 -> 0 bytes .../of13/4-48-ofp_meter_config_reply.packet | Bin 40 -> 0 bytes .../of13/4-49-ofp_meter_stats_request.packet | Bin 24 -> 0 bytes .../of13/4-5-ofp_features_request.packet | Bin 8 -> 0 bytes .../of13/4-50-ofp_meter_stats_reply.packet | Bin 72 -> 0 bytes .../of13/4-51-ofp_meter_features_request.packet | Bin 16 -> 0 bytes .../of13/4-52-ofp_meter_features_reply.packet | Bin 32 -> 0 bytes .../of13/4-53-ofp_port_desc_request.packet | Bin 16 -> 0 bytes .../of13/4-54-ofp_port_desc_reply.packet | Bin 144 -> 0 bytes .../of13/4-55-ofp_table_features_request.packet | Bin 11128 -> 0 bytes .../of13/4-56-ofp_table_features_reply.packet | Bin 11128 -> 0 bytes .../of13/4-57-ofp_group_stats_request.packet | Bin 24 -> 0 bytes .../of13/4-58-ofp_group_stats_reply.packet | Bin 72 -> 0 bytes .../packet_data/of13/4-59-ofp_packet_in.packet | Bin 378 -> 0 bytes .../packet_data/of13/4-6-ofp_features_reply.packet | Bin 32 -> 0 bytes .../packet_data/of13/4-60-ofp_flow_mod.packet | Bin 400 -> 0 bytes .../of13/4-61-ofp_experimenter_request.packet | Bin 32 -> 0 bytes .../of13/4-62-ofp_experimenter_reply.packet | Bin 40 -> 0 bytes .../of13/4-63-onf_flow_monitor_request.packet | Bin 408 -> 0 bytes .../packet_data/of13/4-7-ofp_set_config.packet | Bin 12 -> 0 bytes .../of13/4-8-ofp_get_config_request.packet | Bin 8 -> 0 bytes .../of13/4-9-ofp_get_config_reply.packet | Bin 12 -> 0 bytes .../of13/libofproto-OFP13-echo_reply.packet | Bin 8 -> 0 bytes .../of13/libofproto-OFP13-echo_request.packet | Bin 8 -> 0 bytes .../of13/libofproto-OFP13-error_msg.packet | Bin 20 -> 0 bytes .../of13/libofproto-OFP13-features_reply.packet | Bin 32 -> 0 bytes .../of13/libofproto-OFP13-flow_mod.packet | Bin 256 -> 0 bytes .../of13/libofproto-OFP13-flow_mod.truncated64 | 0 .../libofproto-OFP13-flow_mod_conjunction.packet | Bin 144 -> 0 bytes .../libofproto-OFP13-flow_mod_match_conj.packet | Bin 104 -> 0 bytes .../of13/libofproto-OFP13-flow_removed.packet | Bin 120 -> 0 bytes .../of13/libofproto-OFP13-get_config_reply.packet | Bin 12 -> 0 bytes .../packet_data/of13/libofproto-OFP13-hello.packet | Bin 16 -> 0 bytes .../of13/libofproto-OFP13-meter_mod.packet | Bin 48 -> 0 bytes ...roto-OFP13-ofp_packet_out_packet_library.packet | Bin 138 -> 0 bytes .../of13/libofproto-OFP13-packet_in.packet | Bin 70 -> 0 bytes .../of13/libofproto-OFP13-port_mod.packet | Bin 40 -> 0 bytes .../of13/libofproto-OFP13-port_status.packet | Bin 80 -> 0 bytes .../of13/libofproto-OFP13-set_config.packet | Bin 12 -> 0 bytes .../of13/libofproto-OFP13-table_mod.packet | Bin 16 -> 0 bytes .../of13/ovs-ofctl-of13-action_conjunction.packet | Bin 144 -> 0 bytes .../of13/ovs-ofctl-of13-action_controller.packet | Bin 80 -> 0 bytes .../of13/ovs-ofctl-of13-action_controller2.packet | Bin 128 -> 0 bytes .../of13/ovs-ofctl-of13-action_ct.packet | Bin 104 -> 0 bytes .../of13/ovs-ofctl-of13-action_ct_exec.packet | Bin 120 -> 0 bytes .../of13/ovs-ofctl-of13-action_ct_nat.packet | Bin 128 -> 0 bytes .../of13/ovs-ofctl-of13-action_ct_nat_v6.packet | Bin 144 -> 0 bytes .../ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet | Bin 104 -> 0 bytes .../of13/ovs-ofctl-of13-action_fintimeout.packet | Bin 88 -> 0 bytes .../of13/ovs-ofctl-of13-action_learn.packet | Bin 256 -> 0 bytes .../of13/ovs-ofctl-of13-action_note.packet | Bin 80 -> 0 bytes .../of13/ovs-ofctl-of13-action_output_trunc.packet | Bin 80 -> 0 bytes .../of13/ovs-ofctl-of13-action_resubmit.packet | Bin 144 -> 0 bytes .../of13/ovs-ofctl-of13-action_sample.packet | Bin 88 -> 0 bytes .../of13/ovs-ofctl-of13-action_sample2.packet | Bin 96 -> 0 bytes .../of13/ovs-ofctl-of13-action_stack_pop.packet | Bin 88 -> 0 bytes .../of13/ovs-ofctl-of13-action_stack_push.packet | Bin 88 -> 0 bytes .../of13/ovs-ofctl-of13-match_conj.packet | Bin 96 -> 0 bytes .../ovs-ofctl-of13-match_load_nx_register.packet | Bin 104 -> 0 bytes .../ovs-ofctl-of13-match_move_nx_register.packet | Bin 104 -> 0 bytes .../of13/ovs-ofctl-of13-match_pkt_mark.packet | Bin 96 -> 0 bytes .../ovs-ofctl-of13-match_pkt_mark_masked.packet | Bin 96 -> 0 bytes .../packet_data/of14/5-0-ofp_desc_reply.packet | Bin 1072 -> 0 bytes .../packet_data/of14/5-1-ofp_packet_out.packet | Bin 138 -> 0 bytes ryu/tests/packet_data/of14/5-10-ofp_hello.packet | Bin 16 -> 0 bytes .../of14/5-11-ofp_flow_stats_request.packet | Bin 56 -> 0 bytes .../of14/5-12-ofp_flow_stats_reply.packet | Bin 552 -> 0 bytes .../packet_data/of14/5-13-ofp_echo_request.packet | Bin 12 -> 0 bytes .../packet_data/of14/5-14-ofp_echo_reply.packet | Bin 12 -> 0 bytes .../packet_data/of14/5-15-ofp_error_msg.packet | Bin 20 -> 0 bytes .../packet_data/of14/5-16-ofp_experimenter.packet | Bin 20 -> 0 bytes .../of14/5-17-ofp_barrier_request.packet | Bin 8 -> 0 bytes .../packet_data/of14/5-18-ofp_barrier_reply.packet | Bin 8 -> 0 bytes .../packet_data/of14/5-19-ofp_role_request.packet | Bin 24 -> 0 bytes ryu/tests/packet_data/of14/5-2-ofp_flow_mod.packet | Bin 280 -> 0 bytes .../packet_data/of14/5-20-ofp_role_reply.packet | Bin 24 -> 0 bytes .../packet_data/of14/5-21-ofp_group_mod.packet | Bin 48 -> 0 bytes .../packet_data/of14/5-22-ofp_port_mod.packet | Bin 120 -> 0 bytes .../packet_data/of14/5-23-ofp_table_mod.packet | Bin 88 -> 0 bytes .../packet_data/of14/5-24-ofp_desc_request.packet | Bin 16 -> 0 bytes .../of14/5-25-ofp_aggregate_stats_request.packet | Bin 56 -> 0 bytes .../of14/5-26-ofp_aggregate_stats_reply.packet | Bin 40 -> 0 bytes .../of14/5-27-ofp_table_stats_request.packet | Bin 16 -> 0 bytes .../of14/5-28-ofp_table_stats_reply.packet | Bin 64 -> 0 bytes .../of14/5-29-ofp_port_stats_request.packet | Bin 24 -> 0 bytes ryu/tests/packet_data/of14/5-3-ofp_flow_mod.packet | Bin 80 -> 0 bytes .../of14/5-30-ofp_port_stats_reply.packet | Bin 360 -> 0 bytes .../of14/5-31-ofp_group_features_request.packet | Bin 16 -> 0 bytes .../of14/5-32-ofp_group_features_reply.packet | Bin 56 -> 0 bytes .../of14/5-33-ofp_group_desc_request.packet | Bin 16 -> 0 bytes .../of14/5-34-ofp_group_desc_reply.packet | Bin 56 -> 0 bytes .../of14/5-35-ofp_queue_stats_request.packet | Bin 24 -> 0 bytes .../of14/5-36-ofp_queue_stats_reply.packet | Bin 216 -> 0 bytes .../packet_data/of14/5-37-ofp_port_status.packet | Bin 184 -> 0 bytes .../packet_data/of14/5-38-ofp_flow_removed.packet | Bin 64 -> 0 bytes .../of14/5-39-ofp_error_msg_experimenter.packet | Bin 27 -> 0 bytes .../packet_data/of14/5-4-ofp_packet_in.packet | Bin 148 -> 0 bytes .../of14/5-40-ofp_get_async_request.packet | Bin 8 -> 0 bytes .../of14/5-41-ofp_get_async_reply.packet | Bin 160 -> 0 bytes .../packet_data/of14/5-42-ofp_set_async.packet | Bin 160 -> 0 bytes .../packet_data/of14/5-43-ofp_meter_mod.packet | Bin 64 -> 0 bytes .../packet_data/of14/5-44-ofp_flow_mod.packet | Bin 96 -> 0 bytes .../of14/5-45-ofp_meter_config_request.packet | Bin 24 -> 0 bytes .../of14/5-46-ofp_meter_config_reply.packet | Bin 40 -> 0 bytes .../of14/5-47-ofp_meter_stats_request.packet | Bin 24 -> 0 bytes .../of14/5-48-ofp_meter_stats_reply.packet | Bin 72 -> 0 bytes .../of14/5-49-ofp_meter_features_request.packet | Bin 16 -> 0 bytes .../of14/5-5-ofp_features_request.packet | Bin 8 -> 0 bytes .../of14/5-50-ofp_meter_features_reply.packet | Bin 32 -> 0 bytes .../of14/5-51-ofp_port_desc_request.packet | Bin 16 -> 0 bytes .../of14/5-52-ofp_port_desc_reply.packet | Bin 256 -> 0 bytes .../of14/5-53-ofp_table_features_request.packet | Bin 11128 -> 0 bytes .../of14/5-54-ofp_table_features_reply.packet | Bin 11128 -> 0 bytes .../of14/5-55-ofp_group_stats_request.packet | Bin 24 -> 0 bytes .../of14/5-56-ofp_group_stats_reply.packet | Bin 72 -> 0 bytes .../packet_data/of14/5-57-ofp_packet_in.packet | Bin 362 -> 0 bytes .../packet_data/of14/5-58-ofp_flow_mod.packet | Bin 384 -> 0 bytes .../of14/5-59-ofp_experimenter_request.packet | Bin 32 -> 0 bytes .../packet_data/of14/5-6-ofp_features_reply.packet | Bin 32 -> 0 bytes .../of14/5-60-ofp_experimenter_reply.packet | Bin 40 -> 0 bytes .../of14/5-61-ofp_table_desc_request.packet | Bin 16 -> 0 bytes .../of14/5-62-ofp_table_desc_reply.packet | Bin 120 -> 0 bytes .../of14/5-63-ofp_queue_desc_request.packet | Bin 24 -> 0 bytes .../of14/5-64-ofp_queue_desc_reply.packet | Bin 136 -> 0 bytes .../packet_data/of14/5-65-ofp_role_status.packet | Bin 80 -> 0 bytes .../of14/5-66-ofp_flow_monitor_request.packet | Bin 48 -> 0 bytes .../of14/5-67-ofp_flow_monitor_reply.packet | Bin 96 -> 0 bytes .../packet_data/of14/5-68-ofp_table_status.packet | Bin 96 -> 0 bytes .../of14/5-69-ofp_bundle_ctrl_msg.packet | Bin 72 -> 0 bytes .../packet_data/of14/5-7-ofp_set_config.packet | Bin 12 -> 0 bytes .../of14/5-70-ofp_bundle_add_msg.packet | Bin 80 -> 0 bytes .../of14/5-71-ofp_requestforward.packet | Bin 56 -> 0 bytes .../of14/5-8-ofp_get_config_request.packet | Bin 8 -> 0 bytes .../of14/5-9-ofp_get_config_reply.packet | Bin 12 -> 0 bytes ...roto-OFP14-ofp_packet_out_packet_library.packet | Bin 138 -> 0 bytes .../libofproto-OFP15-aggregate_stats_reply.packet | Bin 32 -> 0 bytes ...libofproto-OFP15-aggregate_stats_request.packet | Bin 56 -> 0 bytes .../of15/libofproto-OFP15-barrier_reply.packet | Bin 8 -> 0 bytes .../of15/libofproto-OFP15-barrier_request.packet | Bin 8 -> 0 bytes .../of15/libofproto-OFP15-bundle_add.packet | Bin 272 -> 0 bytes .../of15/libofproto-OFP15-bundle_ctrl.packet | Bin 16 -> 0 bytes .../libofproto-OFP15-bundle_features_reply.packet | Bin 96 -> 0 bytes ...libofproto-OFP15-bundle_features_request.packet | Bin 96 -> 0 bytes .../of15/libofproto-OFP15-controller_status.packet | Bin 56 -> 0 bytes ...libofproto-OFP15-controller_status_reply.packet | Bin 64 -> 0 bytes ...bofproto-OFP15-controller_status_request.packet | Bin 16 -> 0 bytes .../of15/libofproto-OFP15-desc_reply.packet | Bin 1072 -> 0 bytes .../of15/libofproto-OFP15-desc_request.packet | Bin 16 -> 0 bytes .../of15/libofproto-OFP15-echo_reply.packet | Bin 8 -> 0 bytes .../of15/libofproto-OFP15-echo_request.packet | Bin 8 -> 0 bytes .../of15/libofproto-OFP15-error_msg.packet | Bin 20 -> 0 bytes .../libofproto-OFP15-error_msg_experimenter.packet | Bin 27 -> 0 bytes .../of15/libofproto-OFP15-experimenter.packet | Bin 20 -> 0 bytes .../libofproto-OFP15-experimenter_reply.packet | Bin 40 -> 0 bytes .../libofproto-OFP15-experimenter_request.packet | Bin 32 -> 0 bytes .../of15/libofproto-OFP15-features_reply.packet | Bin 32 -> 0 bytes .../of15/libofproto-OFP15-features_request.packet | Bin 8 -> 0 bytes .../of15/libofproto-OFP15-flow_desc_reply.packet | Bin 80 -> 0 bytes .../of15/libofproto-OFP15-flow_desc_request.packet | Bin 64 -> 0 bytes .../of15/libofproto-OFP15-flow_mod.packet | Bin 256 -> 0 bytes .../libofproto-OFP15-flow_mod_conjunction.packet | Bin 144 -> 0 bytes .../libofproto-OFP15-flow_mod_match_conj.packet | Bin 104 -> 0 bytes .../libofproto-OFP15-flow_monitor_reply.packet | Bin 96 -> 0 bytes .../libofproto-OFP15-flow_monitor_request.packet | Bin 48 -> 0 bytes .../of15/libofproto-OFP15-flow_removed.packet | Bin 56 -> 0 bytes .../of15/libofproto-OFP15-flow_stats_reply.packet | Bin 56 -> 0 bytes .../libofproto-OFP15-flow_stats_request.packet | Bin 56 -> 0 bytes .../of15/libofproto-OFP15-get_async_reply.packet | Bin 160 -> 0 bytes .../of15/libofproto-OFP15-get_async_request.packet | Bin 8 -> 0 bytes .../of15/libofproto-OFP15-get_config_reply.packet | Bin 12 -> 0 bytes .../libofproto-OFP15-get_config_request.packet | Bin 8 -> 0 bytes .../of15/libofproto-OFP15-group_desc_reply.packet | Bin 64 -> 0 bytes .../libofproto-OFP15-group_desc_request.packet | Bin 24 -> 0 bytes .../libofproto-OFP15-group_features_reply.packet | Bin 56 -> 0 bytes .../libofproto-OFP15-group_features_request.packet | Bin 16 -> 0 bytes .../of15/libofproto-OFP15-group_mod.packet | Bin 80 -> 0 bytes .../of15/libofproto-OFP15-group_stats_reply.packet | Bin 72 -> 0 bytes .../libofproto-OFP15-group_stats_request.packet | Bin 24 -> 0 bytes .../packet_data/of15/libofproto-OFP15-hello.packet | Bin 16 -> 0 bytes .../of15/libofproto-OFP15-meter_desc_reply.packet | Bin 40 -> 0 bytes .../libofproto-OFP15-meter_desc_request.packet | Bin 24 -> 0 bytes .../libofproto-OFP15-meter_features_reply.packet | Bin 40 -> 0 bytes .../libofproto-OFP15-meter_features_request.packet | Bin 16 -> 0 bytes .../of15/libofproto-OFP15-meter_mod.packet | Bin 48 -> 0 bytes .../of15/libofproto-OFP15-meter_stats_reply.packet | Bin 72 -> 0 bytes .../libofproto-OFP15-meter_stats_request.packet | Bin 24 -> 0 bytes .../of15/libofproto-OFP15-packet_in.packet | Bin 70 -> 0 bytes .../of15/libofproto-OFP15-packet_out.packet | Bin 52 -> 0 bytes .../of15/libofproto-OFP15-port_desc_reply.packet | Bin 256 -> 0 bytes .../of15/libofproto-OFP15-port_desc_request.packet | Bin 24 -> 0 bytes .../of15/libofproto-OFP15-port_mod.packet | Bin 120 -> 0 bytes .../of15/libofproto-OFP15-port_stats_reply.packet | Bin 360 -> 0 bytes .../libofproto-OFP15-port_stats_request.packet | Bin 24 -> 0 bytes .../of15/libofproto-OFP15-port_status.packet | Bin 184 -> 0 bytes .../of15/libofproto-OFP15-queue_desc_reply.packet | Bin 136 -> 0 bytes .../libofproto-OFP15-queue_desc_request.packet | Bin 24 -> 0 bytes .../of15/libofproto-OFP15-queue_stats_reply.packet | Bin 216 -> 0 bytes .../libofproto-OFP15-queue_stats_request.packet | Bin 24 -> 0 bytes .../of15/libofproto-OFP15-requestforward.packet | Bin 88 -> 0 bytes .../of15/libofproto-OFP15-role_reply.packet | Bin 24 -> 0 bytes .../of15/libofproto-OFP15-role_request.packet | Bin 24 -> 0 bytes .../of15/libofproto-OFP15-role_status.packet | Bin 24 -> 0 bytes .../of15/libofproto-OFP15-set_async.packet | Bin 160 -> 0 bytes .../of15/libofproto-OFP15-set_config.packet | Bin 12 -> 0 bytes .../of15/libofproto-OFP15-table_desc_reply.packet | Bin 120 -> 0 bytes .../libofproto-OFP15-table_desc_request.packet | Bin 16 -> 0 bytes .../libofproto-OFP15-table_features_reply.packet | Bin 96 -> 0 bytes .../libofproto-OFP15-table_features_request.packet | Bin 96 -> 0 bytes .../of15/libofproto-OFP15-table_mod.packet | Bin 24 -> 0 bytes .../of15/libofproto-OFP15-table_stats_reply.packet | Bin 64 -> 0 bytes .../libofproto-OFP15-table_stats_request.packet | Bin 16 -> 0 bytes .../of15/libofproto-OFP15-table_status.packet | Bin 96 -> 0 bytes ryu/tests/packet_data/pcap/big_endian.pcap | Bin 78 -> 0 bytes ryu/tests/packet_data/pcap/geneve_unknown.pcap | Bin 196 -> 0 bytes ryu/tests/packet_data/pcap/gre_full_options.pcap | Bin 190 -> 0 bytes ryu/tests/packet_data/pcap/gre_no_option.pcap | Bin 178 -> 0 bytes ryu/tests/packet_data/pcap/gre_nvgre_option.pcap | Bin 190 -> 0 bytes ryu/tests/packet_data/pcap/little_endian.pcap | Bin 78 -> 0 bytes ryu/tests/packet_data/pcap/openflow_flowmod.pcap | Bin 186 -> 0 bytes .../packet_data/pcap/openflow_flowstats_req.pcap | Bin 162 -> 0 bytes .../packet_data/pcap/openflow_invalid_version.pcap | Bin 186 -> 0 bytes ryu/tests/packet_data/pcap/zebra_v2.pcap | Bin 1236 -> 0 bytes ryu/tests/packet_data/pcap/zebra_v3.pcap | Bin 1250 -> 0 bytes ryu/tests/packet_data_generator/Makefile | 5 - ryu/tests/packet_data_generator/rebar.config | 29 - ryu/tests/packet_data_generator/src/er.app.src | 24 - ryu/tests/packet_data_generator/src/x.erl | 63 - ryu/tests/packet_data_generator/src/x1.erl | 90 - ryu/tests/packet_data_generator/src/x3.erl | 8749 ----- ryu/tests/packet_data_generator/src/x4.erl | 2657 -- ryu/tests/packet_data_generator/src/x5.erl | 3024 -- .../packet_data_generator/src/x_flower_packet.erl | 61 - .../packet_data_generator/src/x_of_protocol.erl | 33 - ryu/tests/packet_data_generator2/Makefile.BSD | 35 - ryu/tests/packet_data_generator2/Makefile.GNU | 39 - ryu/tests/packet_data_generator2/README | 15 - ryu/tests/packet_data_generator2/gen.c | 963 - ryu/tests/packet_data_generator3/gen.py | 329 - ryu/tests/run_tests.py | 35 - ryu/tests/test_lib.py | 270 - ryu/tests/unit/__init__.py | 6 - ryu/tests/unit/app/__init__.py | 0 ryu/tests/unit/app/ofctl_rest_json/of10.json | 101 - ryu/tests/unit/app/ofctl_rest_json/of12.json | 150 - ryu/tests/unit/app/ofctl_rest_json/of13.json | 191 - ryu/tests/unit/app/ofctl_rest_json/of14.json | 195 - ryu/tests/unit/app/ofctl_rest_json/of15.json | 203 - ryu/tests/unit/app/test_ofctl_rest.py | 137 - ryu/tests/unit/app/test_tester.py | 464 - ryu/tests/unit/app/test_ws_topology.py | 54 - ryu/tests/unit/app/test_wsgi.py | 104 - ryu/tests/unit/cmd/__init__.py | 15 - ryu/tests/unit/cmd/dummy_app.py | 21 - ryu/tests/unit/cmd/dummy_openflow_app.py | 22 - ryu/tests/unit/cmd/test_manager.py | 77 - ryu/tests/unit/controller/__init__.py | 0 ryu/tests/unit/controller/test_controller.py | 145 - ryu/tests/unit/lib/__init__.py | 0 .../ofctl_json/of10/1-2-ofp_flow_mod.packet.json | 23 - .../of12/3-0-ofp_desc_stats_reply.packet.json | 9 - .../of12/3-11-ofp_flow_stats_request.packet.json | 11 - .../of12/3-12-ofp_flow_stats_reply.packet.json | 75 - .../of12/3-16-ofp_experimenter.packet.json | 8 - .../ofctl_json/of12/3-2-ofp_flow_mod.packet.json | 41 - .../ofctl_json/of12/3-21-ofp_group_mod.packet.json | 22 - .../ofctl_json/of12/3-22-ofp_port_mod.packet.json | 9 - .../3-25-ofp_aggregate_stats_request.packet.json | 11 - .../3-26-ofp_aggregate_stats_reply.packet.json | 9 - .../of12/3-28-ofp_table_stats_reply.packet.json | 32134 ------------------- .../of12/3-30-ofp_port_stats_reply.packet.json | 34 - ...3-32-ofp_group_features_stats_reply.packet.json | 104 - .../3-34-ofp_group_desc_stats_reply.packet.json | 20 - .../3-35-ofp_queue_get_config_request.packet.json | 3 - .../3-36-ofp_queue_get_config_reply.packet.json | 43 - .../of12/3-38-ofp_queue_stats_reply.packet.json | 25 - .../of12/3-6-ofp_features_reply.packet.json | 30 - .../of12/3-62-ofp_group_stats_reply.packet.json | 17 - .../lib-ofctl-ofp_group_stats_request.packet.json | 3 - .../lib-ofctl-ofp_port_stats_request.packet.json | 3 - ...-ofctl-ofp_queue_get_config_request.packet.json | 3 - .../lib-ofctl-ofp_queue_stats_request.packet1.json | 3 - .../lib-ofctl-ofp_queue_stats_request.packet2.json | 4 - .../lib-ofctl-ofp_queue_stats_request.packet3.json | 3 - .../ofctl_json/of13/4-0-ofp_desc_reply.packet.json | 9 - .../of13/4-11-ofp_flow_stats_request.packet.json | 11 - .../of13/4-12-ofp_flow_stats_reply.packet.json | 104 - .../of13/4-16-ofp_experimenter.packet.json | 8 - .../ofctl_json/of13/4-2-ofp_flow_mod.packet.json | 97 - .../ofctl_json/of13/4-21-ofp_group_mod.packet.json | 21 - .../ofctl_json/of13/4-22-ofp_port_mod.packet.json | 9 - .../4-25-ofp_aggregate_stats_request.packet.json | 11 - .../4-26-ofp_aggregate_stats_reply.packet.json | 9 - .../of13/4-28-ofp_table_stats_reply.packet.json | 16 - .../of13/4-30-ofp_port_stats_reply.packet.json | 38 - .../of13/4-32-ofp_group_features_reply.packet.json | 104 - .../of13/4-34-ofp_group_desc_reply.packet.json | 20 - .../4-35-ofp_queue_get_config_request.packet.json | 3 - .../4-36-ofp_queue_get_config_reply.packet.json | 83 - .../of13/4-38-ofp_queue_stats_reply.packet.json | 31 - .../ofctl_json/of13/4-45-ofp_meter_mod.packet.json | 31 - .../of13/4-48-ofp_meter_config_reply.packet.json | 19 - .../of13/4-50-ofp_meter_stats_reply.packet.json | 19 - .../of13/4-52-ofp_meter_features_reply.packet.json | 19 - .../of13/4-54-ofp_port_desc_reply.packet.json | 30 - .../of13/4-56-ofp_table_features_reply.packet.json | 11928 ------- .../of13/4-58-ofp_group_stats_reply.packet.json | 19 - .../lib-ofctl-ofp_group_stats_request.packet.json | 3 - .../lib-ofctl-ofp_meter_config_request.packet.json | 3 - .../lib-ofctl-ofp_meter_stats_request.packet.json | 3 - .../lib-ofctl-ofp_port_stats_request.packet.json | 3 - ...-ofctl-ofp_queue_get_config_request.packet.json | 3 - .../lib-ofctl-ofp_queue_stats_request.packet1.json | 3 - .../lib-ofctl-ofp_queue_stats_request.packet2.json | 4 - .../lib-ofctl-ofp_queue_stats_request.packet3.json | 3 - .../ofctl_json/of14/5-0-ofp_desc_reply.packet.json | 9 - .../of14/5-11-ofp_flow_stats_request.packet.json | 11 - .../of14/5-12-ofp_flow_stats_reply.packet.json | 197 - .../of14/5-16-ofp_experimenter.packet.json | 8 - .../ofctl_json/of14/5-2-ofp_flow_mod.packet.json | 103 - .../ofctl_json/of14/5-21-ofp_group_mod.packet.json | 21 - .../ofctl_json/of14/5-22-ofp_port_mod.packet.json | 50 - .../5-25-ofp_aggregate_stats_request.packet.json | 11 - .../5-26-ofp_aggregate_stats_reply.packet.json | 9 - .../of14/5-28-ofp_table_stats_reply.packet.json | 16 - .../of14/5-30-ofp_port_stats_reply.packet.json | 85 - .../of14/5-32-ofp_group_features_reply.packet.json | 104 - .../of14/5-34-ofp_group_desc_reply.packet.json | 24 - .../of14/5-36-ofp_queue_stats_reply.packet.json | 64 - .../ofctl_json/of14/5-43-ofp_meter_mod.packet.json | 31 - .../of14/5-46-ofp_meter_config_reply.packet.json | 19 - .../of14/5-48-ofp_meter_stats_reply.packet.json | 19 - .../of14/5-50-ofp_meter_features_reply.packet.json | 19 - .../of14/5-52-ofp_port_desc_reply.packet.json | 83 - .../of14/5-54-ofp_table_features_reply.packet.json | 11928 ------- .../of14/5-56-ofp_group_stats_reply.packet.json | 19 - .../of14/5-63-ofp_queue_desc_request.packet.json | 4 - .../of14/5-64-ofp_queue_desc_reply.packet.json | 61 - .../lib-ofctl-OFP15-flow_desc_reply.packet.json | 48 - .../lib-ofctl-OFP15-flow_desc_request.packet.json | 13 - .../of15/lib-ofctl-OFP15-flow_mod.packet.json | 115 - ...ofproto-OFP15-aggregate_stats_reply.packet.json | 10 - ...proto-OFP15-aggregate_stats_request.packet.json | 11 - .../of15/libofproto-OFP15-desc_reply.packet.json | 9 - .../of15/libofproto-OFP15-experimenter.packet.json | 8 - .../libofproto-OFP15-flow_desc_reply.packet.json | 26 - .../libofproto-OFP15-flow_desc_request.packet.json | 13 - .../libofproto-OFP15-flow_mod_no_nx.packet.json | 103 - .../libofproto-OFP15-flow_stats_reply.packet.json | 16 - ...libofproto-OFP15-flow_stats_request.packet.json | 11 - .../libofproto-OFP15-group_desc_reply.packet.json | 27 - ...libofproto-OFP15-group_desc_request.packet.json | 3 - ...bofproto-OFP15-group_features_reply.packet.json | 104 - .../of15/libofproto-OFP15-group_mod.packet.json | 42 - .../libofproto-OFP15-group_stats_reply.packet.json | 19 - .../libofproto-OFP15-meter_desc_reply.packet.json | 19 - ...bofproto-OFP15-meter_features_reply.packet.json | 19 - .../of15/libofproto-OFP15-meter_mod.packet.json | 24 - .../libofproto-OFP15-meter_stats_reply.packet.json | 19 - .../libofproto-OFP15-port_desc_reply.packet.json | 83 - .../libofproto-OFP15-port_desc_request.packet.json | 3 - .../of15/libofproto-OFP15-port_mod.packet.json | 50 - .../libofproto-OFP15-port_stats_reply.packet.json | 93 - .../libofproto-OFP15-queue_desc_reply.packet.json | 61 - ...libofproto-OFP15-queue_desc_request.packet.json | 4 - .../libofproto-OFP15-queue_stats_reply.packet.json | 64 - ...bofproto-OFP15-table_features_reply.packet.json | 25 - .../libofproto-OFP15-table_stats_reply.packet.json | 16 - ryu/tests/unit/lib/ovs/__init__.py | 0 ryu/tests/unit/lib/ovs/test_vsctl.py | 789 - ryu/tests/unit/lib/test_addrconv.py | 56 - ryu/tests/unit/lib/test_hub.py | 239 - ryu/tests/unit/lib/test_import_module.py | 66 - ryu/tests/unit/lib/test_ip.py | 156 - ryu/tests/unit/lib/test_mac.py | 95 - ryu/tests/unit/lib/test_mod/__init__.py | 15 - ryu/tests/unit/lib/test_mod/aaa/__init__.py | 15 - ryu/tests/unit/lib/test_mod/aaa/mod.py | 17 - ryu/tests/unit/lib/test_mod/bbb/__init__.py | 15 - ryu/tests/unit/lib/test_mod/bbb/mod.py | 17 - ryu/tests/unit/lib/test_mod/ccc/__init__.py | 14 - ryu/tests/unit/lib/test_mod/ccc/mod.py | 16 - ryu/tests/unit/lib/test_mod/ddd/__init__.py | 14 - ryu/tests/unit/lib/test_mod/ddd/mod.py | 16 - ryu/tests/unit/lib/test_mod/eee.py | 16 - ryu/tests/unit/lib/test_mod/fff.py | 16 - ryu/tests/unit/lib/test_mod/ggg.py | 16 - ryu/tests/unit/lib/test_mrtlib.py | 765 - ryu/tests/unit/lib/test_of_config_classes.py | 442 - ryu/tests/unit/lib/test_ofctl.py | 642 - ryu/tests/unit/lib/test_ofctl_action_match.py | 868 - ryu/tests/unit/lib/test_ofctl_string.py | 151 - ryu/tests/unit/lib/test_ofctl_utils.py | 142 - ryu/tests/unit/lib/test_ofctl_v1_3.py | 54 - ryu/tests/unit/lib/test_ofp_pktinfilter.py | 92 - ryu/tests/unit/lib/test_pack_utils.py | 59 - ryu/tests/unit/lib/test_pcaplib.py | 230 - ryu/tests/unit/lib/test_rpc.py | 360 - ryu/tests/unit/lib/test_stringify.py | 75 - ryu/tests/unit/ofproto/__init__.py | 0 .../json/of10/1-1-ofp_packet_out.packet.json | 15 - .../ofproto/json/of10/1-2-ofp_flow_mod.packet.json | 37 - .../json/of10/1-4-ofp_packet_in.packet.json | 9 - .../json/of10/1-5-features_request.packet.json | 3 - .../json/of10/1-6-ofp_switch_features.packet.json | 37 - ...OFP10-ofp_packet_out_packet_library.packet.json | 58 - .../ovs-ofctl-of10-action_dec_mpls_ttl.packet.json | 37 - .../ovs-ofctl-of10-action_dec_nw_ttl.packet.json | 37 - .../ovs-ofctl-of10-action_pop_mpls.packet.json | 38 - .../ovs-ofctl-of10-action_push_mpls.packet.json | 38 - ...vs-ofctl-of10-action_set_mpls_label.packet.json | 38 - .../ovs-ofctl-of10-action_set_mpls_tc.packet.json | 38 - .../ovs-ofctl-of10-action_set_mpls_ttl.packet.json | 38 - .../json/of12/3-0-ofp_desc_stats_reply.packet.json | 15 - .../json/of12/3-1-ofp_packet_out.packet.json | 18 - .../ofproto/json/of12/3-10-ofp_hello.packet.json | 3 - .../of12/3-11-ofp_flow_stats_request.packet.json | 17 - .../of12/3-12-ofp_flow_stats_reply.packet.json | 161 - .../json/of12/3-13-ofp_echo_request.packet.json | 5 - .../json/of12/3-14-ofp_echo_reply.packet.json | 5 - .../json/of12/3-15-ofp_error_msg.packet.json | 7 - .../json/of12/3-16-ofp_experimenter.packet.json | 7 - .../json/of12/3-17-ofp_barrier_request.packet.json | 3 - .../json/of12/3-18-ofp_barrier_reply.packet.json | 3 - .../json/of12/3-19-ofp_role_request.packet.json | 6 - .../ofproto/json/of12/3-2-ofp_flow_mod.packet.json | 82 - .../json/of12/3-20-ofp_role_reply.packet.json | 6 - .../json/of12/3-21-ofp_group_mod.packet.json | 27 - .../json/of12/3-22-ofp_port_mod.packet.json | 9 - .../json/of12/3-23-ofp_table_mod.packet.json | 6 - .../of12/3-24-ofp_desc_stats_request.packet.json | 5 - .../3-25-ofp_aggregate_stats_request.packet.json | 17 - .../3-26-ofp_aggregate_stats_reply.packet.json | 13 - .../of12/3-27-ofp_table_stats_request.packet.json | 5 - .../of12/3-28-ofp_table_stats_reply.packet.json | 5108 --- .../of12/3-29-ofp_port_stats_request.packet.json | 6 - .../ofproto/json/of12/3-3-ofp_flow_mod.packet.json | 46 - .../of12/3-30-ofp_port_stats_reply.packet.json | 42 - ...31-ofp_group_features_stats_request.packet.json | 5 - ...3-32-ofp_group_features_stats_reply.packet.json | 25 - .../3-33-ofp_group_desc_stats_request.packet.json | 5 - .../3-34-ofp_group_desc_stats_reply.packet.json | 35 - .../3-35-ofp_queue_get_config_request.packet.json | 5 - .../3-36-ofp_queue_get_config_reply.packet.json | 53 - .../of12/3-37-ofp_queue_stats_request.packet.json | 7 - .../of12/3-38-ofp_queue_stats_reply.packet.json | 35 - .../json/of12/3-39-ofp_port_status.packet.json | 20 - .../json/of12/3-4-ofp_packet_in.packet.json | 80 - .../json/of12/3-40-ofp_flow_removed.packet.json | 29 - .../3-41-ofp_error_msg_experimenter.packet.json | 8 - .../json/of12/3-5-ofp_features_request.packet.json | 3 - .../json/of12/3-59-ofp_packet_in.packet.json | 262 - .../json/of12/3-6-ofp_features_reply.packet.json | 40 - .../json/of12/3-60-ofp_flow_mod.packet.json | 269 - .../of12/3-61-ofp_group_stats_request.packet.json | 6 - .../of12/3-62-ofp_group_stats_reply.packet.json | 25 - .../json/of12/3-7-ofp_set_config.packet.json | 6 - .../of12/3-8-ofp_get_config_request.packet.json | 3 - .../json/of12/3-9-ofp_get_config_reply.packet.json | 6 - .../lib-ofctl-ofp_group_stats_request.packet.json | 6 - .../lib-ofctl-ofp_port_stats_request.packet.json | 6 - ...-ofctl-ofp_queue_get_config_request.packet.json | 5 - .../lib-ofctl-ofp_queue_stats_request.packet1.json | 7 - .../lib-ofctl-ofp_queue_stats_request.packet2.json | 7 - .../lib-ofctl-ofp_queue_stats_request.packet3.json | 7 - ...OFP12-ofp_packet_out_packet_library.packet.json | 61 - .../json/of13/4-0-ofp_desc_reply.packet.json | 15 - .../json/of13/4-1-ofp_packet_out.packet.json | 18 - .../ofproto/json/of13/4-10-ofp_hello.packet.json | 20 - .../of13/4-11-ofp_flow_stats_request.packet.json | 18 - .../of13/4-12-ofp_flow_stats_reply.packet.json | 343 - .../json/of13/4-13-ofp_echo_request.packet.json | 5 - .../json/of13/4-14-ofp_echo_reply.packet.json | 5 - .../json/of13/4-15-ofp_error_msg.packet.json | 7 - .../json/of13/4-16-ofp_experimenter.packet.json | 7 - .../json/of13/4-17-ofp_barrier_request.packet.json | 3 - .../json/of13/4-18-ofp_barrier_reply.packet.json | 3 - .../json/of13/4-19-ofp_role_request.packet.json | 6 - .../ofproto/json/of13/4-2-ofp_flow_mod.packet.json | 201 - .../json/of13/4-20-ofp_role_reply.packet.json | 6 - .../json/of13/4-21-ofp_group_mod.packet.json | 27 - .../json/of13/4-22-ofp_port_mod.packet.json | 9 - .../json/of13/4-23-ofp_table_mod.packet.json | 6 - .../json/of13/4-24-ofp_desc_request.packet.json | 6 - .../4-25-ofp_aggregate_stats_request.packet.json | 18 - .../4-26-ofp_aggregate_stats_reply.packet.json | 13 - .../of13/4-27-ofp_table_stats_request.packet.json | 6 - .../of13/4-28-ofp_table_stats_reply.packet.json | 24 - .../of13/4-29-ofp_port_stats_request.packet.json | 7 - .../ofproto/json/of13/4-3-ofp_flow_mod.packet.json | 46 - .../of13/4-30-ofp_port_stats_reply.packet.json | 46 - .../4-31-ofp_group_features_request.packet.json | 6 - .../of13/4-32-ofp_group_features_reply.packet.json | 24 - .../of13/4-33-ofp_group_desc_request.packet.json | 6 - .../of13/4-34-ofp_group_desc_reply.packet.json | 35 - .../4-35-ofp_queue_get_config_request.packet.json | 5 - .../4-36-ofp_queue_get_config_reply.packet.json | 105 - .../of13/4-37-ofp_queue_stats_request.packet.json | 8 - .../of13/4-38-ofp_queue_stats_reply.packet.json | 41 - .../json/of13/4-39-ofp_port_status.packet.json | 20 - .../json/of13/4-4-ofp_packet_in.packet.json | 81 - .../json/of13/4-40-ofp_flow_removed.packet.json | 29 - .../4-41-ofp_error_msg_experimenter.packet.json | 8 - .../of13/4-42-ofp_get_async_request.packet.json | 3 - .../json/of13/4-43-ofp_get_async_reply.packet.json | 16 - .../json/of13/4-44-ofp_set_async.packet.json | 16 - .../json/of13/4-45-ofp_meter_mod.packet.json | 35 - .../json/of13/4-46-ofp_flow_mod.packet.json | 55 - .../of13/4-47-ofp_meter_config_request.packet.json | 7 - .../of13/4-48-ofp_meter_config_reply.packet.json | 25 - .../of13/4-49-ofp_meter_stats_request.packet.json | 7 - .../json/of13/4-5-ofp_features_request.packet.json | 3 - .../of13/4-50-ofp_meter_stats_reply.packet.json | 27 - .../4-51-ofp_meter_features_request.packet.json | 6 - .../of13/4-52-ofp_meter_features_reply.packet.json | 17 - .../of13/4-53-ofp_port_desc_request.packet.json | 6 - .../json/of13/4-54-ofp_port_desc_reply.packet.json | 38 - .../4-55-ofp_table_features_request.packet.json | 15945 --------- .../of13/4-56-ofp_table_features_reply.packet.json | 15945 --------- .../of13/4-57-ofp_group_stats_request.packet.json | 7 - .../of13/4-58-ofp_group_stats_reply.packet.json | 27 - .../json/of13/4-59-ofp_packet_in.packet.json | 312 - .../json/of13/4-6-ofp_features_reply.packet.json | 9 - .../json/of13/4-60-ofp_flow_mod.packet.json | 318 - .../of13/4-61-ofp_experimenter_request.packet.json | 9 - .../of13/4-62-ofp_experimenter_reply.packet.json | 13 - .../of13/4-63-onf_flow_monitor_request.packet.json | 337 - .../json/of13/4-7-ofp_set_config.packet.json | 6 - .../of13/4-8-ofp_get_config_request.packet.json | 3 - .../json/of13/4-9-ofp_get_config_reply.packet.json | 6 - .../lib-ofctl-ofp_group_stats_request.packet.json | 7 - .../lib-ofctl-ofp_meter_config_request.packet.json | 7 - .../lib-ofctl-ofp_meter_stats_request.packet.json | 7 - .../lib-ofctl-ofp_port_stats_request.packet.json | 7 - ...-ofctl-ofp_queue_get_config_request.packet.json | 5 - .../lib-ofctl-ofp_queue_stats_request.packet1.json | 8 - .../lib-ofctl-ofp_queue_stats_request.packet2.json | 8 - .../lib-ofctl-ofp_queue_stats_request.packet3.json | 8 - ...ib-ofctl-ofp_table_features_request.packet.json | 7 - .../of13/libofproto-OFP13-echo_reply.packet.json | 5 - .../of13/libofproto-OFP13-echo_request.packet.json | 5 - .../of13/libofproto-OFP13-error_msg.packet.json | 7 - .../libofproto-OFP13-features_reply.packet.json | 9 - .../of13/libofproto-OFP13-flow_mod.packet.json | 192 - ...bofproto-OFP13-flow_mod.packet.truncated64.json | 33 - ...bofproto-OFP13-flow_mod_conjunction.packet.json | 100 - ...ibofproto-OFP13-flow_mod_match_conj.packet.json | 66 - .../of13/libofproto-OFP13-flow_removed.packet.json | 78 - .../libofproto-OFP13-get_config_reply.packet.json | 6 - .../json/of13/libofproto-OFP13-hello.packet.json | 15 - .../of13/libofproto-OFP13-meter_mod.packet.json | 26 - ...OFP13-ofp_packet_out_packet_library.packet.json | 61 - .../of13/libofproto-OFP13-packet_in.packet.json | 46 - .../of13/libofproto-OFP13-port_mod.packet.json | 9 - .../of13/libofproto-OFP13-port_status.packet.json | 20 - .../of13/libofproto-OFP13-set_config.packet.json | 6 - .../of13/libofproto-OFP13-table_mod.packet.json | 6 - .../ovs-ofctl-of13-action_conjunction.packet.json | 100 - .../ovs-ofctl-of13-action_controller.packet.json | 43 - .../ovs-ofctl-of13-action_controller2.packet.json | 51 - .../json/of13/ovs-ofctl-of13-action_ct.packet.json | 61 - .../of13/ovs-ofctl-of13-action_ct_exec.packet.json | 75 - .../of13/ovs-ofctl-of13-action_ct_nat.packet.json | 70 - .../ovs-ofctl-of13-action_ct_nat_v6.packet.json | 70 - ...s-ofctl-of13-action_dec_ttl_cnt_ids.packet.json | 62 - .../ovs-ofctl-of13-action_fintimeout.packet.json | 57 - .../of13/ovs-ofctl-of13-action_learn.packet.json | 192 - .../of13/ovs-ofctl-of13-action_note.packet.json | 48 - .../ovs-ofctl-of13-action_output_trunc.packet.json | 42 - .../ovs-ofctl-of13-action_resubmit.packet.json | 99 - .../of13/ovs-ofctl-of13-action_sample.packet.json | 44 - .../of13/ovs-ofctl-of13-action_sample2.packet.json | 45 - .../ovs-ofctl-of13-action_stack_pop.packet.json | 43 - .../ovs-ofctl-of13-action_stack_push.packet.json | 43 - .../of13/ovs-ofctl-of13-match_conj.packet.json | 60 - ...s-ofctl-of13-match_load_nx_register.packet.json | 58 - ...s-ofctl-of13-match_move_nx_register.packet.json | 60 - .../of13/ovs-ofctl-of13-match_pkt_mark.packet.json | 60 - ...vs-ofctl-of13-match_pkt_mark_masked.packet.json | 60 - .../json/of14/5-0-ofp_desc_reply.packet.json | 15 - .../json/of14/5-1-ofp_packet_out.packet.json | 18 - .../ofproto/json/of14/5-10-ofp_hello.packet.json | 20 - .../of14/5-11-ofp_flow_stats_request.packet.json | 18 - .../of14/5-12-ofp_flow_stats_reply.packet.json | 347 - .../json/of14/5-13-ofp_echo_request.packet.json | 5 - .../json/of14/5-14-ofp_echo_reply.packet.json | 5 - .../json/of14/5-15-ofp_error_msg.packet.json | 7 - .../json/of14/5-16-ofp_experimenter.packet.json | 7 - .../json/of14/5-17-ofp_barrier_request.packet.json | 3 - .../json/of14/5-18-ofp_barrier_reply.packet.json | 3 - .../json/of14/5-19-ofp_role_request.packet.json | 6 - .../ofproto/json/of14/5-2-ofp_flow_mod.packet.json | 202 - .../json/of14/5-20-ofp_role_reply.packet.json | 6 - .../json/of14/5-21-ofp_group_mod.packet.json | 27 - .../json/of14/5-22-ofp_port_mod.packet.json | 60 - .../json/of14/5-23-ofp_table_mod.packet.json | 56 - .../json/of14/5-24-ofp_desc_request.packet.json | 6 - .../5-25-ofp_aggregate_stats_request.packet.json | 18 - .../5-26-ofp_aggregate_stats_reply.packet.json | 13 - .../of14/5-27-ofp_table_stats_request.packet.json | 6 - .../of14/5-28-ofp_table_stats_reply.packet.json | 24 - .../of14/5-29-ofp_port_stats_request.packet.json | 7 - .../ofproto/json/of14/5-3-ofp_flow_mod.packet.json | 47 - .../of14/5-30-ofp_port_stats_reply.packet.json | 113 - .../5-31-ofp_group_features_request.packet.json | 6 - .../of14/5-32-ofp_group_features_reply.packet.json | 24 - .../of14/5-33-ofp_group_desc_request.packet.json | 6 - .../of14/5-34-ofp_group_desc_reply.packet.json | 35 - .../of14/5-35-ofp_queue_stats_request.packet.json | 8 - .../of14/5-36-ofp_queue_stats_reply.packet.json | 80 - .../json/of14/5-37-ofp_port_status.packet.json | 76 - .../json/of14/5-38-ofp_flow_removed.packet.json | 29 - .../5-39-ofp_error_msg_experimenter.packet.json | 8 - .../json/of14/5-4-ofp_packet_in.packet.json | 81 - .../of14/5-40-ofp_get_async_request.packet.json | 3 - .../json/of14/5-41-ofp_get_async_reply.packet.json | 122 - .../json/of14/5-42-ofp_set_async.packet.json | 122 - .../json/of14/5-43-ofp_meter_mod.packet.json | 35 - .../json/of14/5-44-ofp_flow_mod.packet.json | 56 - .../of14/5-45-ofp_meter_config_request.packet.json | 7 - .../of14/5-46-ofp_meter_config_reply.packet.json | 25 - .../of14/5-47-ofp_meter_stats_request.packet.json | 7 - .../of14/5-48-ofp_meter_stats_reply.packet.json | 27 - .../5-49-ofp_meter_features_request.packet.json | 6 - .../json/of14/5-5-ofp_features_request.packet.json | 3 - .../of14/5-50-ofp_meter_features_reply.packet.json | 17 - .../of14/5-51-ofp_port_desc_request.packet.json | 6 - .../json/of14/5-52-ofp_port_desc_reply.packet.json | 103 - .../5-53-ofp_table_features_request.packet.json | 15945 --------- .../of14/5-54-ofp_table_features_reply.packet.json | 15945 --------- .../of14/5-55-ofp_group_stats_request.packet.json | 7 - .../of14/5-56-ofp_group_stats_reply.packet.json | 27 - .../json/of14/5-57-ofp_packet_in.packet.json | 298 - .../json/of14/5-58-ofp_flow_mod.packet.json | 305 - .../of14/5-59-ofp_experimenter_request.packet.json | 9 - .../json/of14/5-6-ofp_features_reply.packet.json | 9 - .../of14/5-60-ofp_experimenter_reply.packet.json | 13 - .../of14/5-61-ofp_table_desc_request.packet.json | 6 - .../of14/5-62-ofp_table_desc_reply.packet.json | 83 - .../of14/5-63-ofp_queue_desc_request.packet.json | 8 - .../of14/5-64-ofp_queue_desc_reply.packet.json | 81 - .../json/of14/5-65-ofp_role_status.packet.json | 41 - .../of14/5-66-ofp_flow_monitor_request.packet.json | 27 - .../of14/5-67-ofp_flow_monitor_reply.packet.json | 66 - .../json/of14/5-68-ofp_table_status.packet.json | 62 - .../json/of14/5-69-ofp_bundle_ctrl_msg.packet.json | 41 - .../json/of14/5-7-ofp_set_config.packet.json | 6 - .../json/of14/5-70-ofp_bundle_add_msg.packet.json | 45 - .../json/of14/5-71-ofp_requestforward.packet.json | 31 - .../of14/5-8-ofp_get_config_request.packet.json | 3 - .../json/of14/5-9-ofp_get_config_reply.packet.json | 6 - ...ib-ofctl-ofp_table_features_request.packet.json | 7 - ...OFP14-ofp_packet_out_packet_library.packet.json | 61 - .../lib-ofctl-OFP15-flow_desc_reply.packet.json | 105 - .../lib-ofctl-OFP15-flow_desc_request.packet.json | 26 - .../json/of15/lib-ofctl-OFP15-flow_mod.packet.json | 234 - .../lib-ofctl-ofp_queue_stats_request.packet.json | 8 - ...ib-ofctl-ofp_table_features_request.packet.json | 7 - ...ofproto-OFP15-aggregate_stats_reply.packet.json | 24 - ...proto-OFP15-aggregate_stats_request.packet.json | 18 - .../libofproto-OFP15-barrier_reply.packet.json | 3 - .../libofproto-OFP15-barrier_request.packet.json | 3 - .../of15/libofproto-OFP15-bundle_add.packet.json | 200 - .../of15/libofproto-OFP15-bundle_ctrl.packet.json | 8 - ...ofproto-OFP15-bundle_features_reply.packet.json | 43 - ...proto-OFP15-bundle_features_request.packet.json | 39 - .../libofproto-OFP15-controller_status.packet.json | 22 - ...proto-OFP15-controller_status_reply.packet.json | 26 - ...oto-OFP15-controller_status_request.packet.json | 6 - .../of15/libofproto-OFP15-desc_reply.packet.json | 15 - .../of15/libofproto-OFP15-desc_request.packet.json | 6 - .../of15/libofproto-OFP15-echo_reply.packet.json | 5 - .../of15/libofproto-OFP15-echo_request.packet.json | 5 - .../of15/libofproto-OFP15-error_msg.packet.json | 7 - ...fproto-OFP15-error_msg_experimenter.packet.json | 8 - .../of15/libofproto-OFP15-experimenter.packet.json | 7 - ...libofproto-OFP15-experimenter_reply.packet.json | 13 - ...bofproto-OFP15-experimenter_request.packet.json | 9 - .../libofproto-OFP15-features_reply.packet.json | 9 - .../libofproto-OFP15-features_request.packet.json | 3 - .../libofproto-OFP15-flow_desc_reply.packet.json | 57 - .../libofproto-OFP15-flow_desc_request.packet.json | 26 - .../of15/libofproto-OFP15-flow_mod.packet.json | 193 - ...bofproto-OFP15-flow_mod_conjunction.packet.json | 101 - ...ibofproto-OFP15-flow_mod_match_conj.packet.json | 67 - .../libofproto-OFP15-flow_mod_no_nx.packet.json | 202 - ...libofproto-OFP15-flow_monitor_reply.packet.json | 66 - ...bofproto-OFP15-flow_monitor_request.packet.json | 27 - .../of15/libofproto-OFP15-flow_removed.packet.json | 38 - .../libofproto-OFP15-flow_stats_reply.packet.json | 44 - ...libofproto-OFP15-flow_stats_request.packet.json | 18 - .../libofproto-OFP15-get_async_reply.packet.json | 122 - .../libofproto-OFP15-get_async_request.packet.json | 3 - .../libofproto-OFP15-get_config_reply.packet.json | 6 - ...libofproto-OFP15-get_config_request.packet.json | 3 - .../libofproto-OFP15-group_desc_reply.packet.json | 45 - ...libofproto-OFP15-group_desc_request.packet.json | 7 - ...bofproto-OFP15-group_features_reply.packet.json | 24 - ...fproto-OFP15-group_features_request.packet.json | 6 - .../of15/libofproto-OFP15-group_mod.packet.json | 63 - .../libofproto-OFP15-group_stats_reply.packet.json | 27 - ...ibofproto-OFP15-group_stats_request.packet.json | 7 - .../json/of15/libofproto-OFP15-hello.packet.json | 15 - .../libofproto-OFP15-meter_desc_reply.packet.json | 25 - ...libofproto-OFP15-meter_desc_request.packet.json | 7 - ...bofproto-OFP15-meter_features_reply.packet.json | 18 - ...fproto-OFP15-meter_features_request.packet.json | 6 - .../of15/libofproto-OFP15-meter_mod.packet.json | 26 - .../libofproto-OFP15-meter_stats_reply.packet.json | 27 - ...ibofproto-OFP15-meter_stats_request.packet.json | 7 - .../of15/libofproto-OFP15-packet_in.packet.json | 46 - .../of15/libofproto-OFP15-packet_out.packet.json | 32 - .../libofproto-OFP15-port_desc_reply.packet.json | 103 - .../libofproto-OFP15-port_desc_request.packet.json | 7 - .../of15/libofproto-OFP15-port_mod.packet.json | 60 - .../libofproto-OFP15-port_stats_reply.packet.json | 113 - ...libofproto-OFP15-port_stats_request.packet.json | 7 - .../of15/libofproto-OFP15-port_status.packet.json | 76 - .../libofproto-OFP15-queue_desc_reply.packet.json | 81 - ...libofproto-OFP15-queue_desc_request.packet.json | 8 - .../libofproto-OFP15-queue_stats_reply.packet.json | 80 - ...ibofproto-OFP15-queue_stats_request.packet.json | 8 - .../libofproto-OFP15-requestforward.packet.json | 67 - .../of15/libofproto-OFP15-role_reply.packet.json | 7 - .../of15/libofproto-OFP15-role_request.packet.json | 7 - .../of15/libofproto-OFP15-role_status.packet.json | 8 - .../of15/libofproto-OFP15-set_async.packet.json | 122 - .../of15/libofproto-OFP15-set_config.packet.json | 6 - .../libofproto-OFP15-table_desc_reply.packet.json | 83 - ...libofproto-OFP15-table_desc_request.packet.json | 6 - ...bofproto-OFP15-table_features_reply.packet.json | 38 - ...fproto-OFP15-table_features_request.packet.json | 38 - .../of15/libofproto-OFP15-table_mod.packet.json | 15 - .../libofproto-OFP15-table_stats_reply.packet.json | 24 - ...ibofproto-OFP15-table_stats_request.packet.json | 6 - .../of15/libofproto-OFP15-table_status.packet.json | 62 - ryu/tests/unit/ofproto/test_ether.py | 37 - ryu/tests/unit/ofproto/test_inet.py | 43 - ryu/tests/unit/ofproto/test_nx_flow_spec.py | 95 - ryu/tests/unit/ofproto/test_ofproto.py | 81 - ryu/tests/unit/ofproto/test_ofproto_common.py | 37 - ryu/tests/unit/ofproto/test_ofproto_parser.py | 244 - ryu/tests/unit/ofproto/test_ofproto_v12.py | 717 - ryu/tests/unit/ofproto/test_oxm.py | 188 - ryu/tests/unit/ofproto/test_oxs.py | 116 - ryu/tests/unit/ofproto/test_parser.py | 310 - ryu/tests/unit/ofproto/test_parser_compat.py | 160 - ryu/tests/unit/ofproto/test_parser_ofpmatch.py | 290 - ryu/tests/unit/ofproto/test_parser_ofpstats.py | 207 - ryu/tests/unit/ofproto/test_parser_v10.py | 5556 ---- ryu/tests/unit/ofproto/test_parser_v12.py | 7560 ----- ryu/tests/unit/ofproto/test_parser_v13.py | 164 - ryu/tests/unit/packet/__init__.py | 0 ryu/tests/unit/packet/test_arp.py | 183 - ryu/tests/unit/packet/test_bfd.py | 320 - ryu/tests/unit/packet/test_bgp.py | 813 - ryu/tests/unit/packet/test_bmp.py | 136 - ryu/tests/unit/packet/test_bpdu.py | 469 - ryu/tests/unit/packet/test_cfm.py | 1761 - ryu/tests/unit/packet/test_dhcp.py | 218 - ryu/tests/unit/packet/test_ethernet.py | 103 - ryu/tests/unit/packet/test_geneve.py | 62 - ryu/tests/unit/packet/test_gre.py | 115 - ryu/tests/unit/packet/test_icmp.py | 380 - ryu/tests/unit/packet/test_icmpv6.py | 2039 -- ryu/tests/unit/packet/test_igmp.py | 997 - ryu/tests/unit/packet/test_ipv4.py | 137 - ryu/tests/unit/packet/test_ipv6.py | 1128 - ryu/tests/unit/packet/test_llc.py | 42 - ryu/tests/unit/packet/test_lldp.py | 533 - ryu/tests/unit/packet/test_mpls.py | 92 - ryu/tests/unit/packet/test_openflow.py | 64 - ryu/tests/unit/packet/test_ospf.py | 120 - ryu/tests/unit/packet/test_packet.py | 1553 - ryu/tests/unit/packet/test_pbb.py | 172 - ryu/tests/unit/packet/test_sctp.py | 1454 - ryu/tests/unit/packet/test_slow.py | 1104 - ryu/tests/unit/packet/test_tcp.py | 267 - ryu/tests/unit/packet/test_udp.py | 110 - ryu/tests/unit/packet/test_vlan.py | 265 - ryu/tests/unit/packet/test_vrrp.py | 496 - ryu/tests/unit/packet/test_vxlan.py | 82 - ryu/tests/unit/packet/test_zebra.py | 66 - ryu/tests/unit/sample/__init__.py | 0 ryu/tests/unit/sample/test_sample1.py | 20 - ryu/tests/unit/sample/test_sample2.py | 14 - ryu/tests/unit/services/__init__.py | 0 ryu/tests/unit/services/protocols/__init__.py | 0 ryu/tests/unit/services/protocols/bgp/__init__.py | 0 .../protocols/bgp/core_managers/__init__.py | 0 .../bgp/core_managers/test_table_manager.py | 937 - .../unit/services/protocols/bgp/test_bgpspeaker.py | 1088 - ryu/tests/unit/services/protocols/bgp/test_peer.py | 375 - .../unit/services/protocols/bgp/utils/__init__.py | 0 .../unit/services/protocols/bgp/utils/test_bgp.py | 211 - .../protocols/bgp/utils/test_validation.py | 215 - ryu/tests/unit/test_requirements.py | 85 - ryu/tests/unit/test_utils.py | 84 - tests/__init__.py | 0 tests/integrated/__init__.py | 0 tests/integrated/bgp/__init__.py | 0 tests/integrated/bgp/base.py | 84 + tests/integrated/bgp/base_ip6.py | 84 + tests/integrated/bgp/test_basic.py | 49 + tests/integrated/bgp/test_ip6_basic.py | 49 + tests/integrated/common/__init__.py | 0 tests/integrated/common/docker_base.py | 801 + tests/integrated/common/install_docker_test_pkg.sh | 43 + .../common/install_docker_test_pkg_common.sh | 39 + .../common/install_docker_test_pkg_for_travis.sh | 12 + tests/integrated/common/quagga.py | 332 + tests/integrated/common/ryubgp.py | 212 + tests/integrated/run_test.py | 54 + tests/integrated/run_tests_with_ovs12.py | 110 + tests/integrated/test_add_flow_v10.py | 258 + tests/integrated/test_add_flow_v12_actions.py | 496 + tests/integrated/test_add_flow_v12_matches.py | 1200 + tests/integrated/test_of_config.py | 328 + tests/integrated/test_request_reply_v12.py | 1055 + tests/integrated/test_vrrp_linux_multi.py | 103 + tests/integrated/test_vrrp_linux_multi.sh | 34 + tests/integrated/test_vrrp_multi.py | 143 + tests/integrated/test_vrrp_multi.sh | 42 + tests/integrated/tester.py | 214 + tests/integrated/vrrp_common.py | 221 + tests/mininet/l2/mpls/PopMPLS_mpls.mn | 6 + tests/mininet/l2/mpls/PushMPLS_ip.mn | 6 + tests/mininet/l2/mpls/PushMPLS_mpls.mn | 6 + tests/mininet/l2/mpls/test_mpls.py | 127 + tests/mininet/l2/vlan/PopVLAN_vlan.mn | 6 + tests/mininet/l2/vlan/PopVLAN_vlanvlan.mn | 6 + tests/mininet/l2/vlan/PushVLAN_icmp.mn | 6 + tests/mininet/l2/vlan/test_vlan.py | 130 + tests/mininet/l3/icmp/ICMP_ping.mn | 6 + tests/mininet/l3/icmp/ICMP_reply.mn | 6 + tests/mininet/l3/icmp/test_icmp.py | 84 + tests/mininet/l3/ip_ttl/DecNwTtl.mn | 6 + tests/mininet/l3/ip_ttl/test_ip_ttl.py | 84 + tests/mininet/packet_lib/arp/ARP_gratuitous.mn | 7 + tests/mininet/packet_lib/arp/ARP_reply.mn | 7 + tests/mininet/packet_lib/arp/ARP_request.mn | 7 + tests/mininet/packet_lib/arp/test_arp.py | 199 + tests/mininet/run_mnet-test.sh | 274 + tests/packet_data/bgp4/bgp4-keepalive.pcap | Bin 0 -> 113 bytes tests/packet_data/bgp4/bgp4-open.pcap | Bin 0 -> 147 bytes tests/packet_data/bgp4/bgp4-update.pcap | Bin 0 -> 146 bytes tests/packet_data/bgp4/bgp4-update_ipv6.pcap | Bin 0 -> 233 bytes tests/packet_data/bgp4/bgp4-update_vpnv6.pcap | Bin 0 -> 209 bytes tests/packet_data/bgp4/evpn_esi_arbitrary.pcap | Bin 0 -> 156 bytes tests/packet_data/bgp4/evpn_esi_as_based.pcap | Bin 0 -> 156 bytes tests/packet_data/bgp4/evpn_esi_l2_bridge.pcap | Bin 0 -> 156 bytes tests/packet_data/bgp4/evpn_esi_lacp.pcap | Bin 0 -> 156 bytes tests/packet_data/bgp4/evpn_esi_mac_base.pcap | Bin 0 -> 156 bytes tests/packet_data/bgp4/evpn_esi_router_id.pcap | Bin 0 -> 156 bytes tests/packet_data/bgp4/evpn_nlri_eth_a-d.pcap | Bin 0 -> 156 bytes tests/packet_data/bgp4/evpn_nlri_eth_seg.pcap | Bin 0 -> 154 bytes .../bgp4/evpn_nlri_inc_multi_eth_tag.pcap | Bin 0 -> 148 bytes tests/packet_data/bgp4/evpn_nlri_ip_prefix.pcap | Bin 0 -> 190 bytes tests/packet_data/bgp4/evpn_nlri_mac_ip_ad.pcap | Bin 0 -> 168 bytes .../packet_data/bgp4/flowspec_action_redirect.pcap | Bin 0 -> 173 bytes .../bgp4/flowspec_action_traffic_action.pcap | Bin 0 -> 173 bytes .../bgp4/flowspec_action_traffic_marking.pcap | Bin 0 -> 173 bytes .../bgp4/flowspec_action_traffic_rate.pcap | Bin 0 -> 173 bytes tests/packet_data/bgp4/flowspec_nlri_ipv4.pcap | Bin 0 -> 273 bytes tests/packet_data/bgp4/flowspec_nlri_ipv6.pcap | Bin 0 -> 264 bytes tests/packet_data/bgp4/flowspec_nlri_l2vpn.pcap | Bin 0 -> 241 bytes tests/packet_data/bgp4/flowspec_nlri_vpn4.pcap | Bin 0 -> 289 bytes tests/packet_data/bgp4/flowspec_nlri_vpn6.pcap | Bin 0 -> 273 bytes tests/packet_data/mrt/rib.20161101.0000_pick.bz2 | Bin 0 -> 271 bytes tests/packet_data/mrt/updates.20161101.0000.bz2 | Bin 0 -> 20939 bytes tests/packet_data/of10/1-1-ofp_packet_out.packet | Bin 0 -> 122 bytes tests/packet_data/of10/1-2-ofp_flow_mod.packet | Bin 0 -> 80 bytes tests/packet_data/of10/1-4-ofp_packet_in.packet | Bin 0 -> 60 bytes tests/packet_data/of10/1-5-features_request.packet | Bin 0 -> 8 bytes .../of10/1-6-ofp_switch_features.packet | Bin 0 -> 128 bytes ...roto-OFP10-ofp_packet_out_packet_library.packet | Bin 0 -> 122 bytes .../of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet | Bin 0 -> 88 bytes .../of10/ovs-ofctl-of10-action_dec_nw_ttl.packet | Bin 0 -> 88 bytes .../of10/ovs-ofctl-of10-action_pop_mpls.packet | Bin 0 -> 88 bytes .../of10/ovs-ofctl-of10-action_push_mpls.packet | Bin 0 -> 88 bytes .../ovs-ofctl-of10-action_set_mpls_label.packet | Bin 0 -> 88 bytes .../of10/ovs-ofctl-of10-action_set_mpls_tc.packet | Bin 0 -> 88 bytes .../of10/ovs-ofctl-of10-action_set_mpls_ttl.packet | Bin 0 -> 88 bytes .../of12/3-0-ofp_desc_stats_reply.packet | Bin 0 -> 1072 bytes tests/packet_data/of12/3-1-ofp_packet_out.packet | Bin 0 -> 138 bytes tests/packet_data/of12/3-10-ofp_hello.packet | Bin 0 -> 8 bytes .../of12/3-11-ofp_flow_stats_request.packet | Bin 0 -> 56 bytes .../of12/3-12-ofp_flow_stats_reply.packet | Bin 0 -> 320 bytes .../packet_data/of12/3-13-ofp_echo_request.packet | Bin 0 -> 12 bytes tests/packet_data/of12/3-14-ofp_echo_reply.packet | Bin 0 -> 12 bytes tests/packet_data/of12/3-15-ofp_error_msg.packet | Bin 0 -> 20 bytes .../packet_data/of12/3-16-ofp_experimenter.packet | Bin 0 -> 20 bytes .../of12/3-17-ofp_barrier_request.packet | Bin 0 -> 8 bytes .../packet_data/of12/3-18-ofp_barrier_reply.packet | Bin 0 -> 8 bytes .../packet_data/of12/3-19-ofp_role_request.packet | Bin 0 -> 24 bytes tests/packet_data/of12/3-2-ofp_flow_mod.packet | Bin 0 -> 128 bytes tests/packet_data/of12/3-20-ofp_role_reply.packet | Bin 0 -> 24 bytes tests/packet_data/of12/3-21-ofp_group_mod.packet | Bin 0 -> 48 bytes tests/packet_data/of12/3-22-ofp_port_mod.packet | Bin 0 -> 40 bytes tests/packet_data/of12/3-23-ofp_table_mod.packet | Bin 0 -> 16 bytes .../of12/3-24-ofp_desc_stats_request.packet | Bin 0 -> 16 bytes .../of12/3-25-ofp_aggregate_stats_request.packet | Bin 0 -> 56 bytes .../of12/3-26-ofp_aggregate_stats_reply.packet | Bin 0 -> 40 bytes .../of12/3-27-ofp_table_stats_request.packet | Bin 0 -> 16 bytes .../of12/3-28-ofp_table_stats_reply.packet | Bin 0 -> 32656 bytes .../of12/3-29-ofp_port_stats_request.packet | Bin 0 -> 24 bytes tests/packet_data/of12/3-3-ofp_flow_mod.packet | Bin 0 -> 80 bytes .../of12/3-30-ofp_port_stats_reply.packet | Bin 0 -> 224 bytes .../3-31-ofp_group_features_stats_request.packet | Bin 0 -> 16 bytes .../3-32-ofp_group_features_stats_reply.packet | Bin 0 -> 56 bytes .../of12/3-33-ofp_group_desc_stats_request.packet | Bin 0 -> 16 bytes .../of12/3-34-ofp_group_desc_stats_reply.packet | Bin 0 -> 56 bytes .../of12/3-35-ofp_queue_get_config_request.packet | Bin 0 -> 16 bytes .../of12/3-36-ofp_queue_get_config_reply.packet | Bin 0 -> 112 bytes .../of12/3-37-ofp_queue_stats_request.packet | Bin 0 -> 24 bytes .../of12/3-38-ofp_queue_stats_reply.packet | Bin 0 -> 112 bytes tests/packet_data/of12/3-39-ofp_port_status.packet | Bin 0 -> 80 bytes tests/packet_data/of12/3-4-ofp_packet_in.packet | Bin 0 -> 140 bytes .../packet_data/of12/3-40-ofp_flow_removed.packet | Bin 0 -> 64 bytes .../of12/3-41-ofp_error_msg_experimenter.packet | Bin 0 -> 27 bytes .../of12/3-5-ofp_features_request.packet | Bin 0 -> 8 bytes tests/packet_data/of12/3-59-ofp_packet_in.packet | Bin 0 -> 314 bytes .../packet_data/of12/3-6-ofp_features_reply.packet | Bin 0 -> 160 bytes tests/packet_data/of12/3-60-ofp_flow_mod.packet | Bin 0 -> 344 bytes .../of12/3-61-ofp_group_stats_request.packet | Bin 0 -> 24 bytes .../of12/3-62-ofp_group_stats_reply.packet | Bin 0 -> 64 bytes tests/packet_data/of12/3-7-ofp_set_config.packet | Bin 0 -> 12 bytes .../of12/3-8-ofp_get_config_request.packet | Bin 0 -> 8 bytes .../of12/3-9-ofp_get_config_reply.packet | Bin 0 -> 12 bytes ...roto-OFP12-ofp_packet_out_packet_library.packet | Bin 0 -> 138 bytes tests/packet_data/of13/4-0-ofp_desc_reply.packet | Bin 0 -> 1072 bytes tests/packet_data/of13/4-1-ofp_packet_out.packet | Bin 0 -> 138 bytes tests/packet_data/of13/4-10-ofp_hello.packet | Bin 0 -> 16 bytes .../of13/4-11-ofp_flow_stats_request.packet | Bin 0 -> 56 bytes .../of13/4-12-ofp_flow_stats_reply.packet | Bin 0 -> 552 bytes .../packet_data/of13/4-13-ofp_echo_request.packet | Bin 0 -> 12 bytes tests/packet_data/of13/4-14-ofp_echo_reply.packet | Bin 0 -> 12 bytes tests/packet_data/of13/4-15-ofp_error_msg.packet | Bin 0 -> 20 bytes .../packet_data/of13/4-16-ofp_experimenter.packet | Bin 0 -> 20 bytes .../of13/4-17-ofp_barrier_request.packet | Bin 0 -> 8 bytes .../packet_data/of13/4-18-ofp_barrier_reply.packet | Bin 0 -> 8 bytes .../packet_data/of13/4-19-ofp_role_request.packet | Bin 0 -> 24 bytes tests/packet_data/of13/4-2-ofp_flow_mod.packet | Bin 0 -> 280 bytes tests/packet_data/of13/4-20-ofp_role_reply.packet | Bin 0 -> 24 bytes tests/packet_data/of13/4-21-ofp_group_mod.packet | Bin 0 -> 48 bytes tests/packet_data/of13/4-22-ofp_port_mod.packet | Bin 0 -> 40 bytes tests/packet_data/of13/4-23-ofp_table_mod.packet | Bin 0 -> 16 bytes .../packet_data/of13/4-24-ofp_desc_request.packet | Bin 0 -> 16 bytes .../of13/4-25-ofp_aggregate_stats_request.packet | Bin 0 -> 56 bytes .../of13/4-26-ofp_aggregate_stats_reply.packet | Bin 0 -> 40 bytes .../of13/4-27-ofp_table_stats_request.packet | Bin 0 -> 16 bytes .../of13/4-28-ofp_table_stats_reply.packet | Bin 0 -> 64 bytes .../of13/4-29-ofp_port_stats_request.packet | Bin 0 -> 24 bytes tests/packet_data/of13/4-3-ofp_flow_mod.packet | Bin 0 -> 80 bytes .../of13/4-30-ofp_port_stats_reply.packet | Bin 0 -> 240 bytes .../of13/4-31-ofp_group_features_request.packet | Bin 0 -> 16 bytes .../of13/4-32-ofp_group_features_reply.packet | Bin 0 -> 56 bytes .../of13/4-33-ofp_group_desc_request.packet | Bin 0 -> 16 bytes .../of13/4-34-ofp_group_desc_reply.packet | Bin 0 -> 56 bytes .../of13/4-35-ofp_queue_get_config_request.packet | Bin 0 -> 16 bytes .../of13/4-36-ofp_queue_get_config_reply.packet | Bin 0 -> 211 bytes .../of13/4-37-ofp_queue_stats_request.packet | Bin 0 -> 24 bytes .../of13/4-38-ofp_queue_stats_reply.packet | Bin 0 -> 136 bytes tests/packet_data/of13/4-39-ofp_port_status.packet | Bin 0 -> 80 bytes tests/packet_data/of13/4-4-ofp_packet_in.packet | Bin 0 -> 148 bytes .../packet_data/of13/4-40-ofp_flow_removed.packet | Bin 0 -> 64 bytes .../of13/4-41-ofp_error_msg_experimenter.packet | Bin 0 -> 27 bytes .../of13/4-42-ofp_get_async_request.packet | Bin 0 -> 8 bytes .../of13/4-43-ofp_get_async_reply.packet | Bin 0 -> 32 bytes tests/packet_data/of13/4-44-ofp_set_async.packet | Bin 0 -> 32 bytes tests/packet_data/of13/4-45-ofp_meter_mod.packet | Bin 0 -> 64 bytes tests/packet_data/of13/4-46-ofp_flow_mod.packet | Bin 0 -> 96 bytes .../of13/4-47-ofp_meter_config_request.packet | Bin 0 -> 24 bytes .../of13/4-48-ofp_meter_config_reply.packet | Bin 0 -> 40 bytes .../of13/4-49-ofp_meter_stats_request.packet | Bin 0 -> 24 bytes .../of13/4-5-ofp_features_request.packet | Bin 0 -> 8 bytes .../of13/4-50-ofp_meter_stats_reply.packet | Bin 0 -> 72 bytes .../of13/4-51-ofp_meter_features_request.packet | Bin 0 -> 16 bytes .../of13/4-52-ofp_meter_features_reply.packet | Bin 0 -> 32 bytes .../of13/4-53-ofp_port_desc_request.packet | Bin 0 -> 16 bytes .../of13/4-54-ofp_port_desc_reply.packet | Bin 0 -> 144 bytes .../of13/4-55-ofp_table_features_request.packet | Bin 0 -> 11128 bytes .../of13/4-56-ofp_table_features_reply.packet | Bin 0 -> 11128 bytes .../of13/4-57-ofp_group_stats_request.packet | Bin 0 -> 24 bytes .../of13/4-58-ofp_group_stats_reply.packet | Bin 0 -> 72 bytes tests/packet_data/of13/4-59-ofp_packet_in.packet | Bin 0 -> 378 bytes .../packet_data/of13/4-6-ofp_features_reply.packet | Bin 0 -> 32 bytes tests/packet_data/of13/4-60-ofp_flow_mod.packet | Bin 0 -> 400 bytes .../of13/4-61-ofp_experimenter_request.packet | Bin 0 -> 32 bytes .../of13/4-62-ofp_experimenter_reply.packet | Bin 0 -> 40 bytes .../of13/4-63-onf_flow_monitor_request.packet | Bin 0 -> 408 bytes tests/packet_data/of13/4-7-ofp_set_config.packet | Bin 0 -> 12 bytes .../of13/4-8-ofp_get_config_request.packet | Bin 0 -> 8 bytes .../of13/4-9-ofp_get_config_reply.packet | Bin 0 -> 12 bytes .../of13/libofproto-OFP13-echo_reply.packet | Bin 0 -> 8 bytes .../of13/libofproto-OFP13-echo_request.packet | Bin 0 -> 8 bytes .../of13/libofproto-OFP13-error_msg.packet | Bin 0 -> 20 bytes .../of13/libofproto-OFP13-features_reply.packet | Bin 0 -> 32 bytes .../of13/libofproto-OFP13-flow_mod.packet | Bin 0 -> 256 bytes .../of13/libofproto-OFP13-flow_mod.truncated64 | 0 .../libofproto-OFP13-flow_mod_conjunction.packet | Bin 0 -> 144 bytes .../libofproto-OFP13-flow_mod_match_conj.packet | Bin 0 -> 104 bytes .../of13/libofproto-OFP13-flow_removed.packet | Bin 0 -> 120 bytes .../of13/libofproto-OFP13-get_config_reply.packet | Bin 0 -> 12 bytes .../packet_data/of13/libofproto-OFP13-hello.packet | Bin 0 -> 16 bytes .../of13/libofproto-OFP13-meter_mod.packet | Bin 0 -> 48 bytes ...roto-OFP13-ofp_packet_out_packet_library.packet | Bin 0 -> 138 bytes .../of13/libofproto-OFP13-packet_in.packet | Bin 0 -> 70 bytes .../of13/libofproto-OFP13-port_mod.packet | Bin 0 -> 40 bytes .../of13/libofproto-OFP13-port_status.packet | Bin 0 -> 80 bytes .../of13/libofproto-OFP13-set_config.packet | Bin 0 -> 12 bytes .../of13/libofproto-OFP13-table_mod.packet | Bin 0 -> 16 bytes .../of13/ovs-ofctl-of13-action_conjunction.packet | Bin 0 -> 144 bytes .../of13/ovs-ofctl-of13-action_controller.packet | Bin 0 -> 80 bytes .../of13/ovs-ofctl-of13-action_controller2.packet | Bin 0 -> 128 bytes .../of13/ovs-ofctl-of13-action_ct.packet | Bin 0 -> 104 bytes .../of13/ovs-ofctl-of13-action_ct_exec.packet | Bin 0 -> 120 bytes .../of13/ovs-ofctl-of13-action_ct_nat.packet | Bin 0 -> 128 bytes .../of13/ovs-ofctl-of13-action_ct_nat_v6.packet | Bin 0 -> 144 bytes .../ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet | Bin 0 -> 104 bytes .../of13/ovs-ofctl-of13-action_fintimeout.packet | Bin 0 -> 88 bytes .../of13/ovs-ofctl-of13-action_learn.packet | Bin 0 -> 256 bytes .../of13/ovs-ofctl-of13-action_note.packet | Bin 0 -> 80 bytes .../of13/ovs-ofctl-of13-action_output_trunc.packet | Bin 0 -> 80 bytes .../of13/ovs-ofctl-of13-action_resubmit.packet | Bin 0 -> 144 bytes .../of13/ovs-ofctl-of13-action_sample.packet | Bin 0 -> 88 bytes .../of13/ovs-ofctl-of13-action_sample2.packet | Bin 0 -> 96 bytes .../of13/ovs-ofctl-of13-action_stack_pop.packet | Bin 0 -> 88 bytes .../of13/ovs-ofctl-of13-action_stack_push.packet | Bin 0 -> 88 bytes .../of13/ovs-ofctl-of13-match_conj.packet | Bin 0 -> 96 bytes .../ovs-ofctl-of13-match_load_nx_register.packet | Bin 0 -> 104 bytes .../ovs-ofctl-of13-match_move_nx_register.packet | Bin 0 -> 104 bytes .../of13/ovs-ofctl-of13-match_pkt_mark.packet | Bin 0 -> 96 bytes .../ovs-ofctl-of13-match_pkt_mark_masked.packet | Bin 0 -> 96 bytes tests/packet_data/of14/5-0-ofp_desc_reply.packet | Bin 0 -> 1072 bytes tests/packet_data/of14/5-1-ofp_packet_out.packet | Bin 0 -> 138 bytes tests/packet_data/of14/5-10-ofp_hello.packet | Bin 0 -> 16 bytes .../of14/5-11-ofp_flow_stats_request.packet | Bin 0 -> 56 bytes .../of14/5-12-ofp_flow_stats_reply.packet | Bin 0 -> 552 bytes .../packet_data/of14/5-13-ofp_echo_request.packet | Bin 0 -> 12 bytes tests/packet_data/of14/5-14-ofp_echo_reply.packet | Bin 0 -> 12 bytes tests/packet_data/of14/5-15-ofp_error_msg.packet | Bin 0 -> 20 bytes .../packet_data/of14/5-16-ofp_experimenter.packet | Bin 0 -> 20 bytes .../of14/5-17-ofp_barrier_request.packet | Bin 0 -> 8 bytes .../packet_data/of14/5-18-ofp_barrier_reply.packet | Bin 0 -> 8 bytes .../packet_data/of14/5-19-ofp_role_request.packet | Bin 0 -> 24 bytes tests/packet_data/of14/5-2-ofp_flow_mod.packet | Bin 0 -> 280 bytes tests/packet_data/of14/5-20-ofp_role_reply.packet | Bin 0 -> 24 bytes tests/packet_data/of14/5-21-ofp_group_mod.packet | Bin 0 -> 48 bytes tests/packet_data/of14/5-22-ofp_port_mod.packet | Bin 0 -> 120 bytes tests/packet_data/of14/5-23-ofp_table_mod.packet | Bin 0 -> 88 bytes .../packet_data/of14/5-24-ofp_desc_request.packet | Bin 0 -> 16 bytes .../of14/5-25-ofp_aggregate_stats_request.packet | Bin 0 -> 56 bytes .../of14/5-26-ofp_aggregate_stats_reply.packet | Bin 0 -> 40 bytes .../of14/5-27-ofp_table_stats_request.packet | Bin 0 -> 16 bytes .../of14/5-28-ofp_table_stats_reply.packet | Bin 0 -> 64 bytes .../of14/5-29-ofp_port_stats_request.packet | Bin 0 -> 24 bytes tests/packet_data/of14/5-3-ofp_flow_mod.packet | Bin 0 -> 80 bytes .../of14/5-30-ofp_port_stats_reply.packet | Bin 0 -> 360 bytes .../of14/5-31-ofp_group_features_request.packet | Bin 0 -> 16 bytes .../of14/5-32-ofp_group_features_reply.packet | Bin 0 -> 56 bytes .../of14/5-33-ofp_group_desc_request.packet | Bin 0 -> 16 bytes .../of14/5-34-ofp_group_desc_reply.packet | Bin 0 -> 56 bytes .../of14/5-35-ofp_queue_stats_request.packet | Bin 0 -> 24 bytes .../of14/5-36-ofp_queue_stats_reply.packet | Bin 0 -> 216 bytes tests/packet_data/of14/5-37-ofp_port_status.packet | Bin 0 -> 184 bytes .../packet_data/of14/5-38-ofp_flow_removed.packet | Bin 0 -> 64 bytes .../of14/5-39-ofp_error_msg_experimenter.packet | Bin 0 -> 27 bytes tests/packet_data/of14/5-4-ofp_packet_in.packet | Bin 0 -> 148 bytes .../of14/5-40-ofp_get_async_request.packet | Bin 0 -> 8 bytes .../of14/5-41-ofp_get_async_reply.packet | Bin 0 -> 160 bytes tests/packet_data/of14/5-42-ofp_set_async.packet | Bin 0 -> 160 bytes tests/packet_data/of14/5-43-ofp_meter_mod.packet | Bin 0 -> 64 bytes tests/packet_data/of14/5-44-ofp_flow_mod.packet | Bin 0 -> 96 bytes .../of14/5-45-ofp_meter_config_request.packet | Bin 0 -> 24 bytes .../of14/5-46-ofp_meter_config_reply.packet | Bin 0 -> 40 bytes .../of14/5-47-ofp_meter_stats_request.packet | Bin 0 -> 24 bytes .../of14/5-48-ofp_meter_stats_reply.packet | Bin 0 -> 72 bytes .../of14/5-49-ofp_meter_features_request.packet | Bin 0 -> 16 bytes .../of14/5-5-ofp_features_request.packet | Bin 0 -> 8 bytes .../of14/5-50-ofp_meter_features_reply.packet | Bin 0 -> 32 bytes .../of14/5-51-ofp_port_desc_request.packet | Bin 0 -> 16 bytes .../of14/5-52-ofp_port_desc_reply.packet | Bin 0 -> 256 bytes .../of14/5-53-ofp_table_features_request.packet | Bin 0 -> 11128 bytes .../of14/5-54-ofp_table_features_reply.packet | Bin 0 -> 11128 bytes .../of14/5-55-ofp_group_stats_request.packet | Bin 0 -> 24 bytes .../of14/5-56-ofp_group_stats_reply.packet | Bin 0 -> 72 bytes tests/packet_data/of14/5-57-ofp_packet_in.packet | Bin 0 -> 362 bytes tests/packet_data/of14/5-58-ofp_flow_mod.packet | Bin 0 -> 384 bytes .../of14/5-59-ofp_experimenter_request.packet | Bin 0 -> 32 bytes .../packet_data/of14/5-6-ofp_features_reply.packet | Bin 0 -> 32 bytes .../of14/5-60-ofp_experimenter_reply.packet | Bin 0 -> 40 bytes .../of14/5-61-ofp_table_desc_request.packet | Bin 0 -> 16 bytes .../of14/5-62-ofp_table_desc_reply.packet | Bin 0 -> 120 bytes .../of14/5-63-ofp_queue_desc_request.packet | Bin 0 -> 24 bytes .../of14/5-64-ofp_queue_desc_reply.packet | Bin 0 -> 136 bytes tests/packet_data/of14/5-65-ofp_role_status.packet | Bin 0 -> 80 bytes .../of14/5-66-ofp_flow_monitor_request.packet | Bin 0 -> 48 bytes .../of14/5-67-ofp_flow_monitor_reply.packet | Bin 0 -> 96 bytes .../packet_data/of14/5-68-ofp_table_status.packet | Bin 0 -> 96 bytes .../of14/5-69-ofp_bundle_ctrl_msg.packet | Bin 0 -> 72 bytes tests/packet_data/of14/5-7-ofp_set_config.packet | Bin 0 -> 12 bytes .../of14/5-70-ofp_bundle_add_msg.packet | Bin 0 -> 80 bytes .../of14/5-71-ofp_requestforward.packet | Bin 0 -> 56 bytes .../of14/5-8-ofp_get_config_request.packet | Bin 0 -> 8 bytes .../of14/5-9-ofp_get_config_reply.packet | Bin 0 -> 12 bytes ...roto-OFP14-ofp_packet_out_packet_library.packet | Bin 0 -> 138 bytes .../libofproto-OFP15-aggregate_stats_reply.packet | Bin 0 -> 32 bytes ...libofproto-OFP15-aggregate_stats_request.packet | Bin 0 -> 56 bytes .../of15/libofproto-OFP15-barrier_reply.packet | Bin 0 -> 8 bytes .../of15/libofproto-OFP15-barrier_request.packet | Bin 0 -> 8 bytes .../of15/libofproto-OFP15-bundle_add.packet | Bin 0 -> 272 bytes .../of15/libofproto-OFP15-bundle_ctrl.packet | Bin 0 -> 16 bytes .../libofproto-OFP15-bundle_features_reply.packet | Bin 0 -> 96 bytes ...libofproto-OFP15-bundle_features_request.packet | Bin 0 -> 96 bytes .../of15/libofproto-OFP15-controller_status.packet | Bin 0 -> 56 bytes ...libofproto-OFP15-controller_status_reply.packet | Bin 0 -> 64 bytes ...bofproto-OFP15-controller_status_request.packet | Bin 0 -> 16 bytes .../of15/libofproto-OFP15-desc_reply.packet | Bin 0 -> 1072 bytes .../of15/libofproto-OFP15-desc_request.packet | Bin 0 -> 16 bytes .../of15/libofproto-OFP15-echo_reply.packet | Bin 0 -> 8 bytes .../of15/libofproto-OFP15-echo_request.packet | Bin 0 -> 8 bytes .../of15/libofproto-OFP15-error_msg.packet | Bin 0 -> 20 bytes .../libofproto-OFP15-error_msg_experimenter.packet | Bin 0 -> 27 bytes .../of15/libofproto-OFP15-experimenter.packet | Bin 0 -> 20 bytes .../libofproto-OFP15-experimenter_reply.packet | Bin 0 -> 40 bytes .../libofproto-OFP15-experimenter_request.packet | Bin 0 -> 32 bytes .../of15/libofproto-OFP15-features_reply.packet | Bin 0 -> 32 bytes .../of15/libofproto-OFP15-features_request.packet | Bin 0 -> 8 bytes .../of15/libofproto-OFP15-flow_desc_reply.packet | Bin 0 -> 80 bytes .../of15/libofproto-OFP15-flow_desc_request.packet | Bin 0 -> 64 bytes .../of15/libofproto-OFP15-flow_mod.packet | Bin 0 -> 256 bytes .../libofproto-OFP15-flow_mod_conjunction.packet | Bin 0 -> 144 bytes .../libofproto-OFP15-flow_mod_match_conj.packet | Bin 0 -> 104 bytes .../libofproto-OFP15-flow_monitor_reply.packet | Bin 0 -> 96 bytes .../libofproto-OFP15-flow_monitor_request.packet | Bin 0 -> 48 bytes .../of15/libofproto-OFP15-flow_removed.packet | Bin 0 -> 56 bytes .../of15/libofproto-OFP15-flow_stats_reply.packet | Bin 0 -> 56 bytes .../libofproto-OFP15-flow_stats_request.packet | Bin 0 -> 56 bytes .../of15/libofproto-OFP15-get_async_reply.packet | Bin 0 -> 160 bytes .../of15/libofproto-OFP15-get_async_request.packet | Bin 0 -> 8 bytes .../of15/libofproto-OFP15-get_config_reply.packet | Bin 0 -> 12 bytes .../libofproto-OFP15-get_config_request.packet | Bin 0 -> 8 bytes .../of15/libofproto-OFP15-group_desc_reply.packet | Bin 0 -> 64 bytes .../libofproto-OFP15-group_desc_request.packet | Bin 0 -> 24 bytes .../libofproto-OFP15-group_features_reply.packet | Bin 0 -> 56 bytes .../libofproto-OFP15-group_features_request.packet | Bin 0 -> 16 bytes .../of15/libofproto-OFP15-group_mod.packet | Bin 0 -> 80 bytes .../of15/libofproto-OFP15-group_stats_reply.packet | Bin 0 -> 72 bytes .../libofproto-OFP15-group_stats_request.packet | Bin 0 -> 24 bytes .../packet_data/of15/libofproto-OFP15-hello.packet | Bin 0 -> 16 bytes .../of15/libofproto-OFP15-meter_desc_reply.packet | Bin 0 -> 40 bytes .../libofproto-OFP15-meter_desc_request.packet | Bin 0 -> 24 bytes .../libofproto-OFP15-meter_features_reply.packet | Bin 0 -> 40 bytes .../libofproto-OFP15-meter_features_request.packet | Bin 0 -> 16 bytes .../of15/libofproto-OFP15-meter_mod.packet | Bin 0 -> 48 bytes .../of15/libofproto-OFP15-meter_stats_reply.packet | Bin 0 -> 72 bytes .../libofproto-OFP15-meter_stats_request.packet | Bin 0 -> 24 bytes .../of15/libofproto-OFP15-packet_in.packet | Bin 0 -> 70 bytes .../of15/libofproto-OFP15-packet_out.packet | Bin 0 -> 52 bytes .../of15/libofproto-OFP15-port_desc_reply.packet | Bin 0 -> 256 bytes .../of15/libofproto-OFP15-port_desc_request.packet | Bin 0 -> 24 bytes .../of15/libofproto-OFP15-port_mod.packet | Bin 0 -> 120 bytes .../of15/libofproto-OFP15-port_stats_reply.packet | Bin 0 -> 360 bytes .../libofproto-OFP15-port_stats_request.packet | Bin 0 -> 24 bytes .../of15/libofproto-OFP15-port_status.packet | Bin 0 -> 184 bytes .../of15/libofproto-OFP15-queue_desc_reply.packet | Bin 0 -> 136 bytes .../libofproto-OFP15-queue_desc_request.packet | Bin 0 -> 24 bytes .../of15/libofproto-OFP15-queue_stats_reply.packet | Bin 0 -> 216 bytes .../libofproto-OFP15-queue_stats_request.packet | Bin 0 -> 24 bytes .../of15/libofproto-OFP15-requestforward.packet | Bin 0 -> 88 bytes .../of15/libofproto-OFP15-role_reply.packet | Bin 0 -> 24 bytes .../of15/libofproto-OFP15-role_request.packet | Bin 0 -> 24 bytes .../of15/libofproto-OFP15-role_status.packet | Bin 0 -> 24 bytes .../of15/libofproto-OFP15-set_async.packet | Bin 0 -> 160 bytes .../of15/libofproto-OFP15-set_config.packet | Bin 0 -> 12 bytes .../of15/libofproto-OFP15-table_desc_reply.packet | Bin 0 -> 120 bytes .../libofproto-OFP15-table_desc_request.packet | Bin 0 -> 16 bytes .../libofproto-OFP15-table_features_reply.packet | Bin 0 -> 96 bytes .../libofproto-OFP15-table_features_request.packet | Bin 0 -> 96 bytes .../of15/libofproto-OFP15-table_mod.packet | Bin 0 -> 24 bytes .../of15/libofproto-OFP15-table_stats_reply.packet | Bin 0 -> 64 bytes .../libofproto-OFP15-table_stats_request.packet | Bin 0 -> 16 bytes .../of15/libofproto-OFP15-table_status.packet | Bin 0 -> 96 bytes tests/packet_data/pcap/big_endian.pcap | Bin 0 -> 78 bytes tests/packet_data/pcap/geneve_unknown.pcap | Bin 0 -> 196 bytes tests/packet_data/pcap/gre_full_options.pcap | Bin 0 -> 190 bytes tests/packet_data/pcap/gre_no_option.pcap | Bin 0 -> 178 bytes tests/packet_data/pcap/gre_nvgre_option.pcap | Bin 0 -> 190 bytes tests/packet_data/pcap/little_endian.pcap | Bin 0 -> 78 bytes tests/packet_data/pcap/openflow_flowmod.pcap | Bin 0 -> 186 bytes tests/packet_data/pcap/openflow_flowstats_req.pcap | Bin 0 -> 162 bytes .../packet_data/pcap/openflow_invalid_version.pcap | Bin 0 -> 186 bytes tests/packet_data/pcap/zebra_v2.pcap | Bin 0 -> 1236 bytes tests/packet_data/pcap/zebra_v3.pcap | Bin 0 -> 1250 bytes tests/packet_data_generator/Makefile | 5 + tests/packet_data_generator/rebar.config | 29 + tests/packet_data_generator/src/er.app.src | 24 + tests/packet_data_generator/src/x.erl | 63 + tests/packet_data_generator/src/x1.erl | 90 + tests/packet_data_generator/src/x3.erl | 8749 +++++ tests/packet_data_generator/src/x4.erl | 2657 ++ tests/packet_data_generator/src/x5.erl | 3024 ++ .../packet_data_generator/src/x_flower_packet.erl | 61 + tests/packet_data_generator/src/x_of_protocol.erl | 33 + tests/packet_data_generator2/Makefile.BSD | 35 + tests/packet_data_generator2/Makefile.GNU | 39 + tests/packet_data_generator2/README | 15 + tests/packet_data_generator2/gen.c | 963 + tests/packet_data_generator3/gen.py | 329 + tests/run_tests.py | 35 + tests/test_lib.py | 270 + tests/unit/__init__.py | 6 + tests/unit/app/__init__.py | 0 tests/unit/app/ofctl_rest_json/of10.json | 101 + tests/unit/app/ofctl_rest_json/of12.json | 150 + tests/unit/app/ofctl_rest_json/of13.json | 191 + tests/unit/app/ofctl_rest_json/of14.json | 195 + tests/unit/app/ofctl_rest_json/of15.json | 203 + tests/unit/app/test_ofctl_rest.py | 138 + tests/unit/app/test_tester.py | 464 + tests/unit/app/test_ws_topology.py | 54 + tests/unit/app/test_wsgi.py | 104 + tests/unit/cmd/__init__.py | 15 + tests/unit/cmd/dummy_app.py | 21 + tests/unit/cmd/dummy_openflow_app.py | 22 + tests/unit/cmd/test_manager.py | 77 + tests/unit/controller/__init__.py | 0 tests/unit/controller/test_controller.py | 145 + tests/unit/lib/__init__.py | 0 .../ofctl_json/of10/1-2-ofp_flow_mod.packet.json | 23 + .../of12/3-0-ofp_desc_stats_reply.packet.json | 9 + .../of12/3-11-ofp_flow_stats_request.packet.json | 11 + .../of12/3-12-ofp_flow_stats_reply.packet.json | 75 + .../of12/3-16-ofp_experimenter.packet.json | 8 + .../ofctl_json/of12/3-2-ofp_flow_mod.packet.json | 41 + .../ofctl_json/of12/3-21-ofp_group_mod.packet.json | 22 + .../ofctl_json/of12/3-22-ofp_port_mod.packet.json | 9 + .../3-25-ofp_aggregate_stats_request.packet.json | 11 + .../3-26-ofp_aggregate_stats_reply.packet.json | 9 + .../of12/3-28-ofp_table_stats_reply.packet.json | 32134 +++++++++++++++++++ .../of12/3-30-ofp_port_stats_reply.packet.json | 34 + ...3-32-ofp_group_features_stats_reply.packet.json | 104 + .../3-34-ofp_group_desc_stats_reply.packet.json | 20 + .../3-35-ofp_queue_get_config_request.packet.json | 3 + .../3-36-ofp_queue_get_config_reply.packet.json | 43 + .../of12/3-38-ofp_queue_stats_reply.packet.json | 25 + .../of12/3-6-ofp_features_reply.packet.json | 30 + .../of12/3-62-ofp_group_stats_reply.packet.json | 17 + .../lib-ofctl-ofp_group_stats_request.packet.json | 3 + .../lib-ofctl-ofp_port_stats_request.packet.json | 3 + ...-ofctl-ofp_queue_get_config_request.packet.json | 3 + .../lib-ofctl-ofp_queue_stats_request.packet1.json | 3 + .../lib-ofctl-ofp_queue_stats_request.packet2.json | 4 + .../lib-ofctl-ofp_queue_stats_request.packet3.json | 3 + .../ofctl_json/of13/4-0-ofp_desc_reply.packet.json | 9 + .../of13/4-11-ofp_flow_stats_request.packet.json | 11 + .../of13/4-12-ofp_flow_stats_reply.packet.json | 104 + .../of13/4-16-ofp_experimenter.packet.json | 8 + .../ofctl_json/of13/4-2-ofp_flow_mod.packet.json | 97 + .../ofctl_json/of13/4-21-ofp_group_mod.packet.json | 21 + .../ofctl_json/of13/4-22-ofp_port_mod.packet.json | 9 + .../4-25-ofp_aggregate_stats_request.packet.json | 11 + .../4-26-ofp_aggregate_stats_reply.packet.json | 9 + .../of13/4-28-ofp_table_stats_reply.packet.json | 16 + .../of13/4-30-ofp_port_stats_reply.packet.json | 38 + .../of13/4-32-ofp_group_features_reply.packet.json | 104 + .../of13/4-34-ofp_group_desc_reply.packet.json | 20 + .../4-35-ofp_queue_get_config_request.packet.json | 3 + .../4-36-ofp_queue_get_config_reply.packet.json | 83 + .../of13/4-38-ofp_queue_stats_reply.packet.json | 31 + .../ofctl_json/of13/4-45-ofp_meter_mod.packet.json | 31 + .../of13/4-48-ofp_meter_config_reply.packet.json | 19 + .../of13/4-50-ofp_meter_stats_reply.packet.json | 19 + .../of13/4-52-ofp_meter_features_reply.packet.json | 19 + .../of13/4-54-ofp_port_desc_reply.packet.json | 30 + .../of13/4-56-ofp_table_features_reply.packet.json | 11928 +++++++ .../of13/4-58-ofp_group_stats_reply.packet.json | 19 + .../lib-ofctl-ofp_group_stats_request.packet.json | 3 + .../lib-ofctl-ofp_meter_config_request.packet.json | 3 + .../lib-ofctl-ofp_meter_stats_request.packet.json | 3 + .../lib-ofctl-ofp_port_stats_request.packet.json | 3 + ...-ofctl-ofp_queue_get_config_request.packet.json | 3 + .../lib-ofctl-ofp_queue_stats_request.packet1.json | 3 + .../lib-ofctl-ofp_queue_stats_request.packet2.json | 4 + .../lib-ofctl-ofp_queue_stats_request.packet3.json | 3 + .../ofctl_json/of14/5-0-ofp_desc_reply.packet.json | 9 + .../of14/5-11-ofp_flow_stats_request.packet.json | 11 + .../of14/5-12-ofp_flow_stats_reply.packet.json | 197 + .../of14/5-16-ofp_experimenter.packet.json | 8 + .../ofctl_json/of14/5-2-ofp_flow_mod.packet.json | 103 + .../ofctl_json/of14/5-21-ofp_group_mod.packet.json | 21 + .../ofctl_json/of14/5-22-ofp_port_mod.packet.json | 50 + .../5-25-ofp_aggregate_stats_request.packet.json | 11 + .../5-26-ofp_aggregate_stats_reply.packet.json | 9 + .../of14/5-28-ofp_table_stats_reply.packet.json | 16 + .../of14/5-30-ofp_port_stats_reply.packet.json | 85 + .../of14/5-32-ofp_group_features_reply.packet.json | 104 + .../of14/5-34-ofp_group_desc_reply.packet.json | 24 + .../of14/5-36-ofp_queue_stats_reply.packet.json | 64 + .../ofctl_json/of14/5-43-ofp_meter_mod.packet.json | 31 + .../of14/5-46-ofp_meter_config_reply.packet.json | 19 + .../of14/5-48-ofp_meter_stats_reply.packet.json | 19 + .../of14/5-50-ofp_meter_features_reply.packet.json | 19 + .../of14/5-52-ofp_port_desc_reply.packet.json | 83 + .../of14/5-54-ofp_table_features_reply.packet.json | 11928 +++++++ .../of14/5-56-ofp_group_stats_reply.packet.json | 19 + .../of14/5-63-ofp_queue_desc_request.packet.json | 4 + .../of14/5-64-ofp_queue_desc_reply.packet.json | 61 + .../lib-ofctl-OFP15-flow_desc_reply.packet.json | 48 + .../lib-ofctl-OFP15-flow_desc_request.packet.json | 13 + .../of15/lib-ofctl-OFP15-flow_mod.packet.json | 115 + ...ofproto-OFP15-aggregate_stats_reply.packet.json | 10 + ...proto-OFP15-aggregate_stats_request.packet.json | 11 + .../of15/libofproto-OFP15-desc_reply.packet.json | 9 + .../of15/libofproto-OFP15-experimenter.packet.json | 8 + .../libofproto-OFP15-flow_desc_reply.packet.json | 26 + .../libofproto-OFP15-flow_desc_request.packet.json | 13 + .../libofproto-OFP15-flow_mod_no_nx.packet.json | 103 + .../libofproto-OFP15-flow_stats_reply.packet.json | 16 + ...libofproto-OFP15-flow_stats_request.packet.json | 11 + .../libofproto-OFP15-group_desc_reply.packet.json | 27 + ...libofproto-OFP15-group_desc_request.packet.json | 3 + ...bofproto-OFP15-group_features_reply.packet.json | 104 + .../of15/libofproto-OFP15-group_mod.packet.json | 42 + .../libofproto-OFP15-group_stats_reply.packet.json | 19 + .../libofproto-OFP15-meter_desc_reply.packet.json | 19 + ...bofproto-OFP15-meter_features_reply.packet.json | 19 + .../of15/libofproto-OFP15-meter_mod.packet.json | 24 + .../libofproto-OFP15-meter_stats_reply.packet.json | 19 + .../libofproto-OFP15-port_desc_reply.packet.json | 83 + .../libofproto-OFP15-port_desc_request.packet.json | 3 + .../of15/libofproto-OFP15-port_mod.packet.json | 50 + .../libofproto-OFP15-port_stats_reply.packet.json | 93 + .../libofproto-OFP15-queue_desc_reply.packet.json | 61 + ...libofproto-OFP15-queue_desc_request.packet.json | 4 + .../libofproto-OFP15-queue_stats_reply.packet.json | 64 + ...bofproto-OFP15-table_features_reply.packet.json | 25 + .../libofproto-OFP15-table_stats_reply.packet.json | 16 + tests/unit/lib/ovs/__init__.py | 0 tests/unit/lib/ovs/test_vsctl.py | 789 + tests/unit/lib/test_addrconv.py | 56 + tests/unit/lib/test_hub.py | 239 + tests/unit/lib/test_import_module.py | 66 + tests/unit/lib/test_ip.py | 156 + tests/unit/lib/test_mac.py | 95 + tests/unit/lib/test_mod/__init__.py | 15 + tests/unit/lib/test_mod/aaa/__init__.py | 15 + tests/unit/lib/test_mod/aaa/mod.py | 17 + tests/unit/lib/test_mod/bbb/__init__.py | 15 + tests/unit/lib/test_mod/bbb/mod.py | 17 + tests/unit/lib/test_mod/ccc/__init__.py | 14 + tests/unit/lib/test_mod/ccc/mod.py | 16 + tests/unit/lib/test_mod/ddd/__init__.py | 14 + tests/unit/lib/test_mod/ddd/mod.py | 16 + tests/unit/lib/test_mod/eee.py | 16 + tests/unit/lib/test_mod/fff.py | 16 + tests/unit/lib/test_mod/ggg.py | 16 + tests/unit/lib/test_mrtlib.py | 765 + tests/unit/lib/test_of_config_classes.py | 442 + tests/unit/lib/test_ofctl.py | 643 + tests/unit/lib/test_ofctl_action_match.py | 869 + tests/unit/lib/test_ofctl_string.py | 151 + tests/unit/lib/test_ofctl_utils.py | 142 + tests/unit/lib/test_ofctl_v1_3.py | 54 + tests/unit/lib/test_ofp_pktinfilter.py | 92 + tests/unit/lib/test_pack_utils.py | 59 + tests/unit/lib/test_pcaplib.py | 230 + tests/unit/lib/test_rpc.py | 360 + tests/unit/lib/test_stringify.py | 75 + tests/unit/ofproto/__init__.py | 0 .../json/of10/1-1-ofp_packet_out.packet.json | 15 + .../ofproto/json/of10/1-2-ofp_flow_mod.packet.json | 37 + .../json/of10/1-4-ofp_packet_in.packet.json | 9 + .../json/of10/1-5-features_request.packet.json | 3 + .../json/of10/1-6-ofp_switch_features.packet.json | 37 + ...OFP10-ofp_packet_out_packet_library.packet.json | 58 + .../ovs-ofctl-of10-action_dec_mpls_ttl.packet.json | 37 + .../ovs-ofctl-of10-action_dec_nw_ttl.packet.json | 37 + .../ovs-ofctl-of10-action_pop_mpls.packet.json | 38 + .../ovs-ofctl-of10-action_push_mpls.packet.json | 38 + ...vs-ofctl-of10-action_set_mpls_label.packet.json | 38 + .../ovs-ofctl-of10-action_set_mpls_tc.packet.json | 38 + .../ovs-ofctl-of10-action_set_mpls_ttl.packet.json | 38 + .../json/of12/3-0-ofp_desc_stats_reply.packet.json | 15 + .../json/of12/3-1-ofp_packet_out.packet.json | 18 + .../ofproto/json/of12/3-10-ofp_hello.packet.json | 3 + .../of12/3-11-ofp_flow_stats_request.packet.json | 17 + .../of12/3-12-ofp_flow_stats_reply.packet.json | 161 + .../json/of12/3-13-ofp_echo_request.packet.json | 5 + .../json/of12/3-14-ofp_echo_reply.packet.json | 5 + .../json/of12/3-15-ofp_error_msg.packet.json | 7 + .../json/of12/3-16-ofp_experimenter.packet.json | 7 + .../json/of12/3-17-ofp_barrier_request.packet.json | 3 + .../json/of12/3-18-ofp_barrier_reply.packet.json | 3 + .../json/of12/3-19-ofp_role_request.packet.json | 6 + .../ofproto/json/of12/3-2-ofp_flow_mod.packet.json | 82 + .../json/of12/3-20-ofp_role_reply.packet.json | 6 + .../json/of12/3-21-ofp_group_mod.packet.json | 27 + .../json/of12/3-22-ofp_port_mod.packet.json | 9 + .../json/of12/3-23-ofp_table_mod.packet.json | 6 + .../of12/3-24-ofp_desc_stats_request.packet.json | 5 + .../3-25-ofp_aggregate_stats_request.packet.json | 17 + .../3-26-ofp_aggregate_stats_reply.packet.json | 13 + .../of12/3-27-ofp_table_stats_request.packet.json | 5 + .../of12/3-28-ofp_table_stats_reply.packet.json | 5108 +++ .../of12/3-29-ofp_port_stats_request.packet.json | 6 + .../ofproto/json/of12/3-3-ofp_flow_mod.packet.json | 46 + .../of12/3-30-ofp_port_stats_reply.packet.json | 42 + ...31-ofp_group_features_stats_request.packet.json | 5 + ...3-32-ofp_group_features_stats_reply.packet.json | 25 + .../3-33-ofp_group_desc_stats_request.packet.json | 5 + .../3-34-ofp_group_desc_stats_reply.packet.json | 35 + .../3-35-ofp_queue_get_config_request.packet.json | 5 + .../3-36-ofp_queue_get_config_reply.packet.json | 53 + .../of12/3-37-ofp_queue_stats_request.packet.json | 7 + .../of12/3-38-ofp_queue_stats_reply.packet.json | 35 + .../json/of12/3-39-ofp_port_status.packet.json | 20 + .../json/of12/3-4-ofp_packet_in.packet.json | 80 + .../json/of12/3-40-ofp_flow_removed.packet.json | 29 + .../3-41-ofp_error_msg_experimenter.packet.json | 8 + .../json/of12/3-5-ofp_features_request.packet.json | 3 + .../json/of12/3-59-ofp_packet_in.packet.json | 262 + .../json/of12/3-6-ofp_features_reply.packet.json | 40 + .../json/of12/3-60-ofp_flow_mod.packet.json | 269 + .../of12/3-61-ofp_group_stats_request.packet.json | 6 + .../of12/3-62-ofp_group_stats_reply.packet.json | 25 + .../json/of12/3-7-ofp_set_config.packet.json | 6 + .../of12/3-8-ofp_get_config_request.packet.json | 3 + .../json/of12/3-9-ofp_get_config_reply.packet.json | 6 + .../lib-ofctl-ofp_group_stats_request.packet.json | 6 + .../lib-ofctl-ofp_port_stats_request.packet.json | 6 + ...-ofctl-ofp_queue_get_config_request.packet.json | 5 + .../lib-ofctl-ofp_queue_stats_request.packet1.json | 7 + .../lib-ofctl-ofp_queue_stats_request.packet2.json | 7 + .../lib-ofctl-ofp_queue_stats_request.packet3.json | 7 + ...OFP12-ofp_packet_out_packet_library.packet.json | 61 + .../json/of13/4-0-ofp_desc_reply.packet.json | 15 + .../json/of13/4-1-ofp_packet_out.packet.json | 18 + .../ofproto/json/of13/4-10-ofp_hello.packet.json | 20 + .../of13/4-11-ofp_flow_stats_request.packet.json | 18 + .../of13/4-12-ofp_flow_stats_reply.packet.json | 343 + .../json/of13/4-13-ofp_echo_request.packet.json | 5 + .../json/of13/4-14-ofp_echo_reply.packet.json | 5 + .../json/of13/4-15-ofp_error_msg.packet.json | 7 + .../json/of13/4-16-ofp_experimenter.packet.json | 7 + .../json/of13/4-17-ofp_barrier_request.packet.json | 3 + .../json/of13/4-18-ofp_barrier_reply.packet.json | 3 + .../json/of13/4-19-ofp_role_request.packet.json | 6 + .../ofproto/json/of13/4-2-ofp_flow_mod.packet.json | 201 + .../json/of13/4-20-ofp_role_reply.packet.json | 6 + .../json/of13/4-21-ofp_group_mod.packet.json | 27 + .../json/of13/4-22-ofp_port_mod.packet.json | 9 + .../json/of13/4-23-ofp_table_mod.packet.json | 6 + .../json/of13/4-24-ofp_desc_request.packet.json | 6 + .../4-25-ofp_aggregate_stats_request.packet.json | 18 + .../4-26-ofp_aggregate_stats_reply.packet.json | 13 + .../of13/4-27-ofp_table_stats_request.packet.json | 6 + .../of13/4-28-ofp_table_stats_reply.packet.json | 24 + .../of13/4-29-ofp_port_stats_request.packet.json | 7 + .../ofproto/json/of13/4-3-ofp_flow_mod.packet.json | 46 + .../of13/4-30-ofp_port_stats_reply.packet.json | 46 + .../4-31-ofp_group_features_request.packet.json | 6 + .../of13/4-32-ofp_group_features_reply.packet.json | 24 + .../of13/4-33-ofp_group_desc_request.packet.json | 6 + .../of13/4-34-ofp_group_desc_reply.packet.json | 35 + .../4-35-ofp_queue_get_config_request.packet.json | 5 + .../4-36-ofp_queue_get_config_reply.packet.json | 105 + .../of13/4-37-ofp_queue_stats_request.packet.json | 8 + .../of13/4-38-ofp_queue_stats_reply.packet.json | 41 + .../json/of13/4-39-ofp_port_status.packet.json | 20 + .../json/of13/4-4-ofp_packet_in.packet.json | 81 + .../json/of13/4-40-ofp_flow_removed.packet.json | 29 + .../4-41-ofp_error_msg_experimenter.packet.json | 8 + .../of13/4-42-ofp_get_async_request.packet.json | 3 + .../json/of13/4-43-ofp_get_async_reply.packet.json | 16 + .../json/of13/4-44-ofp_set_async.packet.json | 16 + .../json/of13/4-45-ofp_meter_mod.packet.json | 35 + .../json/of13/4-46-ofp_flow_mod.packet.json | 55 + .../of13/4-47-ofp_meter_config_request.packet.json | 7 + .../of13/4-48-ofp_meter_config_reply.packet.json | 25 + .../of13/4-49-ofp_meter_stats_request.packet.json | 7 + .../json/of13/4-5-ofp_features_request.packet.json | 3 + .../of13/4-50-ofp_meter_stats_reply.packet.json | 27 + .../4-51-ofp_meter_features_request.packet.json | 6 + .../of13/4-52-ofp_meter_features_reply.packet.json | 17 + .../of13/4-53-ofp_port_desc_request.packet.json | 6 + .../json/of13/4-54-ofp_port_desc_reply.packet.json | 38 + .../4-55-ofp_table_features_request.packet.json | 15945 +++++++++ .../of13/4-56-ofp_table_features_reply.packet.json | 15945 +++++++++ .../of13/4-57-ofp_group_stats_request.packet.json | 7 + .../of13/4-58-ofp_group_stats_reply.packet.json | 27 + .../json/of13/4-59-ofp_packet_in.packet.json | 312 + .../json/of13/4-6-ofp_features_reply.packet.json | 9 + .../json/of13/4-60-ofp_flow_mod.packet.json | 318 + .../of13/4-61-ofp_experimenter_request.packet.json | 9 + .../of13/4-62-ofp_experimenter_reply.packet.json | 13 + .../of13/4-63-onf_flow_monitor_request.packet.json | 337 + .../json/of13/4-7-ofp_set_config.packet.json | 6 + .../of13/4-8-ofp_get_config_request.packet.json | 3 + .../json/of13/4-9-ofp_get_config_reply.packet.json | 6 + .../lib-ofctl-ofp_group_stats_request.packet.json | 7 + .../lib-ofctl-ofp_meter_config_request.packet.json | 7 + .../lib-ofctl-ofp_meter_stats_request.packet.json | 7 + .../lib-ofctl-ofp_port_stats_request.packet.json | 7 + ...-ofctl-ofp_queue_get_config_request.packet.json | 5 + .../lib-ofctl-ofp_queue_stats_request.packet1.json | 8 + .../lib-ofctl-ofp_queue_stats_request.packet2.json | 8 + .../lib-ofctl-ofp_queue_stats_request.packet3.json | 8 + ...ib-ofctl-ofp_table_features_request.packet.json | 7 + .../of13/libofproto-OFP13-echo_reply.packet.json | 5 + .../of13/libofproto-OFP13-echo_request.packet.json | 5 + .../of13/libofproto-OFP13-error_msg.packet.json | 7 + .../libofproto-OFP13-features_reply.packet.json | 9 + .../of13/libofproto-OFP13-flow_mod.packet.json | 192 + ...bofproto-OFP13-flow_mod.packet.truncated64.json | 33 + ...bofproto-OFP13-flow_mod_conjunction.packet.json | 100 + ...ibofproto-OFP13-flow_mod_match_conj.packet.json | 66 + .../of13/libofproto-OFP13-flow_removed.packet.json | 78 + .../libofproto-OFP13-get_config_reply.packet.json | 6 + .../json/of13/libofproto-OFP13-hello.packet.json | 15 + .../of13/libofproto-OFP13-meter_mod.packet.json | 26 + ...OFP13-ofp_packet_out_packet_library.packet.json | 61 + .../of13/libofproto-OFP13-packet_in.packet.json | 46 + .../of13/libofproto-OFP13-port_mod.packet.json | 9 + .../of13/libofproto-OFP13-port_status.packet.json | 20 + .../of13/libofproto-OFP13-set_config.packet.json | 6 + .../of13/libofproto-OFP13-table_mod.packet.json | 6 + .../ovs-ofctl-of13-action_conjunction.packet.json | 100 + .../ovs-ofctl-of13-action_controller.packet.json | 43 + .../ovs-ofctl-of13-action_controller2.packet.json | 51 + .../json/of13/ovs-ofctl-of13-action_ct.packet.json | 61 + .../of13/ovs-ofctl-of13-action_ct_exec.packet.json | 75 + .../of13/ovs-ofctl-of13-action_ct_nat.packet.json | 70 + .../ovs-ofctl-of13-action_ct_nat_v6.packet.json | 70 + ...s-ofctl-of13-action_dec_ttl_cnt_ids.packet.json | 62 + .../ovs-ofctl-of13-action_fintimeout.packet.json | 57 + .../of13/ovs-ofctl-of13-action_learn.packet.json | 192 + .../of13/ovs-ofctl-of13-action_note.packet.json | 48 + .../ovs-ofctl-of13-action_output_trunc.packet.json | 42 + .../ovs-ofctl-of13-action_resubmit.packet.json | 99 + .../of13/ovs-ofctl-of13-action_sample.packet.json | 44 + .../of13/ovs-ofctl-of13-action_sample2.packet.json | 45 + .../ovs-ofctl-of13-action_stack_pop.packet.json | 43 + .../ovs-ofctl-of13-action_stack_push.packet.json | 43 + .../of13/ovs-ofctl-of13-match_conj.packet.json | 60 + ...s-ofctl-of13-match_load_nx_register.packet.json | 58 + ...s-ofctl-of13-match_move_nx_register.packet.json | 60 + .../of13/ovs-ofctl-of13-match_pkt_mark.packet.json | 60 + ...vs-ofctl-of13-match_pkt_mark_masked.packet.json | 60 + .../json/of14/5-0-ofp_desc_reply.packet.json | 15 + .../json/of14/5-1-ofp_packet_out.packet.json | 18 + .../ofproto/json/of14/5-10-ofp_hello.packet.json | 20 + .../of14/5-11-ofp_flow_stats_request.packet.json | 18 + .../of14/5-12-ofp_flow_stats_reply.packet.json | 347 + .../json/of14/5-13-ofp_echo_request.packet.json | 5 + .../json/of14/5-14-ofp_echo_reply.packet.json | 5 + .../json/of14/5-15-ofp_error_msg.packet.json | 7 + .../json/of14/5-16-ofp_experimenter.packet.json | 7 + .../json/of14/5-17-ofp_barrier_request.packet.json | 3 + .../json/of14/5-18-ofp_barrier_reply.packet.json | 3 + .../json/of14/5-19-ofp_role_request.packet.json | 6 + .../ofproto/json/of14/5-2-ofp_flow_mod.packet.json | 202 + .../json/of14/5-20-ofp_role_reply.packet.json | 6 + .../json/of14/5-21-ofp_group_mod.packet.json | 27 + .../json/of14/5-22-ofp_port_mod.packet.json | 60 + .../json/of14/5-23-ofp_table_mod.packet.json | 56 + .../json/of14/5-24-ofp_desc_request.packet.json | 6 + .../5-25-ofp_aggregate_stats_request.packet.json | 18 + .../5-26-ofp_aggregate_stats_reply.packet.json | 13 + .../of14/5-27-ofp_table_stats_request.packet.json | 6 + .../of14/5-28-ofp_table_stats_reply.packet.json | 24 + .../of14/5-29-ofp_port_stats_request.packet.json | 7 + .../ofproto/json/of14/5-3-ofp_flow_mod.packet.json | 47 + .../of14/5-30-ofp_port_stats_reply.packet.json | 113 + .../5-31-ofp_group_features_request.packet.json | 6 + .../of14/5-32-ofp_group_features_reply.packet.json | 24 + .../of14/5-33-ofp_group_desc_request.packet.json | 6 + .../of14/5-34-ofp_group_desc_reply.packet.json | 35 + .../of14/5-35-ofp_queue_stats_request.packet.json | 8 + .../of14/5-36-ofp_queue_stats_reply.packet.json | 80 + .../json/of14/5-37-ofp_port_status.packet.json | 76 + .../json/of14/5-38-ofp_flow_removed.packet.json | 29 + .../5-39-ofp_error_msg_experimenter.packet.json | 8 + .../json/of14/5-4-ofp_packet_in.packet.json | 81 + .../of14/5-40-ofp_get_async_request.packet.json | 3 + .../json/of14/5-41-ofp_get_async_reply.packet.json | 122 + .../json/of14/5-42-ofp_set_async.packet.json | 122 + .../json/of14/5-43-ofp_meter_mod.packet.json | 35 + .../json/of14/5-44-ofp_flow_mod.packet.json | 56 + .../of14/5-45-ofp_meter_config_request.packet.json | 7 + .../of14/5-46-ofp_meter_config_reply.packet.json | 25 + .../of14/5-47-ofp_meter_stats_request.packet.json | 7 + .../of14/5-48-ofp_meter_stats_reply.packet.json | 27 + .../5-49-ofp_meter_features_request.packet.json | 6 + .../json/of14/5-5-ofp_features_request.packet.json | 3 + .../of14/5-50-ofp_meter_features_reply.packet.json | 17 + .../of14/5-51-ofp_port_desc_request.packet.json | 6 + .../json/of14/5-52-ofp_port_desc_reply.packet.json | 103 + .../5-53-ofp_table_features_request.packet.json | 15945 +++++++++ .../of14/5-54-ofp_table_features_reply.packet.json | 15945 +++++++++ .../of14/5-55-ofp_group_stats_request.packet.json | 7 + .../of14/5-56-ofp_group_stats_reply.packet.json | 27 + .../json/of14/5-57-ofp_packet_in.packet.json | 298 + .../json/of14/5-58-ofp_flow_mod.packet.json | 305 + .../of14/5-59-ofp_experimenter_request.packet.json | 9 + .../json/of14/5-6-ofp_features_reply.packet.json | 9 + .../of14/5-60-ofp_experimenter_reply.packet.json | 13 + .../of14/5-61-ofp_table_desc_request.packet.json | 6 + .../of14/5-62-ofp_table_desc_reply.packet.json | 83 + .../of14/5-63-ofp_queue_desc_request.packet.json | 8 + .../of14/5-64-ofp_queue_desc_reply.packet.json | 81 + .../json/of14/5-65-ofp_role_status.packet.json | 41 + .../of14/5-66-ofp_flow_monitor_request.packet.json | 27 + .../of14/5-67-ofp_flow_monitor_reply.packet.json | 66 + .../json/of14/5-68-ofp_table_status.packet.json | 62 + .../json/of14/5-69-ofp_bundle_ctrl_msg.packet.json | 41 + .../json/of14/5-7-ofp_set_config.packet.json | 6 + .../json/of14/5-70-ofp_bundle_add_msg.packet.json | 45 + .../json/of14/5-71-ofp_requestforward.packet.json | 31 + .../of14/5-8-ofp_get_config_request.packet.json | 3 + .../json/of14/5-9-ofp_get_config_reply.packet.json | 6 + ...ib-ofctl-ofp_table_features_request.packet.json | 7 + ...OFP14-ofp_packet_out_packet_library.packet.json | 61 + .../lib-ofctl-OFP15-flow_desc_reply.packet.json | 105 + .../lib-ofctl-OFP15-flow_desc_request.packet.json | 26 + .../json/of15/lib-ofctl-OFP15-flow_mod.packet.json | 234 + .../lib-ofctl-ofp_queue_stats_request.packet.json | 8 + ...ib-ofctl-ofp_table_features_request.packet.json | 7 + ...ofproto-OFP15-aggregate_stats_reply.packet.json | 24 + ...proto-OFP15-aggregate_stats_request.packet.json | 18 + .../libofproto-OFP15-barrier_reply.packet.json | 3 + .../libofproto-OFP15-barrier_request.packet.json | 3 + .../of15/libofproto-OFP15-bundle_add.packet.json | 200 + .../of15/libofproto-OFP15-bundle_ctrl.packet.json | 8 + ...ofproto-OFP15-bundle_features_reply.packet.json | 43 + ...proto-OFP15-bundle_features_request.packet.json | 39 + .../libofproto-OFP15-controller_status.packet.json | 22 + ...proto-OFP15-controller_status_reply.packet.json | 26 + ...oto-OFP15-controller_status_request.packet.json | 6 + .../of15/libofproto-OFP15-desc_reply.packet.json | 15 + .../of15/libofproto-OFP15-desc_request.packet.json | 6 + .../of15/libofproto-OFP15-echo_reply.packet.json | 5 + .../of15/libofproto-OFP15-echo_request.packet.json | 5 + .../of15/libofproto-OFP15-error_msg.packet.json | 7 + ...fproto-OFP15-error_msg_experimenter.packet.json | 8 + .../of15/libofproto-OFP15-experimenter.packet.json | 7 + ...libofproto-OFP15-experimenter_reply.packet.json | 13 + ...bofproto-OFP15-experimenter_request.packet.json | 9 + .../libofproto-OFP15-features_reply.packet.json | 9 + .../libofproto-OFP15-features_request.packet.json | 3 + .../libofproto-OFP15-flow_desc_reply.packet.json | 57 + .../libofproto-OFP15-flow_desc_request.packet.json | 26 + .../of15/libofproto-OFP15-flow_mod.packet.json | 193 + ...bofproto-OFP15-flow_mod_conjunction.packet.json | 101 + ...ibofproto-OFP15-flow_mod_match_conj.packet.json | 67 + .../libofproto-OFP15-flow_mod_no_nx.packet.json | 202 + ...libofproto-OFP15-flow_monitor_reply.packet.json | 66 + ...bofproto-OFP15-flow_monitor_request.packet.json | 27 + .../of15/libofproto-OFP15-flow_removed.packet.json | 38 + .../libofproto-OFP15-flow_stats_reply.packet.json | 44 + ...libofproto-OFP15-flow_stats_request.packet.json | 18 + .../libofproto-OFP15-get_async_reply.packet.json | 122 + .../libofproto-OFP15-get_async_request.packet.json | 3 + .../libofproto-OFP15-get_config_reply.packet.json | 6 + ...libofproto-OFP15-get_config_request.packet.json | 3 + .../libofproto-OFP15-group_desc_reply.packet.json | 45 + ...libofproto-OFP15-group_desc_request.packet.json | 7 + ...bofproto-OFP15-group_features_reply.packet.json | 24 + ...fproto-OFP15-group_features_request.packet.json | 6 + .../of15/libofproto-OFP15-group_mod.packet.json | 63 + .../libofproto-OFP15-group_stats_reply.packet.json | 27 + ...ibofproto-OFP15-group_stats_request.packet.json | 7 + .../json/of15/libofproto-OFP15-hello.packet.json | 15 + .../libofproto-OFP15-meter_desc_reply.packet.json | 25 + ...libofproto-OFP15-meter_desc_request.packet.json | 7 + ...bofproto-OFP15-meter_features_reply.packet.json | 18 + ...fproto-OFP15-meter_features_request.packet.json | 6 + .../of15/libofproto-OFP15-meter_mod.packet.json | 26 + .../libofproto-OFP15-meter_stats_reply.packet.json | 27 + ...ibofproto-OFP15-meter_stats_request.packet.json | 7 + .../of15/libofproto-OFP15-packet_in.packet.json | 46 + .../of15/libofproto-OFP15-packet_out.packet.json | 32 + .../libofproto-OFP15-port_desc_reply.packet.json | 103 + .../libofproto-OFP15-port_desc_request.packet.json | 7 + .../of15/libofproto-OFP15-port_mod.packet.json | 60 + .../libofproto-OFP15-port_stats_reply.packet.json | 113 + ...libofproto-OFP15-port_stats_request.packet.json | 7 + .../of15/libofproto-OFP15-port_status.packet.json | 76 + .../libofproto-OFP15-queue_desc_reply.packet.json | 81 + ...libofproto-OFP15-queue_desc_request.packet.json | 8 + .../libofproto-OFP15-queue_stats_reply.packet.json | 80 + ...ibofproto-OFP15-queue_stats_request.packet.json | 8 + .../libofproto-OFP15-requestforward.packet.json | 67 + .../of15/libofproto-OFP15-role_reply.packet.json | 7 + .../of15/libofproto-OFP15-role_request.packet.json | 7 + .../of15/libofproto-OFP15-role_status.packet.json | 8 + .../of15/libofproto-OFP15-set_async.packet.json | 122 + .../of15/libofproto-OFP15-set_config.packet.json | 6 + .../libofproto-OFP15-table_desc_reply.packet.json | 83 + ...libofproto-OFP15-table_desc_request.packet.json | 6 + ...bofproto-OFP15-table_features_reply.packet.json | 38 + ...fproto-OFP15-table_features_request.packet.json | 38 + .../of15/libofproto-OFP15-table_mod.packet.json | 15 + .../libofproto-OFP15-table_stats_reply.packet.json | 24 + ...ibofproto-OFP15-table_stats_request.packet.json | 6 + .../of15/libofproto-OFP15-table_status.packet.json | 62 + tests/unit/ofproto/test_ether.py | 37 + tests/unit/ofproto/test_inet.py | 43 + tests/unit/ofproto/test_nx_flow_spec.py | 95 + tests/unit/ofproto/test_ofproto.py | 81 + tests/unit/ofproto/test_ofproto_common.py | 37 + tests/unit/ofproto/test_ofproto_parser.py | 244 + tests/unit/ofproto/test_ofproto_v12.py | 717 + tests/unit/ofproto/test_oxm.py | 188 + tests/unit/ofproto/test_oxs.py | 116 + tests/unit/ofproto/test_parser.py | 312 + tests/unit/ofproto/test_parser_compat.py | 159 + tests/unit/ofproto/test_parser_ofpmatch.py | 292 + tests/unit/ofproto/test_parser_ofpstats.py | 208 + tests/unit/ofproto/test_parser_v10.py | 5556 ++++ tests/unit/ofproto/test_parser_v12.py | 7560 +++++ tests/unit/ofproto/test_parser_v13.py | 164 + tests/unit/packet/__init__.py | 0 tests/unit/packet/test_arp.py | 183 + tests/unit/packet/test_bfd.py | 320 + tests/unit/packet/test_bgp.py | 813 + tests/unit/packet/test_bmp.py | 136 + tests/unit/packet/test_bpdu.py | 469 + tests/unit/packet/test_cfm.py | 1761 + tests/unit/packet/test_dhcp.py | 218 + tests/unit/packet/test_ethernet.py | 103 + tests/unit/packet/test_geneve.py | 62 + tests/unit/packet/test_gre.py | 115 + tests/unit/packet/test_icmp.py | 380 + tests/unit/packet/test_icmpv6.py | 2039 ++ tests/unit/packet/test_igmp.py | 997 + tests/unit/packet/test_ipv4.py | 137 + tests/unit/packet/test_ipv6.py | 1128 + tests/unit/packet/test_llc.py | 42 + tests/unit/packet/test_lldp.py | 533 + tests/unit/packet/test_mpls.py | 92 + tests/unit/packet/test_openflow.py | 64 + tests/unit/packet/test_ospf.py | 120 + tests/unit/packet/test_packet.py | 1553 + tests/unit/packet/test_pbb.py | 172 + tests/unit/packet/test_sctp.py | 1454 + tests/unit/packet/test_slow.py | 1104 + tests/unit/packet/test_tcp.py | 267 + tests/unit/packet/test_udp.py | 110 + tests/unit/packet/test_vlan.py | 265 + tests/unit/packet/test_vrrp.py | 496 + tests/unit/packet/test_vxlan.py | 82 + tests/unit/packet/test_zebra.py | 66 + tests/unit/sample/__init__.py | 0 tests/unit/sample/test_sample1.py | 20 + tests/unit/sample/test_sample2.py | 14 + tests/unit/services/__init__.py | 0 tests/unit/services/protocols/__init__.py | 0 tests/unit/services/protocols/bgp/__init__.py | 0 .../protocols/bgp/core_managers/__init__.py | 0 .../bgp/core_managers/test_table_manager.py | 937 + .../unit/services/protocols/bgp/test_bgpspeaker.py | 1088 + tests/unit/services/protocols/bgp/test_peer.py | 375 + .../unit/services/protocols/bgp/utils/__init__.py | 0 .../unit/services/protocols/bgp/utils/test_bgp.py | 211 + .../protocols/bgp/utils/test_validation.py | 215 + tests/unit/test_requirements.py | 85 + tests/unit/test_utils.py | 84 + tools/normalize_json.py | 2 +- tox.ini | 6 +- 1954 files changed, 206401 insertions(+), 206391 deletions(-) delete mode 100644 ryu/tests/integrated/__init__.py delete mode 100644 ryu/tests/integrated/bgp/__init__.py delete mode 100644 ryu/tests/integrated/bgp/base.py delete mode 100644 ryu/tests/integrated/bgp/base_ip6.py delete mode 100644 ryu/tests/integrated/bgp/test_basic.py delete mode 100644 ryu/tests/integrated/bgp/test_ip6_basic.py delete mode 100644 ryu/tests/integrated/common/__init__.py delete mode 100644 ryu/tests/integrated/common/docker_base.py delete mode 100644 ryu/tests/integrated/common/install_docker_test_pkg.sh delete mode 100644 ryu/tests/integrated/common/install_docker_test_pkg_common.sh delete mode 100644 ryu/tests/integrated/common/install_docker_test_pkg_for_travis.sh delete mode 100644 ryu/tests/integrated/common/quagga.py delete mode 100644 ryu/tests/integrated/common/ryubgp.py delete mode 100644 ryu/tests/integrated/run_test.py delete mode 100755 ryu/tests/integrated/run_tests_with_ovs12.py delete mode 100644 ryu/tests/integrated/test_add_flow_v10.py delete mode 100644 ryu/tests/integrated/test_add_flow_v12_actions.py delete mode 100644 ryu/tests/integrated/test_add_flow_v12_matches.py delete mode 100644 ryu/tests/integrated/test_of_config.py delete mode 100644 ryu/tests/integrated/test_request_reply_v12.py delete mode 100644 ryu/tests/integrated/test_vrrp_linux_multi.py delete mode 100644 ryu/tests/integrated/test_vrrp_linux_multi.sh delete mode 100644 ryu/tests/integrated/test_vrrp_multi.py delete mode 100644 ryu/tests/integrated/test_vrrp_multi.sh delete mode 100644 ryu/tests/integrated/tester.py delete mode 100644 ryu/tests/integrated/vrrp_common.py delete mode 100644 ryu/tests/mininet/l2/mpls/PopMPLS_mpls.mn delete mode 100644 ryu/tests/mininet/l2/mpls/PushMPLS_ip.mn delete mode 100644 ryu/tests/mininet/l2/mpls/PushMPLS_mpls.mn delete mode 100644 ryu/tests/mininet/l2/mpls/test_mpls.py delete mode 100644 ryu/tests/mininet/l2/vlan/PopVLAN_vlan.mn delete mode 100644 ryu/tests/mininet/l2/vlan/PopVLAN_vlanvlan.mn delete mode 100644 ryu/tests/mininet/l2/vlan/PushVLAN_icmp.mn delete mode 100644 ryu/tests/mininet/l2/vlan/test_vlan.py delete mode 100644 ryu/tests/mininet/l3/icmp/ICMP_ping.mn delete mode 100644 ryu/tests/mininet/l3/icmp/ICMP_reply.mn delete mode 100644 ryu/tests/mininet/l3/icmp/test_icmp.py delete mode 100644 ryu/tests/mininet/l3/ip_ttl/DecNwTtl.mn delete mode 100644 ryu/tests/mininet/l3/ip_ttl/test_ip_ttl.py delete mode 100644 ryu/tests/mininet/packet_lib/arp/ARP_gratuitous.mn delete mode 100644 ryu/tests/mininet/packet_lib/arp/ARP_reply.mn delete mode 100644 ryu/tests/mininet/packet_lib/arp/ARP_request.mn delete mode 100644 ryu/tests/mininet/packet_lib/arp/test_arp.py delete mode 100755 ryu/tests/mininet/run_mnet-test.sh delete mode 100644 ryu/tests/packet_data/bgp4/bgp4-keepalive.pcap delete mode 100644 ryu/tests/packet_data/bgp4/bgp4-open.pcap delete mode 100644 ryu/tests/packet_data/bgp4/bgp4-update.pcap delete mode 100644 ryu/tests/packet_data/bgp4/bgp4-update_ipv6.pcap delete mode 100644 ryu/tests/packet_data/bgp4/bgp4-update_vpnv6.pcap delete mode 100644 ryu/tests/packet_data/bgp4/evpn_esi_arbitrary.pcap delete mode 100644 ryu/tests/packet_data/bgp4/evpn_esi_as_based.pcap delete mode 100644 ryu/tests/packet_data/bgp4/evpn_esi_l2_bridge.pcap delete mode 100644 ryu/tests/packet_data/bgp4/evpn_esi_lacp.pcap delete mode 100644 ryu/tests/packet_data/bgp4/evpn_esi_mac_base.pcap delete mode 100644 ryu/tests/packet_data/bgp4/evpn_esi_router_id.pcap delete mode 100644 ryu/tests/packet_data/bgp4/evpn_nlri_eth_a-d.pcap delete mode 100644 ryu/tests/packet_data/bgp4/evpn_nlri_eth_seg.pcap delete mode 100644 ryu/tests/packet_data/bgp4/evpn_nlri_inc_multi_eth_tag.pcap delete mode 100644 ryu/tests/packet_data/bgp4/evpn_nlri_ip_prefix.pcap delete mode 100644 ryu/tests/packet_data/bgp4/evpn_nlri_mac_ip_ad.pcap delete mode 100644 ryu/tests/packet_data/bgp4/flowspec_action_redirect.pcap delete mode 100644 ryu/tests/packet_data/bgp4/flowspec_action_traffic_action.pcap delete mode 100644 ryu/tests/packet_data/bgp4/flowspec_action_traffic_marking.pcap delete mode 100644 ryu/tests/packet_data/bgp4/flowspec_action_traffic_rate.pcap delete mode 100644 ryu/tests/packet_data/bgp4/flowspec_nlri_ipv4.pcap delete mode 100644 ryu/tests/packet_data/bgp4/flowspec_nlri_ipv6.pcap delete mode 100644 ryu/tests/packet_data/bgp4/flowspec_nlri_l2vpn.pcap delete mode 100644 ryu/tests/packet_data/bgp4/flowspec_nlri_vpn4.pcap delete mode 100644 ryu/tests/packet_data/bgp4/flowspec_nlri_vpn6.pcap delete mode 100644 ryu/tests/packet_data/mrt/rib.20161101.0000_pick.bz2 delete mode 100644 ryu/tests/packet_data/mrt/updates.20161101.0000.bz2 delete mode 100644 ryu/tests/packet_data/of10/1-1-ofp_packet_out.packet delete mode 100644 ryu/tests/packet_data/of10/1-2-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of10/1-4-ofp_packet_in.packet delete mode 100644 ryu/tests/packet_data/of10/1-5-features_request.packet delete mode 100644 ryu/tests/packet_data/of10/1-6-ofp_switch_features.packet delete mode 100644 ryu/tests/packet_data/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet delete mode 100644 ryu/tests/packet_data/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet delete mode 100644 ryu/tests/packet_data/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet delete mode 100644 ryu/tests/packet_data/of10/ovs-ofctl-of10-action_pop_mpls.packet delete mode 100644 ryu/tests/packet_data/of10/ovs-ofctl-of10-action_push_mpls.packet delete mode 100644 ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_label.packet delete mode 100644 ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_tc.packet delete mode 100644 ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet delete mode 100644 ryu/tests/packet_data/of12/3-0-ofp_desc_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-1-ofp_packet_out.packet delete mode 100644 ryu/tests/packet_data/of12/3-10-ofp_hello.packet delete mode 100644 ryu/tests/packet_data/of12/3-11-ofp_flow_stats_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-12-ofp_flow_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-13-ofp_echo_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-14-ofp_echo_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-15-ofp_error_msg.packet delete mode 100644 ryu/tests/packet_data/of12/3-16-ofp_experimenter.packet delete mode 100644 ryu/tests/packet_data/of12/3-17-ofp_barrier_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-18-ofp_barrier_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-19-ofp_role_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-2-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of12/3-20-ofp_role_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-21-ofp_group_mod.packet delete mode 100644 ryu/tests/packet_data/of12/3-22-ofp_port_mod.packet delete mode 100644 ryu/tests/packet_data/of12/3-23-ofp_table_mod.packet delete mode 100644 ryu/tests/packet_data/of12/3-24-ofp_desc_stats_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-25-ofp_aggregate_stats_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-26-ofp_aggregate_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-27-ofp_table_stats_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-28-ofp_table_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-29-ofp_port_stats_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-3-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of12/3-30-ofp_port_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-31-ofp_group_features_stats_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-32-ofp_group_features_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-33-ofp_group_desc_stats_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-34-ofp_group_desc_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-35-ofp_queue_get_config_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-36-ofp_queue_get_config_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-37-ofp_queue_stats_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-38-ofp_queue_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-39-ofp_port_status.packet delete mode 100644 ryu/tests/packet_data/of12/3-4-ofp_packet_in.packet delete mode 100644 ryu/tests/packet_data/of12/3-40-ofp_flow_removed.packet delete mode 100644 ryu/tests/packet_data/of12/3-41-ofp_error_msg_experimenter.packet delete mode 100644 ryu/tests/packet_data/of12/3-5-ofp_features_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-59-ofp_packet_in.packet delete mode 100644 ryu/tests/packet_data/of12/3-6-ofp_features_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-60-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of12/3-61-ofp_group_stats_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-62-ofp_group_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of12/3-7-ofp_set_config.packet delete mode 100644 ryu/tests/packet_data/of12/3-8-ofp_get_config_request.packet delete mode 100644 ryu/tests/packet_data/of12/3-9-ofp_get_config_reply.packet delete mode 100644 ryu/tests/packet_data/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet delete mode 100644 ryu/tests/packet_data/of13/4-0-ofp_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-1-ofp_packet_out.packet delete mode 100644 ryu/tests/packet_data/of13/4-10-ofp_hello.packet delete mode 100644 ryu/tests/packet_data/of13/4-11-ofp_flow_stats_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-12-ofp_flow_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-13-ofp_echo_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-14-ofp_echo_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-15-ofp_error_msg.packet delete mode 100644 ryu/tests/packet_data/of13/4-16-ofp_experimenter.packet delete mode 100644 ryu/tests/packet_data/of13/4-17-ofp_barrier_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-18-ofp_barrier_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-19-ofp_role_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-2-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of13/4-20-ofp_role_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-21-ofp_group_mod.packet delete mode 100644 ryu/tests/packet_data/of13/4-22-ofp_port_mod.packet delete mode 100644 ryu/tests/packet_data/of13/4-23-ofp_table_mod.packet delete mode 100644 ryu/tests/packet_data/of13/4-24-ofp_desc_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-25-ofp_aggregate_stats_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-26-ofp_aggregate_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-27-ofp_table_stats_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-28-ofp_table_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-29-ofp_port_stats_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-3-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of13/4-30-ofp_port_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-31-ofp_group_features_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-32-ofp_group_features_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-33-ofp_group_desc_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-34-ofp_group_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-35-ofp_queue_get_config_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-36-ofp_queue_get_config_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-37-ofp_queue_stats_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-38-ofp_queue_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-39-ofp_port_status.packet delete mode 100644 ryu/tests/packet_data/of13/4-4-ofp_packet_in.packet delete mode 100644 ryu/tests/packet_data/of13/4-40-ofp_flow_removed.packet delete mode 100644 ryu/tests/packet_data/of13/4-41-ofp_error_msg_experimenter.packet delete mode 100644 ryu/tests/packet_data/of13/4-42-ofp_get_async_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-43-ofp_get_async_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-44-ofp_set_async.packet delete mode 100644 ryu/tests/packet_data/of13/4-45-ofp_meter_mod.packet delete mode 100644 ryu/tests/packet_data/of13/4-46-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of13/4-47-ofp_meter_config_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-48-ofp_meter_config_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-49-ofp_meter_stats_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-5-ofp_features_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-50-ofp_meter_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-51-ofp_meter_features_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-52-ofp_meter_features_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-53-ofp_port_desc_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-54-ofp_port_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-55-ofp_table_features_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-56-ofp_table_features_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-57-ofp_group_stats_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-58-ofp_group_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-59-ofp_packet_in.packet delete mode 100644 ryu/tests/packet_data/of13/4-6-ofp_features_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-60-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of13/4-61-ofp_experimenter_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-62-ofp_experimenter_reply.packet delete mode 100644 ryu/tests/packet_data/of13/4-63-onf_flow_monitor_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-7-ofp_set_config.packet delete mode 100644 ryu/tests/packet_data/of13/4-8-ofp_get_config_request.packet delete mode 100644 ryu/tests/packet_data/of13/4-9-ofp_get_config_reply.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-echo_reply.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-echo_request.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-error_msg.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-features_reply.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod.truncated64 delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod_conjunction.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod_match_conj.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-flow_removed.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-get_config_reply.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-hello.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-meter_mod.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-packet_in.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-port_mod.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-port_status.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-set_config.packet delete mode 100644 ryu/tests/packet_data/of13/libofproto-OFP13-table_mod.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_conjunction.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_controller.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_controller2.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_exec.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat_v6.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_fintimeout.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_learn.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_note.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_output_trunc.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_resubmit.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_sample.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_sample2.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_stack_pop.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-action_stack_push.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-match_conj.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-match_load_nx_register.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-match_move_nx_register.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark.packet delete mode 100644 ryu/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet delete mode 100644 ryu/tests/packet_data/of14/5-0-ofp_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-1-ofp_packet_out.packet delete mode 100644 ryu/tests/packet_data/of14/5-10-ofp_hello.packet delete mode 100644 ryu/tests/packet_data/of14/5-11-ofp_flow_stats_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-12-ofp_flow_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-13-ofp_echo_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-14-ofp_echo_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-15-ofp_error_msg.packet delete mode 100644 ryu/tests/packet_data/of14/5-16-ofp_experimenter.packet delete mode 100644 ryu/tests/packet_data/of14/5-17-ofp_barrier_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-18-ofp_barrier_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-19-ofp_role_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-2-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of14/5-20-ofp_role_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-21-ofp_group_mod.packet delete mode 100644 ryu/tests/packet_data/of14/5-22-ofp_port_mod.packet delete mode 100644 ryu/tests/packet_data/of14/5-23-ofp_table_mod.packet delete mode 100644 ryu/tests/packet_data/of14/5-24-ofp_desc_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-25-ofp_aggregate_stats_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-26-ofp_aggregate_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-27-ofp_table_stats_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-28-ofp_table_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-29-ofp_port_stats_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-3-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of14/5-30-ofp_port_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-31-ofp_group_features_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-32-ofp_group_features_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-33-ofp_group_desc_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-34-ofp_group_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-35-ofp_queue_stats_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-36-ofp_queue_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-37-ofp_port_status.packet delete mode 100644 ryu/tests/packet_data/of14/5-38-ofp_flow_removed.packet delete mode 100644 ryu/tests/packet_data/of14/5-39-ofp_error_msg_experimenter.packet delete mode 100644 ryu/tests/packet_data/of14/5-4-ofp_packet_in.packet delete mode 100644 ryu/tests/packet_data/of14/5-40-ofp_get_async_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-41-ofp_get_async_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-42-ofp_set_async.packet delete mode 100644 ryu/tests/packet_data/of14/5-43-ofp_meter_mod.packet delete mode 100644 ryu/tests/packet_data/of14/5-44-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of14/5-45-ofp_meter_config_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-46-ofp_meter_config_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-47-ofp_meter_stats_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-48-ofp_meter_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-49-ofp_meter_features_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-5-ofp_features_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-50-ofp_meter_features_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-51-ofp_port_desc_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-52-ofp_port_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-53-ofp_table_features_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-54-ofp_table_features_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-55-ofp_group_stats_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-56-ofp_group_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-57-ofp_packet_in.packet delete mode 100644 ryu/tests/packet_data/of14/5-58-ofp_flow_mod.packet delete mode 100644 ryu/tests/packet_data/of14/5-59-ofp_experimenter_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-6-ofp_features_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-60-ofp_experimenter_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-61-ofp_table_desc_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-62-ofp_table_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-63-ofp_queue_desc_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-64-ofp_queue_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-65-ofp_role_status.packet delete mode 100644 ryu/tests/packet_data/of14/5-66-ofp_flow_monitor_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-67-ofp_flow_monitor_reply.packet delete mode 100644 ryu/tests/packet_data/of14/5-68-ofp_table_status.packet delete mode 100644 ryu/tests/packet_data/of14/5-69-ofp_bundle_ctrl_msg.packet delete mode 100644 ryu/tests/packet_data/of14/5-7-ofp_set_config.packet delete mode 100644 ryu/tests/packet_data/of14/5-70-ofp_bundle_add_msg.packet delete mode 100644 ryu/tests/packet_data/of14/5-71-ofp_requestforward.packet delete mode 100644 ryu/tests/packet_data/of14/5-8-ofp_get_config_request.packet delete mode 100644 ryu/tests/packet_data/of14/5-9-ofp_get_config_reply.packet delete mode 100644 ryu/tests/packet_data/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-barrier_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-barrier_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-bundle_add.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-bundle_ctrl.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-bundle_features_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-bundle_features_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-controller_status.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-controller_status_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-controller_status_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-desc_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-desc_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-echo_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-echo_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-error_msg.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-error_msg_experimenter.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-experimenter.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-experimenter_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-experimenter_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-features_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-features_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-flow_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-flow_desc_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod_conjunction.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod_match_conj.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-flow_monitor_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-flow_monitor_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-flow_removed.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-flow_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-flow_stats_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-get_async_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-get_async_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-get_config_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-get_config_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-group_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-group_desc_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-group_features_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-group_features_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-group_mod.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-group_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-group_stats_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-hello.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-meter_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-meter_desc_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-meter_features_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-meter_features_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-meter_mod.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-meter_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-meter_stats_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-packet_in.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-packet_out.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-port_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-port_desc_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-port_mod.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-port_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-port_stats_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-port_status.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-queue_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-queue_desc_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-queue_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-queue_stats_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-requestforward.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-role_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-role_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-role_status.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-set_async.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-set_config.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-table_desc_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-table_desc_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-table_features_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-table_features_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-table_mod.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-table_stats_reply.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-table_stats_request.packet delete mode 100644 ryu/tests/packet_data/of15/libofproto-OFP15-table_status.packet delete mode 100644 ryu/tests/packet_data/pcap/big_endian.pcap delete mode 100644 ryu/tests/packet_data/pcap/geneve_unknown.pcap delete mode 100644 ryu/tests/packet_data/pcap/gre_full_options.pcap delete mode 100644 ryu/tests/packet_data/pcap/gre_no_option.pcap delete mode 100644 ryu/tests/packet_data/pcap/gre_nvgre_option.pcap delete mode 100644 ryu/tests/packet_data/pcap/little_endian.pcap delete mode 100644 ryu/tests/packet_data/pcap/openflow_flowmod.pcap delete mode 100644 ryu/tests/packet_data/pcap/openflow_flowstats_req.pcap delete mode 100644 ryu/tests/packet_data/pcap/openflow_invalid_version.pcap delete mode 100644 ryu/tests/packet_data/pcap/zebra_v2.pcap delete mode 100644 ryu/tests/packet_data/pcap/zebra_v3.pcap delete mode 100644 ryu/tests/packet_data_generator/Makefile delete mode 100644 ryu/tests/packet_data_generator/rebar.config delete mode 100644 ryu/tests/packet_data_generator/src/er.app.src delete mode 100644 ryu/tests/packet_data_generator/src/x.erl delete mode 100644 ryu/tests/packet_data_generator/src/x1.erl delete mode 100644 ryu/tests/packet_data_generator/src/x3.erl delete mode 100644 ryu/tests/packet_data_generator/src/x4.erl delete mode 100644 ryu/tests/packet_data_generator/src/x5.erl delete mode 100644 ryu/tests/packet_data_generator/src/x_flower_packet.erl delete mode 100644 ryu/tests/packet_data_generator/src/x_of_protocol.erl delete mode 100644 ryu/tests/packet_data_generator2/Makefile.BSD delete mode 100644 ryu/tests/packet_data_generator2/Makefile.GNU delete mode 100644 ryu/tests/packet_data_generator2/README delete mode 100644 ryu/tests/packet_data_generator2/gen.c delete mode 100644 ryu/tests/packet_data_generator3/gen.py delete mode 100755 ryu/tests/run_tests.py delete mode 100644 ryu/tests/test_lib.py delete mode 100644 ryu/tests/unit/__init__.py delete mode 100644 ryu/tests/unit/app/__init__.py delete mode 100644 ryu/tests/unit/app/ofctl_rest_json/of10.json delete mode 100644 ryu/tests/unit/app/ofctl_rest_json/of12.json delete mode 100644 ryu/tests/unit/app/ofctl_rest_json/of13.json delete mode 100644 ryu/tests/unit/app/ofctl_rest_json/of14.json delete mode 100644 ryu/tests/unit/app/ofctl_rest_json/of15.json delete mode 100644 ryu/tests/unit/app/test_ofctl_rest.py delete mode 100644 ryu/tests/unit/app/test_tester.py delete mode 100644 ryu/tests/unit/app/test_ws_topology.py delete mode 100644 ryu/tests/unit/app/test_wsgi.py delete mode 100644 ryu/tests/unit/cmd/__init__.py delete mode 100644 ryu/tests/unit/cmd/dummy_app.py delete mode 100644 ryu/tests/unit/cmd/dummy_openflow_app.py delete mode 100644 ryu/tests/unit/cmd/test_manager.py delete mode 100644 ryu/tests/unit/controller/__init__.py delete mode 100644 ryu/tests/unit/controller/test_controller.py delete mode 100644 ryu/tests/unit/lib/__init__.py delete mode 100644 ryu/tests/unit/lib/ofctl_json/of10/1-2-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-0-ofp_desc_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-11-ofp_flow_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-12-ofp_flow_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-16-ofp_experimenter.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-2-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-21-ofp_group_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-22-ofp_port_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-25-ofp_aggregate_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-26-ofp_aggregate_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-28-ofp_table_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-30-ofp_port_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-32-ofp_group_features_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-34-ofp_group_desc_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-35-ofp_queue_get_config_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-36-ofp_queue_get_config_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-38-ofp_queue_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-6-ofp_features_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/3-62-ofp_group_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_group_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_port_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-0-ofp_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-11-ofp_flow_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-12-ofp_flow_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-16-ofp_experimenter.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-2-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-21-ofp_group_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-22-ofp_port_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-25-ofp_aggregate_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-26-ofp_aggregate_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-28-ofp_table_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-30-ofp_port_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-32-ofp_group_features_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-34-ofp_group_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-35-ofp_queue_get_config_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-36-ofp_queue_get_config_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-38-ofp_queue_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-45-ofp_meter_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-48-ofp_meter_config_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-50-ofp_meter_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-52-ofp_meter_features_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-54-ofp_port_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-56-ofp_table_features_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/4-58-ofp_group_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_group_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_config_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_port_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-0-ofp_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-11-ofp_flow_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-12-ofp_flow_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-16-ofp_experimenter.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-2-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-21-ofp_group_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-22-ofp_port_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-25-ofp_aggregate_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-26-ofp_aggregate_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-28-ofp_table_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-30-ofp_port_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-32-ofp_group_features_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-34-ofp_group_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-36-ofp_queue_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-43-ofp_meter_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-46-ofp_meter_config_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-48-ofp_meter_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-50-ofp_meter_features_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-52-ofp_port_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-54-ofp_table_features_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-56-ofp_group_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-63-ofp_queue_desc_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of14/5-64-ofp_queue_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-experimenter.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_features_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_features_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_mod.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_request.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_features_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_stats_reply.packet.json delete mode 100644 ryu/tests/unit/lib/ovs/__init__.py delete mode 100644 ryu/tests/unit/lib/ovs/test_vsctl.py delete mode 100644 ryu/tests/unit/lib/test_addrconv.py delete mode 100644 ryu/tests/unit/lib/test_hub.py delete mode 100644 ryu/tests/unit/lib/test_import_module.py delete mode 100644 ryu/tests/unit/lib/test_ip.py delete mode 100644 ryu/tests/unit/lib/test_mac.py delete mode 100644 ryu/tests/unit/lib/test_mod/__init__.py delete mode 100644 ryu/tests/unit/lib/test_mod/aaa/__init__.py delete mode 100644 ryu/tests/unit/lib/test_mod/aaa/mod.py delete mode 100644 ryu/tests/unit/lib/test_mod/bbb/__init__.py delete mode 100644 ryu/tests/unit/lib/test_mod/bbb/mod.py delete mode 100644 ryu/tests/unit/lib/test_mod/ccc/__init__.py delete mode 100644 ryu/tests/unit/lib/test_mod/ccc/mod.py delete mode 100644 ryu/tests/unit/lib/test_mod/ddd/__init__.py delete mode 100644 ryu/tests/unit/lib/test_mod/ddd/mod.py delete mode 100644 ryu/tests/unit/lib/test_mod/eee.py delete mode 100644 ryu/tests/unit/lib/test_mod/fff.py delete mode 100644 ryu/tests/unit/lib/test_mod/ggg.py delete mode 100644 ryu/tests/unit/lib/test_mrtlib.py delete mode 100644 ryu/tests/unit/lib/test_of_config_classes.py delete mode 100644 ryu/tests/unit/lib/test_ofctl.py delete mode 100644 ryu/tests/unit/lib/test_ofctl_action_match.py delete mode 100644 ryu/tests/unit/lib/test_ofctl_string.py delete mode 100644 ryu/tests/unit/lib/test_ofctl_utils.py delete mode 100644 ryu/tests/unit/lib/test_ofctl_v1_3.py delete mode 100644 ryu/tests/unit/lib/test_ofp_pktinfilter.py delete mode 100644 ryu/tests/unit/lib/test_pack_utils.py delete mode 100644 ryu/tests/unit/lib/test_pcaplib.py delete mode 100644 ryu/tests/unit/lib/test_rpc.py delete mode 100644 ryu/tests/unit/lib/test_stringify.py delete mode 100644 ryu/tests/unit/ofproto/__init__.py delete mode 100644 ryu/tests/unit/ofproto/json/of10/1-1-ofp_packet_out.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/1-2-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/1-4-ofp_packet_in.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/1-5-features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/1-6-ofp_switch_features.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_pop_mpls.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_push_mpls.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_label.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_tc.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-0-ofp_desc_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-1-ofp_packet_out.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-10-ofp_hello.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-11-ofp_flow_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-12-ofp_flow_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-13-ofp_echo_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-14-ofp_echo_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-15-ofp_error_msg.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-16-ofp_experimenter.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-17-ofp_barrier_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-18-ofp_barrier_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-19-ofp_role_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-2-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-20-ofp_role_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-21-ofp_group_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-22-ofp_port_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-23-ofp_table_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-24-ofp_desc_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-25-ofp_aggregate_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-26-ofp_aggregate_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-27-ofp_table_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-28-ofp_table_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-29-ofp_port_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-3-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-30-ofp_port_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-31-ofp_group_features_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-32-ofp_group_features_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-33-ofp_group_desc_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-34-ofp_group_desc_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-35-ofp_queue_get_config_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-36-ofp_queue_get_config_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-37-ofp_queue_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-38-ofp_queue_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-39-ofp_port_status.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-4-ofp_packet_in.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-40-ofp_flow_removed.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-41-ofp_error_msg_experimenter.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-5-ofp_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-59-ofp_packet_in.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-6-ofp_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-60-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-61-ofp_group_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-62-ofp_group_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-7-ofp_set_config.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-8-ofp_get_config_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/3-9-ofp_get_config_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_group_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_port_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json delete mode 100644 ryu/tests/unit/ofproto/json/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-0-ofp_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-1-ofp_packet_out.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-10-ofp_hello.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-11-ofp_flow_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-12-ofp_flow_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-13-ofp_echo_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-14-ofp_echo_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-15-ofp_error_msg.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-16-ofp_experimenter.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-17-ofp_barrier_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-18-ofp_barrier_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-19-ofp_role_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-2-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-20-ofp_role_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-21-ofp_group_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-22-ofp_port_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-23-ofp_table_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-24-ofp_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-25-ofp_aggregate_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-26-ofp_aggregate_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-27-ofp_table_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-28-ofp_table_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-29-ofp_port_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-3-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-30-ofp_port_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-31-ofp_group_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-32-ofp_group_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-33-ofp_group_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-34-ofp_group_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-35-ofp_queue_get_config_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-36-ofp_queue_get_config_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-37-ofp_queue_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-38-ofp_queue_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-39-ofp_port_status.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-4-ofp_packet_in.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-40-ofp_flow_removed.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-41-ofp_error_msg_experimenter.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-42-ofp_get_async_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-43-ofp_get_async_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-44-ofp_set_async.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-45-ofp_meter_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-46-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-47-ofp_meter_config_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-48-ofp_meter_config_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-49-ofp_meter_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-5-ofp_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-50-ofp_meter_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-51-ofp_meter_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-52-ofp_meter_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-53-ofp_port_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-54-ofp_port_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-55-ofp_table_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-57-ofp_group_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-58-ofp_group_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-59-ofp_packet_in.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-6-ofp_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-60-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-61-ofp_experimenter_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-62-ofp_experimenter_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-63-onf_flow_monitor_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-7-ofp_set_config.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-8-ofp_get_config_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/4-9-ofp_get_config_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_group_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_config_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_port_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_table_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-error_msg.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.truncated64.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_conjunction.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_match_conj.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_removed.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-get_config_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-hello.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-meter_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-packet_in.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-port_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-port_status.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-set_config.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-table_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_conjunction.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller2.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_fintimeout.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_learn.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_note.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_output_trunc.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_resubmit.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample2.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_pop.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_push.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_conj.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_move_nx_register.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-0-ofp_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-1-ofp_packet_out.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-10-ofp_hello.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-11-ofp_flow_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-13-ofp_echo_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-14-ofp_echo_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-15-ofp_error_msg.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-16-ofp_experimenter.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-17-ofp_barrier_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-18-ofp_barrier_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-19-ofp_role_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-20-ofp_role_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-21-ofp_group_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-22-ofp_port_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-23-ofp_table_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-24-ofp_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-25-ofp_aggregate_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-26-ofp_aggregate_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-27-ofp_table_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-28-ofp_table_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-29-ofp_port_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-3-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-30-ofp_port_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-31-ofp_group_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-32-ofp_group_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-33-ofp_group_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-34-ofp_group_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-35-ofp_queue_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-36-ofp_queue_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-37-ofp_port_status.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-38-ofp_flow_removed.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-39-ofp_error_msg_experimenter.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-4-ofp_packet_in.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-40-ofp_get_async_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-41-ofp_get_async_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-42-ofp_set_async.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-43-ofp_meter_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-44-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-45-ofp_meter_config_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-46-ofp_meter_config_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-47-ofp_meter_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-48-ofp_meter_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-49-ofp_meter_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-5-ofp_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-50-ofp_meter_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-51-ofp_port_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-52-ofp_port_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-53-ofp_table_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-54-ofp_table_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-55-ofp_group_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-56-ofp_group_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-57-ofp_packet_in.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-58-ofp_flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-59-ofp_experimenter_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-6-ofp_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-60-ofp_experimenter_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-61-ofp_table_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-62-ofp_table_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-63-ofp_queue_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-64-ofp_queue_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-65-ofp_role_status.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-66-ofp_flow_monitor_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-67-ofp_flow_monitor_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-68-ofp_table_status.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-69-ofp_bundle_ctrl_msg.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-7-ofp_set_config.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-70-ofp_bundle_add_msg.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-71-ofp_requestforward.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-8-ofp_get_config_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/5-9-ofp_get_config_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/lib-ofctl-ofp_table_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/lib-ofctl-ofp_queue_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/lib-ofctl-ofp_table_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_add.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_ctrl.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_conjunction.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_match_conj.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_removed.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_in.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_out.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json delete mode 100644 ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json delete mode 100644 ryu/tests/unit/ofproto/test_ether.py delete mode 100644 ryu/tests/unit/ofproto/test_inet.py delete mode 100644 ryu/tests/unit/ofproto/test_nx_flow_spec.py delete mode 100644 ryu/tests/unit/ofproto/test_ofproto.py delete mode 100644 ryu/tests/unit/ofproto/test_ofproto_common.py delete mode 100644 ryu/tests/unit/ofproto/test_ofproto_parser.py delete mode 100644 ryu/tests/unit/ofproto/test_ofproto_v12.py delete mode 100644 ryu/tests/unit/ofproto/test_oxm.py delete mode 100644 ryu/tests/unit/ofproto/test_oxs.py delete mode 100644 ryu/tests/unit/ofproto/test_parser.py delete mode 100644 ryu/tests/unit/ofproto/test_parser_compat.py delete mode 100644 ryu/tests/unit/ofproto/test_parser_ofpmatch.py delete mode 100644 ryu/tests/unit/ofproto/test_parser_ofpstats.py delete mode 100644 ryu/tests/unit/ofproto/test_parser_v10.py delete mode 100644 ryu/tests/unit/ofproto/test_parser_v12.py delete mode 100644 ryu/tests/unit/ofproto/test_parser_v13.py delete mode 100644 ryu/tests/unit/packet/__init__.py delete mode 100644 ryu/tests/unit/packet/test_arp.py delete mode 100644 ryu/tests/unit/packet/test_bfd.py delete mode 100644 ryu/tests/unit/packet/test_bgp.py delete mode 100644 ryu/tests/unit/packet/test_bmp.py delete mode 100644 ryu/tests/unit/packet/test_bpdu.py delete mode 100644 ryu/tests/unit/packet/test_cfm.py delete mode 100644 ryu/tests/unit/packet/test_dhcp.py delete mode 100644 ryu/tests/unit/packet/test_ethernet.py delete mode 100644 ryu/tests/unit/packet/test_geneve.py delete mode 100644 ryu/tests/unit/packet/test_gre.py delete mode 100644 ryu/tests/unit/packet/test_icmp.py delete mode 100644 ryu/tests/unit/packet/test_icmpv6.py delete mode 100644 ryu/tests/unit/packet/test_igmp.py delete mode 100644 ryu/tests/unit/packet/test_ipv4.py delete mode 100644 ryu/tests/unit/packet/test_ipv6.py delete mode 100644 ryu/tests/unit/packet/test_llc.py delete mode 100644 ryu/tests/unit/packet/test_lldp.py delete mode 100644 ryu/tests/unit/packet/test_mpls.py delete mode 100644 ryu/tests/unit/packet/test_openflow.py delete mode 100644 ryu/tests/unit/packet/test_ospf.py delete mode 100644 ryu/tests/unit/packet/test_packet.py delete mode 100644 ryu/tests/unit/packet/test_pbb.py delete mode 100644 ryu/tests/unit/packet/test_sctp.py delete mode 100644 ryu/tests/unit/packet/test_slow.py delete mode 100644 ryu/tests/unit/packet/test_tcp.py delete mode 100644 ryu/tests/unit/packet/test_udp.py delete mode 100644 ryu/tests/unit/packet/test_vlan.py delete mode 100644 ryu/tests/unit/packet/test_vrrp.py delete mode 100644 ryu/tests/unit/packet/test_vxlan.py delete mode 100644 ryu/tests/unit/packet/test_zebra.py delete mode 100644 ryu/tests/unit/sample/__init__.py delete mode 100644 ryu/tests/unit/sample/test_sample1.py delete mode 100644 ryu/tests/unit/sample/test_sample2.py delete mode 100644 ryu/tests/unit/services/__init__.py delete mode 100644 ryu/tests/unit/services/protocols/__init__.py delete mode 100644 ryu/tests/unit/services/protocols/bgp/__init__.py delete mode 100644 ryu/tests/unit/services/protocols/bgp/core_managers/__init__.py delete mode 100644 ryu/tests/unit/services/protocols/bgp/core_managers/test_table_manager.py delete mode 100644 ryu/tests/unit/services/protocols/bgp/test_bgpspeaker.py delete mode 100644 ryu/tests/unit/services/protocols/bgp/test_peer.py delete mode 100644 ryu/tests/unit/services/protocols/bgp/utils/__init__.py delete mode 100644 ryu/tests/unit/services/protocols/bgp/utils/test_bgp.py delete mode 100644 ryu/tests/unit/services/protocols/bgp/utils/test_validation.py delete mode 100644 ryu/tests/unit/test_requirements.py delete mode 100644 ryu/tests/unit/test_utils.py create mode 100644 tests/__init__.py create mode 100644 tests/integrated/__init__.py create mode 100644 tests/integrated/bgp/__init__.py create mode 100644 tests/integrated/bgp/base.py create mode 100644 tests/integrated/bgp/base_ip6.py create mode 100644 tests/integrated/bgp/test_basic.py create mode 100644 tests/integrated/bgp/test_ip6_basic.py create mode 100644 tests/integrated/common/__init__.py create mode 100644 tests/integrated/common/docker_base.py create mode 100644 tests/integrated/common/install_docker_test_pkg.sh create mode 100644 tests/integrated/common/install_docker_test_pkg_common.sh create mode 100644 tests/integrated/common/install_docker_test_pkg_for_travis.sh create mode 100644 tests/integrated/common/quagga.py create mode 100644 tests/integrated/common/ryubgp.py create mode 100644 tests/integrated/run_test.py create mode 100755 tests/integrated/run_tests_with_ovs12.py create mode 100644 tests/integrated/test_add_flow_v10.py create mode 100644 tests/integrated/test_add_flow_v12_actions.py create mode 100644 tests/integrated/test_add_flow_v12_matches.py create mode 100644 tests/integrated/test_of_config.py create mode 100644 tests/integrated/test_request_reply_v12.py create mode 100644 tests/integrated/test_vrrp_linux_multi.py create mode 100644 tests/integrated/test_vrrp_linux_multi.sh create mode 100644 tests/integrated/test_vrrp_multi.py create mode 100644 tests/integrated/test_vrrp_multi.sh create mode 100644 tests/integrated/tester.py create mode 100644 tests/integrated/vrrp_common.py create mode 100644 tests/mininet/l2/mpls/PopMPLS_mpls.mn create mode 100644 tests/mininet/l2/mpls/PushMPLS_ip.mn create mode 100644 tests/mininet/l2/mpls/PushMPLS_mpls.mn create mode 100644 tests/mininet/l2/mpls/test_mpls.py create mode 100644 tests/mininet/l2/vlan/PopVLAN_vlan.mn create mode 100644 tests/mininet/l2/vlan/PopVLAN_vlanvlan.mn create mode 100644 tests/mininet/l2/vlan/PushVLAN_icmp.mn create mode 100644 tests/mininet/l2/vlan/test_vlan.py create mode 100644 tests/mininet/l3/icmp/ICMP_ping.mn create mode 100644 tests/mininet/l3/icmp/ICMP_reply.mn create mode 100644 tests/mininet/l3/icmp/test_icmp.py create mode 100644 tests/mininet/l3/ip_ttl/DecNwTtl.mn create mode 100644 tests/mininet/l3/ip_ttl/test_ip_ttl.py create mode 100644 tests/mininet/packet_lib/arp/ARP_gratuitous.mn create mode 100644 tests/mininet/packet_lib/arp/ARP_reply.mn create mode 100644 tests/mininet/packet_lib/arp/ARP_request.mn create mode 100644 tests/mininet/packet_lib/arp/test_arp.py create mode 100755 tests/mininet/run_mnet-test.sh create mode 100644 tests/packet_data/bgp4/bgp4-keepalive.pcap create mode 100644 tests/packet_data/bgp4/bgp4-open.pcap create mode 100644 tests/packet_data/bgp4/bgp4-update.pcap create mode 100644 tests/packet_data/bgp4/bgp4-update_ipv6.pcap create mode 100644 tests/packet_data/bgp4/bgp4-update_vpnv6.pcap create mode 100644 tests/packet_data/bgp4/evpn_esi_arbitrary.pcap create mode 100644 tests/packet_data/bgp4/evpn_esi_as_based.pcap create mode 100644 tests/packet_data/bgp4/evpn_esi_l2_bridge.pcap create mode 100644 tests/packet_data/bgp4/evpn_esi_lacp.pcap create mode 100644 tests/packet_data/bgp4/evpn_esi_mac_base.pcap create mode 100644 tests/packet_data/bgp4/evpn_esi_router_id.pcap create mode 100644 tests/packet_data/bgp4/evpn_nlri_eth_a-d.pcap create mode 100644 tests/packet_data/bgp4/evpn_nlri_eth_seg.pcap create mode 100644 tests/packet_data/bgp4/evpn_nlri_inc_multi_eth_tag.pcap create mode 100644 tests/packet_data/bgp4/evpn_nlri_ip_prefix.pcap create mode 100644 tests/packet_data/bgp4/evpn_nlri_mac_ip_ad.pcap create mode 100644 tests/packet_data/bgp4/flowspec_action_redirect.pcap create mode 100644 tests/packet_data/bgp4/flowspec_action_traffic_action.pcap create mode 100644 tests/packet_data/bgp4/flowspec_action_traffic_marking.pcap create mode 100644 tests/packet_data/bgp4/flowspec_action_traffic_rate.pcap create mode 100644 tests/packet_data/bgp4/flowspec_nlri_ipv4.pcap create mode 100644 tests/packet_data/bgp4/flowspec_nlri_ipv6.pcap create mode 100644 tests/packet_data/bgp4/flowspec_nlri_l2vpn.pcap create mode 100644 tests/packet_data/bgp4/flowspec_nlri_vpn4.pcap create mode 100644 tests/packet_data/bgp4/flowspec_nlri_vpn6.pcap create mode 100644 tests/packet_data/mrt/rib.20161101.0000_pick.bz2 create mode 100644 tests/packet_data/mrt/updates.20161101.0000.bz2 create mode 100644 tests/packet_data/of10/1-1-ofp_packet_out.packet create mode 100644 tests/packet_data/of10/1-2-ofp_flow_mod.packet create mode 100644 tests/packet_data/of10/1-4-ofp_packet_in.packet create mode 100644 tests/packet_data/of10/1-5-features_request.packet create mode 100644 tests/packet_data/of10/1-6-ofp_switch_features.packet create mode 100644 tests/packet_data/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet create mode 100644 tests/packet_data/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet create mode 100644 tests/packet_data/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet create mode 100644 tests/packet_data/of10/ovs-ofctl-of10-action_pop_mpls.packet create mode 100644 tests/packet_data/of10/ovs-ofctl-of10-action_push_mpls.packet create mode 100644 tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_label.packet create mode 100644 tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_tc.packet create mode 100644 tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet create mode 100644 tests/packet_data/of12/3-0-ofp_desc_stats_reply.packet create mode 100644 tests/packet_data/of12/3-1-ofp_packet_out.packet create mode 100644 tests/packet_data/of12/3-10-ofp_hello.packet create mode 100644 tests/packet_data/of12/3-11-ofp_flow_stats_request.packet create mode 100644 tests/packet_data/of12/3-12-ofp_flow_stats_reply.packet create mode 100644 tests/packet_data/of12/3-13-ofp_echo_request.packet create mode 100644 tests/packet_data/of12/3-14-ofp_echo_reply.packet create mode 100644 tests/packet_data/of12/3-15-ofp_error_msg.packet create mode 100644 tests/packet_data/of12/3-16-ofp_experimenter.packet create mode 100644 tests/packet_data/of12/3-17-ofp_barrier_request.packet create mode 100644 tests/packet_data/of12/3-18-ofp_barrier_reply.packet create mode 100644 tests/packet_data/of12/3-19-ofp_role_request.packet create mode 100644 tests/packet_data/of12/3-2-ofp_flow_mod.packet create mode 100644 tests/packet_data/of12/3-20-ofp_role_reply.packet create mode 100644 tests/packet_data/of12/3-21-ofp_group_mod.packet create mode 100644 tests/packet_data/of12/3-22-ofp_port_mod.packet create mode 100644 tests/packet_data/of12/3-23-ofp_table_mod.packet create mode 100644 tests/packet_data/of12/3-24-ofp_desc_stats_request.packet create mode 100644 tests/packet_data/of12/3-25-ofp_aggregate_stats_request.packet create mode 100644 tests/packet_data/of12/3-26-ofp_aggregate_stats_reply.packet create mode 100644 tests/packet_data/of12/3-27-ofp_table_stats_request.packet create mode 100644 tests/packet_data/of12/3-28-ofp_table_stats_reply.packet create mode 100644 tests/packet_data/of12/3-29-ofp_port_stats_request.packet create mode 100644 tests/packet_data/of12/3-3-ofp_flow_mod.packet create mode 100644 tests/packet_data/of12/3-30-ofp_port_stats_reply.packet create mode 100644 tests/packet_data/of12/3-31-ofp_group_features_stats_request.packet create mode 100644 tests/packet_data/of12/3-32-ofp_group_features_stats_reply.packet create mode 100644 tests/packet_data/of12/3-33-ofp_group_desc_stats_request.packet create mode 100644 tests/packet_data/of12/3-34-ofp_group_desc_stats_reply.packet create mode 100644 tests/packet_data/of12/3-35-ofp_queue_get_config_request.packet create mode 100644 tests/packet_data/of12/3-36-ofp_queue_get_config_reply.packet create mode 100644 tests/packet_data/of12/3-37-ofp_queue_stats_request.packet create mode 100644 tests/packet_data/of12/3-38-ofp_queue_stats_reply.packet create mode 100644 tests/packet_data/of12/3-39-ofp_port_status.packet create mode 100644 tests/packet_data/of12/3-4-ofp_packet_in.packet create mode 100644 tests/packet_data/of12/3-40-ofp_flow_removed.packet create mode 100644 tests/packet_data/of12/3-41-ofp_error_msg_experimenter.packet create mode 100644 tests/packet_data/of12/3-5-ofp_features_request.packet create mode 100644 tests/packet_data/of12/3-59-ofp_packet_in.packet create mode 100644 tests/packet_data/of12/3-6-ofp_features_reply.packet create mode 100644 tests/packet_data/of12/3-60-ofp_flow_mod.packet create mode 100644 tests/packet_data/of12/3-61-ofp_group_stats_request.packet create mode 100644 tests/packet_data/of12/3-62-ofp_group_stats_reply.packet create mode 100644 tests/packet_data/of12/3-7-ofp_set_config.packet create mode 100644 tests/packet_data/of12/3-8-ofp_get_config_request.packet create mode 100644 tests/packet_data/of12/3-9-ofp_get_config_reply.packet create mode 100644 tests/packet_data/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet create mode 100644 tests/packet_data/of13/4-0-ofp_desc_reply.packet create mode 100644 tests/packet_data/of13/4-1-ofp_packet_out.packet create mode 100644 tests/packet_data/of13/4-10-ofp_hello.packet create mode 100644 tests/packet_data/of13/4-11-ofp_flow_stats_request.packet create mode 100644 tests/packet_data/of13/4-12-ofp_flow_stats_reply.packet create mode 100644 tests/packet_data/of13/4-13-ofp_echo_request.packet create mode 100644 tests/packet_data/of13/4-14-ofp_echo_reply.packet create mode 100644 tests/packet_data/of13/4-15-ofp_error_msg.packet create mode 100644 tests/packet_data/of13/4-16-ofp_experimenter.packet create mode 100644 tests/packet_data/of13/4-17-ofp_barrier_request.packet create mode 100644 tests/packet_data/of13/4-18-ofp_barrier_reply.packet create mode 100644 tests/packet_data/of13/4-19-ofp_role_request.packet create mode 100644 tests/packet_data/of13/4-2-ofp_flow_mod.packet create mode 100644 tests/packet_data/of13/4-20-ofp_role_reply.packet create mode 100644 tests/packet_data/of13/4-21-ofp_group_mod.packet create mode 100644 tests/packet_data/of13/4-22-ofp_port_mod.packet create mode 100644 tests/packet_data/of13/4-23-ofp_table_mod.packet create mode 100644 tests/packet_data/of13/4-24-ofp_desc_request.packet create mode 100644 tests/packet_data/of13/4-25-ofp_aggregate_stats_request.packet create mode 100644 tests/packet_data/of13/4-26-ofp_aggregate_stats_reply.packet create mode 100644 tests/packet_data/of13/4-27-ofp_table_stats_request.packet create mode 100644 tests/packet_data/of13/4-28-ofp_table_stats_reply.packet create mode 100644 tests/packet_data/of13/4-29-ofp_port_stats_request.packet create mode 100644 tests/packet_data/of13/4-3-ofp_flow_mod.packet create mode 100644 tests/packet_data/of13/4-30-ofp_port_stats_reply.packet create mode 100644 tests/packet_data/of13/4-31-ofp_group_features_request.packet create mode 100644 tests/packet_data/of13/4-32-ofp_group_features_reply.packet create mode 100644 tests/packet_data/of13/4-33-ofp_group_desc_request.packet create mode 100644 tests/packet_data/of13/4-34-ofp_group_desc_reply.packet create mode 100644 tests/packet_data/of13/4-35-ofp_queue_get_config_request.packet create mode 100644 tests/packet_data/of13/4-36-ofp_queue_get_config_reply.packet create mode 100644 tests/packet_data/of13/4-37-ofp_queue_stats_request.packet create mode 100644 tests/packet_data/of13/4-38-ofp_queue_stats_reply.packet create mode 100644 tests/packet_data/of13/4-39-ofp_port_status.packet create mode 100644 tests/packet_data/of13/4-4-ofp_packet_in.packet create mode 100644 tests/packet_data/of13/4-40-ofp_flow_removed.packet create mode 100644 tests/packet_data/of13/4-41-ofp_error_msg_experimenter.packet create mode 100644 tests/packet_data/of13/4-42-ofp_get_async_request.packet create mode 100644 tests/packet_data/of13/4-43-ofp_get_async_reply.packet create mode 100644 tests/packet_data/of13/4-44-ofp_set_async.packet create mode 100644 tests/packet_data/of13/4-45-ofp_meter_mod.packet create mode 100644 tests/packet_data/of13/4-46-ofp_flow_mod.packet create mode 100644 tests/packet_data/of13/4-47-ofp_meter_config_request.packet create mode 100644 tests/packet_data/of13/4-48-ofp_meter_config_reply.packet create mode 100644 tests/packet_data/of13/4-49-ofp_meter_stats_request.packet create mode 100644 tests/packet_data/of13/4-5-ofp_features_request.packet create mode 100644 tests/packet_data/of13/4-50-ofp_meter_stats_reply.packet create mode 100644 tests/packet_data/of13/4-51-ofp_meter_features_request.packet create mode 100644 tests/packet_data/of13/4-52-ofp_meter_features_reply.packet create mode 100644 tests/packet_data/of13/4-53-ofp_port_desc_request.packet create mode 100644 tests/packet_data/of13/4-54-ofp_port_desc_reply.packet create mode 100644 tests/packet_data/of13/4-55-ofp_table_features_request.packet create mode 100644 tests/packet_data/of13/4-56-ofp_table_features_reply.packet create mode 100644 tests/packet_data/of13/4-57-ofp_group_stats_request.packet create mode 100644 tests/packet_data/of13/4-58-ofp_group_stats_reply.packet create mode 100644 tests/packet_data/of13/4-59-ofp_packet_in.packet create mode 100644 tests/packet_data/of13/4-6-ofp_features_reply.packet create mode 100644 tests/packet_data/of13/4-60-ofp_flow_mod.packet create mode 100644 tests/packet_data/of13/4-61-ofp_experimenter_request.packet create mode 100644 tests/packet_data/of13/4-62-ofp_experimenter_reply.packet create mode 100644 tests/packet_data/of13/4-63-onf_flow_monitor_request.packet create mode 100644 tests/packet_data/of13/4-7-ofp_set_config.packet create mode 100644 tests/packet_data/of13/4-8-ofp_get_config_request.packet create mode 100644 tests/packet_data/of13/4-9-ofp_get_config_reply.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-echo_reply.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-echo_request.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-error_msg.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-features_reply.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-flow_mod.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-flow_mod.truncated64 create mode 100644 tests/packet_data/of13/libofproto-OFP13-flow_mod_conjunction.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-flow_mod_match_conj.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-flow_removed.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-get_config_reply.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-hello.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-meter_mod.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-packet_in.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-port_mod.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-port_status.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-set_config.packet create mode 100644 tests/packet_data/of13/libofproto-OFP13-table_mod.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_conjunction.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_controller.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_controller2.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_ct.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_ct_exec.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat_v6.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_fintimeout.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_learn.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_note.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_output_trunc.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_resubmit.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_sample.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_sample2.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_stack_pop.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-action_stack_push.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-match_conj.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-match_load_nx_register.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-match_move_nx_register.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark.packet create mode 100644 tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet create mode 100644 tests/packet_data/of14/5-0-ofp_desc_reply.packet create mode 100644 tests/packet_data/of14/5-1-ofp_packet_out.packet create mode 100644 tests/packet_data/of14/5-10-ofp_hello.packet create mode 100644 tests/packet_data/of14/5-11-ofp_flow_stats_request.packet create mode 100644 tests/packet_data/of14/5-12-ofp_flow_stats_reply.packet create mode 100644 tests/packet_data/of14/5-13-ofp_echo_request.packet create mode 100644 tests/packet_data/of14/5-14-ofp_echo_reply.packet create mode 100644 tests/packet_data/of14/5-15-ofp_error_msg.packet create mode 100644 tests/packet_data/of14/5-16-ofp_experimenter.packet create mode 100644 tests/packet_data/of14/5-17-ofp_barrier_request.packet create mode 100644 tests/packet_data/of14/5-18-ofp_barrier_reply.packet create mode 100644 tests/packet_data/of14/5-19-ofp_role_request.packet create mode 100644 tests/packet_data/of14/5-2-ofp_flow_mod.packet create mode 100644 tests/packet_data/of14/5-20-ofp_role_reply.packet create mode 100644 tests/packet_data/of14/5-21-ofp_group_mod.packet create mode 100644 tests/packet_data/of14/5-22-ofp_port_mod.packet create mode 100644 tests/packet_data/of14/5-23-ofp_table_mod.packet create mode 100644 tests/packet_data/of14/5-24-ofp_desc_request.packet create mode 100644 tests/packet_data/of14/5-25-ofp_aggregate_stats_request.packet create mode 100644 tests/packet_data/of14/5-26-ofp_aggregate_stats_reply.packet create mode 100644 tests/packet_data/of14/5-27-ofp_table_stats_request.packet create mode 100644 tests/packet_data/of14/5-28-ofp_table_stats_reply.packet create mode 100644 tests/packet_data/of14/5-29-ofp_port_stats_request.packet create mode 100644 tests/packet_data/of14/5-3-ofp_flow_mod.packet create mode 100644 tests/packet_data/of14/5-30-ofp_port_stats_reply.packet create mode 100644 tests/packet_data/of14/5-31-ofp_group_features_request.packet create mode 100644 tests/packet_data/of14/5-32-ofp_group_features_reply.packet create mode 100644 tests/packet_data/of14/5-33-ofp_group_desc_request.packet create mode 100644 tests/packet_data/of14/5-34-ofp_group_desc_reply.packet create mode 100644 tests/packet_data/of14/5-35-ofp_queue_stats_request.packet create mode 100644 tests/packet_data/of14/5-36-ofp_queue_stats_reply.packet create mode 100644 tests/packet_data/of14/5-37-ofp_port_status.packet create mode 100644 tests/packet_data/of14/5-38-ofp_flow_removed.packet create mode 100644 tests/packet_data/of14/5-39-ofp_error_msg_experimenter.packet create mode 100644 tests/packet_data/of14/5-4-ofp_packet_in.packet create mode 100644 tests/packet_data/of14/5-40-ofp_get_async_request.packet create mode 100644 tests/packet_data/of14/5-41-ofp_get_async_reply.packet create mode 100644 tests/packet_data/of14/5-42-ofp_set_async.packet create mode 100644 tests/packet_data/of14/5-43-ofp_meter_mod.packet create mode 100644 tests/packet_data/of14/5-44-ofp_flow_mod.packet create mode 100644 tests/packet_data/of14/5-45-ofp_meter_config_request.packet create mode 100644 tests/packet_data/of14/5-46-ofp_meter_config_reply.packet create mode 100644 tests/packet_data/of14/5-47-ofp_meter_stats_request.packet create mode 100644 tests/packet_data/of14/5-48-ofp_meter_stats_reply.packet create mode 100644 tests/packet_data/of14/5-49-ofp_meter_features_request.packet create mode 100644 tests/packet_data/of14/5-5-ofp_features_request.packet create mode 100644 tests/packet_data/of14/5-50-ofp_meter_features_reply.packet create mode 100644 tests/packet_data/of14/5-51-ofp_port_desc_request.packet create mode 100644 tests/packet_data/of14/5-52-ofp_port_desc_reply.packet create mode 100644 tests/packet_data/of14/5-53-ofp_table_features_request.packet create mode 100644 tests/packet_data/of14/5-54-ofp_table_features_reply.packet create mode 100644 tests/packet_data/of14/5-55-ofp_group_stats_request.packet create mode 100644 tests/packet_data/of14/5-56-ofp_group_stats_reply.packet create mode 100644 tests/packet_data/of14/5-57-ofp_packet_in.packet create mode 100644 tests/packet_data/of14/5-58-ofp_flow_mod.packet create mode 100644 tests/packet_data/of14/5-59-ofp_experimenter_request.packet create mode 100644 tests/packet_data/of14/5-6-ofp_features_reply.packet create mode 100644 tests/packet_data/of14/5-60-ofp_experimenter_reply.packet create mode 100644 tests/packet_data/of14/5-61-ofp_table_desc_request.packet create mode 100644 tests/packet_data/of14/5-62-ofp_table_desc_reply.packet create mode 100644 tests/packet_data/of14/5-63-ofp_queue_desc_request.packet create mode 100644 tests/packet_data/of14/5-64-ofp_queue_desc_reply.packet create mode 100644 tests/packet_data/of14/5-65-ofp_role_status.packet create mode 100644 tests/packet_data/of14/5-66-ofp_flow_monitor_request.packet create mode 100644 tests/packet_data/of14/5-67-ofp_flow_monitor_reply.packet create mode 100644 tests/packet_data/of14/5-68-ofp_table_status.packet create mode 100644 tests/packet_data/of14/5-69-ofp_bundle_ctrl_msg.packet create mode 100644 tests/packet_data/of14/5-7-ofp_set_config.packet create mode 100644 tests/packet_data/of14/5-70-ofp_bundle_add_msg.packet create mode 100644 tests/packet_data/of14/5-71-ofp_requestforward.packet create mode 100644 tests/packet_data/of14/5-8-ofp_get_config_request.packet create mode 100644 tests/packet_data/of14/5-9-ofp_get_config_reply.packet create mode 100644 tests/packet_data/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-aggregate_stats_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-aggregate_stats_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-barrier_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-barrier_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-bundle_add.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-bundle_ctrl.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-bundle_features_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-bundle_features_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-controller_status.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-controller_status_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-controller_status_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-desc_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-desc_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-echo_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-echo_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-error_msg.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-error_msg_experimenter.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-experimenter.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-experimenter_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-experimenter_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-features_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-features_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-flow_desc_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-flow_desc_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-flow_mod.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-flow_mod_conjunction.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-flow_mod_match_conj.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-flow_monitor_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-flow_monitor_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-flow_removed.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-flow_stats_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-flow_stats_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-get_async_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-get_async_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-get_config_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-get_config_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-group_desc_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-group_desc_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-group_features_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-group_features_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-group_mod.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-group_stats_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-group_stats_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-hello.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-meter_desc_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-meter_desc_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-meter_features_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-meter_features_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-meter_mod.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-meter_stats_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-meter_stats_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-packet_in.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-packet_out.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-port_desc_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-port_desc_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-port_mod.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-port_stats_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-port_stats_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-port_status.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-queue_desc_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-queue_desc_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-queue_stats_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-queue_stats_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-requestforward.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-role_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-role_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-role_status.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-set_async.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-set_config.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-table_desc_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-table_desc_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-table_features_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-table_features_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-table_mod.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-table_stats_reply.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-table_stats_request.packet create mode 100644 tests/packet_data/of15/libofproto-OFP15-table_status.packet create mode 100644 tests/packet_data/pcap/big_endian.pcap create mode 100644 tests/packet_data/pcap/geneve_unknown.pcap create mode 100644 tests/packet_data/pcap/gre_full_options.pcap create mode 100644 tests/packet_data/pcap/gre_no_option.pcap create mode 100644 tests/packet_data/pcap/gre_nvgre_option.pcap create mode 100644 tests/packet_data/pcap/little_endian.pcap create mode 100644 tests/packet_data/pcap/openflow_flowmod.pcap create mode 100644 tests/packet_data/pcap/openflow_flowstats_req.pcap create mode 100644 tests/packet_data/pcap/openflow_invalid_version.pcap create mode 100644 tests/packet_data/pcap/zebra_v2.pcap create mode 100644 tests/packet_data/pcap/zebra_v3.pcap create mode 100644 tests/packet_data_generator/Makefile create mode 100644 tests/packet_data_generator/rebar.config create mode 100644 tests/packet_data_generator/src/er.app.src create mode 100644 tests/packet_data_generator/src/x.erl create mode 100644 tests/packet_data_generator/src/x1.erl create mode 100644 tests/packet_data_generator/src/x3.erl create mode 100644 tests/packet_data_generator/src/x4.erl create mode 100644 tests/packet_data_generator/src/x5.erl create mode 100644 tests/packet_data_generator/src/x_flower_packet.erl create mode 100644 tests/packet_data_generator/src/x_of_protocol.erl create mode 100644 tests/packet_data_generator2/Makefile.BSD create mode 100644 tests/packet_data_generator2/Makefile.GNU create mode 100644 tests/packet_data_generator2/README create mode 100644 tests/packet_data_generator2/gen.c create mode 100644 tests/packet_data_generator3/gen.py create mode 100755 tests/run_tests.py create mode 100644 tests/test_lib.py create mode 100644 tests/unit/__init__.py create mode 100644 tests/unit/app/__init__.py create mode 100644 tests/unit/app/ofctl_rest_json/of10.json create mode 100644 tests/unit/app/ofctl_rest_json/of12.json create mode 100644 tests/unit/app/ofctl_rest_json/of13.json create mode 100644 tests/unit/app/ofctl_rest_json/of14.json create mode 100644 tests/unit/app/ofctl_rest_json/of15.json create mode 100644 tests/unit/app/test_ofctl_rest.py create mode 100644 tests/unit/app/test_tester.py create mode 100644 tests/unit/app/test_ws_topology.py create mode 100644 tests/unit/app/test_wsgi.py create mode 100644 tests/unit/cmd/__init__.py create mode 100644 tests/unit/cmd/dummy_app.py create mode 100644 tests/unit/cmd/dummy_openflow_app.py create mode 100644 tests/unit/cmd/test_manager.py create mode 100644 tests/unit/controller/__init__.py create mode 100644 tests/unit/controller/test_controller.py create mode 100644 tests/unit/lib/__init__.py create mode 100644 tests/unit/lib/ofctl_json/of10/1-2-ofp_flow_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-0-ofp_desc_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-11-ofp_flow_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-12-ofp_flow_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-16-ofp_experimenter.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-2-ofp_flow_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-21-ofp_group_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-22-ofp_port_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-25-ofp_aggregate_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-26-ofp_aggregate_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-28-ofp_table_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-30-ofp_port_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-32-ofp_group_features_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-34-ofp_group_desc_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-35-ofp_queue_get_config_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-36-ofp_queue_get_config_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-38-ofp_queue_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-6-ofp_features_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/3-62-ofp_group_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_group_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_port_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json create mode 100644 tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json create mode 100644 tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-0-ofp_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-11-ofp_flow_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-12-ofp_flow_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-16-ofp_experimenter.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-2-ofp_flow_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-21-ofp_group_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-22-ofp_port_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-25-ofp_aggregate_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-26-ofp_aggregate_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-28-ofp_table_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-30-ofp_port_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-32-ofp_group_features_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-34-ofp_group_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-35-ofp_queue_get_config_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-36-ofp_queue_get_config_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-38-ofp_queue_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-45-ofp_meter_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-48-ofp_meter_config_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-50-ofp_meter_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-52-ofp_meter_features_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-54-ofp_port_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-56-ofp_table_features_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/4-58-ofp_group_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_group_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_config_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_port_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json create mode 100644 tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json create mode 100644 tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-0-ofp_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-11-ofp_flow_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-12-ofp_flow_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-16-ofp_experimenter.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-2-ofp_flow_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-21-ofp_group_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-22-ofp_port_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-25-ofp_aggregate_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-26-ofp_aggregate_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-28-ofp_table_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-30-ofp_port_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-32-ofp_group_features_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-34-ofp_group_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-36-ofp_queue_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-43-ofp_meter_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-46-ofp_meter_config_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-48-ofp_meter_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-50-ofp_meter_features_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-52-ofp_port_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-54-ofp_table_features_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-56-ofp_group_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-63-ofp_queue_desc_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of14/5-64-ofp_queue_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-experimenter.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_features_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_features_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_mod.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_request.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_stats_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_features_reply.packet.json create mode 100644 tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_stats_reply.packet.json create mode 100644 tests/unit/lib/ovs/__init__.py create mode 100644 tests/unit/lib/ovs/test_vsctl.py create mode 100644 tests/unit/lib/test_addrconv.py create mode 100644 tests/unit/lib/test_hub.py create mode 100644 tests/unit/lib/test_import_module.py create mode 100644 tests/unit/lib/test_ip.py create mode 100644 tests/unit/lib/test_mac.py create mode 100644 tests/unit/lib/test_mod/__init__.py create mode 100644 tests/unit/lib/test_mod/aaa/__init__.py create mode 100644 tests/unit/lib/test_mod/aaa/mod.py create mode 100644 tests/unit/lib/test_mod/bbb/__init__.py create mode 100644 tests/unit/lib/test_mod/bbb/mod.py create mode 100644 tests/unit/lib/test_mod/ccc/__init__.py create mode 100644 tests/unit/lib/test_mod/ccc/mod.py create mode 100644 tests/unit/lib/test_mod/ddd/__init__.py create mode 100644 tests/unit/lib/test_mod/ddd/mod.py create mode 100644 tests/unit/lib/test_mod/eee.py create mode 100644 tests/unit/lib/test_mod/fff.py create mode 100644 tests/unit/lib/test_mod/ggg.py create mode 100644 tests/unit/lib/test_mrtlib.py create mode 100644 tests/unit/lib/test_of_config_classes.py create mode 100644 tests/unit/lib/test_ofctl.py create mode 100644 tests/unit/lib/test_ofctl_action_match.py create mode 100644 tests/unit/lib/test_ofctl_string.py create mode 100644 tests/unit/lib/test_ofctl_utils.py create mode 100644 tests/unit/lib/test_ofctl_v1_3.py create mode 100644 tests/unit/lib/test_ofp_pktinfilter.py create mode 100644 tests/unit/lib/test_pack_utils.py create mode 100644 tests/unit/lib/test_pcaplib.py create mode 100644 tests/unit/lib/test_rpc.py create mode 100644 tests/unit/lib/test_stringify.py create mode 100644 tests/unit/ofproto/__init__.py create mode 100644 tests/unit/ofproto/json/of10/1-1-ofp_packet_out.packet.json create mode 100644 tests/unit/ofproto/json/of10/1-2-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of10/1-4-ofp_packet_in.packet.json create mode 100644 tests/unit/ofproto/json/of10/1-5-features_request.packet.json create mode 100644 tests/unit/ofproto/json/of10/1-6-ofp_switch_features.packet.json create mode 100644 tests/unit/ofproto/json/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet.json create mode 100644 tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet.json create mode 100644 tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet.json create mode 100644 tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_pop_mpls.packet.json create mode 100644 tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_push_mpls.packet.json create mode 100644 tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_label.packet.json create mode 100644 tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_tc.packet.json create mode 100644 tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-0-ofp_desc_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-1-ofp_packet_out.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-10-ofp_hello.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-11-ofp_flow_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-12-ofp_flow_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-13-ofp_echo_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-14-ofp_echo_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-15-ofp_error_msg.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-16-ofp_experimenter.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-17-ofp_barrier_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-18-ofp_barrier_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-19-ofp_role_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-2-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-20-ofp_role_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-21-ofp_group_mod.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-22-ofp_port_mod.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-23-ofp_table_mod.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-24-ofp_desc_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-25-ofp_aggregate_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-26-ofp_aggregate_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-27-ofp_table_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-28-ofp_table_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-29-ofp_port_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-3-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-30-ofp_port_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-31-ofp_group_features_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-32-ofp_group_features_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-33-ofp_group_desc_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-34-ofp_group_desc_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-35-ofp_queue_get_config_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-36-ofp_queue_get_config_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-37-ofp_queue_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-38-ofp_queue_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-39-ofp_port_status.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-4-ofp_packet_in.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-40-ofp_flow_removed.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-41-ofp_error_msg_experimenter.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-5-ofp_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-59-ofp_packet_in.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-6-ofp_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-60-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-61-ofp_group_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-62-ofp_group_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-7-ofp_set_config.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-8-ofp_get_config_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/3-9-ofp_get_config_reply.packet.json create mode 100644 tests/unit/ofproto/json/of12/lib-ofctl-ofp_group_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/lib-ofctl-ofp_port_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json create mode 100644 tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json create mode 100644 tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json create mode 100644 tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json create mode 100644 tests/unit/ofproto/json/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-0-ofp_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-1-ofp_packet_out.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-10-ofp_hello.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-11-ofp_flow_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-12-ofp_flow_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-13-ofp_echo_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-14-ofp_echo_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-15-ofp_error_msg.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-16-ofp_experimenter.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-17-ofp_barrier_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-18-ofp_barrier_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-19-ofp_role_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-2-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-20-ofp_role_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-21-ofp_group_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-22-ofp_port_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-23-ofp_table_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-24-ofp_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-25-ofp_aggregate_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-26-ofp_aggregate_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-27-ofp_table_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-28-ofp_table_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-29-ofp_port_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-3-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-30-ofp_port_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-31-ofp_group_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-32-ofp_group_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-33-ofp_group_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-34-ofp_group_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-35-ofp_queue_get_config_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-36-ofp_queue_get_config_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-37-ofp_queue_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-38-ofp_queue_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-39-ofp_port_status.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-4-ofp_packet_in.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-40-ofp_flow_removed.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-41-ofp_error_msg_experimenter.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-42-ofp_get_async_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-43-ofp_get_async_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-44-ofp_set_async.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-45-ofp_meter_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-46-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-47-ofp_meter_config_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-48-ofp_meter_config_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-49-ofp_meter_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-5-ofp_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-50-ofp_meter_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-51-ofp_meter_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-52-ofp_meter_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-53-ofp_port_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-54-ofp_port_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-55-ofp_table_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-57-ofp_group_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-58-ofp_group_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-59-ofp_packet_in.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-6-ofp_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-60-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-61-ofp_experimenter_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-62-ofp_experimenter_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-63-onf_flow_monitor_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-7-ofp_set_config.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-8-ofp_get_config_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/4-9-ofp_get_config_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/lib-ofctl-ofp_group_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_config_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/lib-ofctl-ofp_port_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json create mode 100644 tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json create mode 100644 tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json create mode 100644 tests/unit/ofproto/json/of13/lib-ofctl-ofp_table_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-echo_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-echo_request.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-error_msg.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.truncated64.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_conjunction.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_match_conj.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-flow_removed.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-get_config_reply.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-hello.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-meter_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-packet_in.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-port_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-port_status.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-set_config.packet.json create mode 100644 tests/unit/ofproto/json/of13/libofproto-OFP13-table_mod.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_conjunction.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller2.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_fintimeout.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_learn.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_note.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_output_trunc.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_resubmit.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample2.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_pop.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_push.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_conj.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_move_nx_register.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark.packet.json create mode 100644 tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-0-ofp_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-1-ofp_packet_out.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-10-ofp_hello.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-11-ofp_flow_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-13-ofp_echo_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-14-ofp_echo_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-15-ofp_error_msg.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-16-ofp_experimenter.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-17-ofp_barrier_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-18-ofp_barrier_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-19-ofp_role_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-20-ofp_role_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-21-ofp_group_mod.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-22-ofp_port_mod.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-23-ofp_table_mod.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-24-ofp_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-25-ofp_aggregate_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-26-ofp_aggregate_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-27-ofp_table_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-28-ofp_table_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-29-ofp_port_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-3-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-30-ofp_port_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-31-ofp_group_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-32-ofp_group_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-33-ofp_group_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-34-ofp_group_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-35-ofp_queue_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-36-ofp_queue_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-37-ofp_port_status.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-38-ofp_flow_removed.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-39-ofp_error_msg_experimenter.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-4-ofp_packet_in.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-40-ofp_get_async_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-41-ofp_get_async_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-42-ofp_set_async.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-43-ofp_meter_mod.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-44-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-45-ofp_meter_config_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-46-ofp_meter_config_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-47-ofp_meter_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-48-ofp_meter_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-49-ofp_meter_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-5-ofp_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-50-ofp_meter_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-51-ofp_port_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-52-ofp_port_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-53-ofp_table_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-54-ofp_table_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-55-ofp_group_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-56-ofp_group_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-57-ofp_packet_in.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-58-ofp_flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-59-ofp_experimenter_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-6-ofp_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-60-ofp_experimenter_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-61-ofp_table_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-62-ofp_table_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-63-ofp_queue_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-64-ofp_queue_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-65-ofp_role_status.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-66-ofp_flow_monitor_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-67-ofp_flow_monitor_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-68-ofp_table_status.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-69-ofp_bundle_ctrl_msg.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-7-ofp_set_config.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-70-ofp_bundle_add_msg.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-71-ofp_requestforward.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-8-ofp_get_config_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/5-9-ofp_get_config_reply.packet.json create mode 100644 tests/unit/ofproto/json/of14/lib-ofctl-ofp_table_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet.json create mode 100644 tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of15/lib-ofctl-ofp_queue_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/lib-ofctl-ofp_table_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_add.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_ctrl.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_conjunction.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_match_conj.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-flow_removed.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-group_mod.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-packet_in.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-packet_out.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-role_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-role_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json create mode 100644 tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json create mode 100644 tests/unit/ofproto/test_ether.py create mode 100644 tests/unit/ofproto/test_inet.py create mode 100644 tests/unit/ofproto/test_nx_flow_spec.py create mode 100644 tests/unit/ofproto/test_ofproto.py create mode 100644 tests/unit/ofproto/test_ofproto_common.py create mode 100644 tests/unit/ofproto/test_ofproto_parser.py create mode 100644 tests/unit/ofproto/test_ofproto_v12.py create mode 100644 tests/unit/ofproto/test_oxm.py create mode 100644 tests/unit/ofproto/test_oxs.py create mode 100644 tests/unit/ofproto/test_parser.py create mode 100644 tests/unit/ofproto/test_parser_compat.py create mode 100644 tests/unit/ofproto/test_parser_ofpmatch.py create mode 100644 tests/unit/ofproto/test_parser_ofpstats.py create mode 100644 tests/unit/ofproto/test_parser_v10.py create mode 100644 tests/unit/ofproto/test_parser_v12.py create mode 100644 tests/unit/ofproto/test_parser_v13.py create mode 100644 tests/unit/packet/__init__.py create mode 100644 tests/unit/packet/test_arp.py create mode 100644 tests/unit/packet/test_bfd.py create mode 100644 tests/unit/packet/test_bgp.py create mode 100644 tests/unit/packet/test_bmp.py create mode 100644 tests/unit/packet/test_bpdu.py create mode 100644 tests/unit/packet/test_cfm.py create mode 100644 tests/unit/packet/test_dhcp.py create mode 100644 tests/unit/packet/test_ethernet.py create mode 100644 tests/unit/packet/test_geneve.py create mode 100644 tests/unit/packet/test_gre.py create mode 100644 tests/unit/packet/test_icmp.py create mode 100644 tests/unit/packet/test_icmpv6.py create mode 100644 tests/unit/packet/test_igmp.py create mode 100644 tests/unit/packet/test_ipv4.py create mode 100644 tests/unit/packet/test_ipv6.py create mode 100644 tests/unit/packet/test_llc.py create mode 100644 tests/unit/packet/test_lldp.py create mode 100644 tests/unit/packet/test_mpls.py create mode 100644 tests/unit/packet/test_openflow.py create mode 100644 tests/unit/packet/test_ospf.py create mode 100644 tests/unit/packet/test_packet.py create mode 100644 tests/unit/packet/test_pbb.py create mode 100644 tests/unit/packet/test_sctp.py create mode 100644 tests/unit/packet/test_slow.py create mode 100644 tests/unit/packet/test_tcp.py create mode 100644 tests/unit/packet/test_udp.py create mode 100644 tests/unit/packet/test_vlan.py create mode 100644 tests/unit/packet/test_vrrp.py create mode 100644 tests/unit/packet/test_vxlan.py create mode 100644 tests/unit/packet/test_zebra.py create mode 100644 tests/unit/sample/__init__.py create mode 100644 tests/unit/sample/test_sample1.py create mode 100644 tests/unit/sample/test_sample2.py create mode 100644 tests/unit/services/__init__.py create mode 100644 tests/unit/services/protocols/__init__.py create mode 100644 tests/unit/services/protocols/bgp/__init__.py create mode 100644 tests/unit/services/protocols/bgp/core_managers/__init__.py create mode 100644 tests/unit/services/protocols/bgp/core_managers/test_table_manager.py create mode 100644 tests/unit/services/protocols/bgp/test_bgpspeaker.py create mode 100644 tests/unit/services/protocols/bgp/test_peer.py create mode 100644 tests/unit/services/protocols/bgp/utils/__init__.py create mode 100644 tests/unit/services/protocols/bgp/utils/test_bgp.py create mode 100644 tests/unit/services/protocols/bgp/utils/test_validation.py create mode 100644 tests/unit/test_requirements.py create mode 100644 tests/unit/test_utils.py diff --git a/.travis.yml b/.travis.yml index 9e5474a1..7f35ff23 100644 --- a/.travis.yml +++ b/.travis.yml @@ -16,7 +16,7 @@ sudo: required # Required to enable Docker service install: - pip install tox coveralls - - bash ryu/tests/integrated/common/install_docker_test_pkg_for_travis.sh + - bash tests/integrated/common/install_docker_test_pkg_for_travis.sh script: - NOSE_VERBOSE=0 tox -e $TOX_ENV diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index 8e4945d3..8d80de20 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -87,7 +87,7 @@ Coding style guide * JSON files: - Ryu source tree has JSON files under ryu/tests/unit/ofproto/json. + Ryu source tree has JSON files under tests/unit/ofproto/json. They are used by unit tests. To make patches easier to read, they are normalized using tools/normalize_json.py. Please re-run the script before committing changes to these JSON files. diff --git a/MANIFEST.in b/MANIFEST.in index 990c333f..d782ce6a 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -6,8 +6,7 @@ graft doc graft etc graft tools recursive-exclude doc/build * -recursive-exclude ryu/tests/packet_data_generator * -recursive-exclude ryu/tests/packet_data_generator2 * +recursive-exclude tests/* global-exclude *~ global-exclude *.pyc global-exclude .gitignore diff --git a/doc/source/ofproto_v1_0_ref.rst b/doc/source/ofproto_v1_0_ref.rst index 91ed2a45..8d8f0898 100644 --- a/doc/source/ofproto_v1_0_ref.rst +++ b/doc/source/ofproto_v1_0_ref.rst @@ -14,13 +14,13 @@ Handshake JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-5-features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-5-features_request.packet.json .. autoclass:: OFPSwitchFeatures JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-6-ofp_switch_features.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-6-ofp_switch_features.packet.json Switch Configuration -------------------- @@ -29,19 +29,19 @@ Switch Configuration .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-7-ofp_set_config.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-7-ofp_set_config.packet.json .. autoclass:: OFPGetConfigRequest .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-8-ofp_get_config_request.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-8-ofp_get_config_request.packet.json .. autoclass:: OFPGetConfigReply .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-9-ofp_get_config_reply.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-9-ofp_get_config_reply.packet.json Modify State Messages --------------------- @@ -50,14 +50,14 @@ Modify State Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-2-ofp_flow_mod.packet.json -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-3-ofp_flow_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-2-ofp_flow_mod.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-3-ofp_flow_mod.packet.json .. autoclass:: OFPPortMod .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-22-ofp_port_mod.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-22-ofp_port_mod.packet.json Queue Configuration Messages ---------------------------- @@ -66,13 +66,13 @@ Queue Configuration Messages .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-35-ofp_queue_get_config_request.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-35-ofp_queue_get_config_request.packet.json .. autoclass:: OFPQueueGetConfigReply .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-36-ofp_queue_get_config_reply.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-36-ofp_queue_get_config_reply.packet.json Read State Messages ------------------- @@ -81,74 +81,74 @@ Read State Messages .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-24-ofp_desc_stats_request.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-24-ofp_desc_stats_request.packet.json .. autoclass:: OFPDescStatsReply .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-0-ofp_desc_stats_reply.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-0-ofp_desc_stats_reply.packet.json .. autoclass:: OFPFlowStatsRequest .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-11-ofp_flow_stats_request.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-11-ofp_flow_stats_request.packet.json .. autoclass:: OFPFlowStatsReply .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-12-ofp_flow_stats_reply.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-12-ofp_flow_stats_reply.packet.json .. autoclass:: OFPAggregateStatsRequest .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-25-ofp_aggregate_stats_request.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-25-ofp_aggregate_stats_request.packet.json .. autoclass:: OFPAggregateStatsReply .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-26-ofp_aggregate_stats_reply.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-26-ofp_aggregate_stats_reply.packet.json .. autoclass:: OFPTableStatsRequest .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-27-ofp_table_stats_request.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-27-ofp_table_stats_request.packet.json .. autoclass:: OFPTableStatsReply .. XXX commented out because it's too long .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-28-ofp_table_stats_reply.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-28-ofp_table_stats_reply.packet.json .. autoclass:: OFPPortStatsRequest .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-29-ofp_port_stats_request.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-29-ofp_port_stats_request.packet.json .. autoclass:: OFPPortStatsReply .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-30-ofp_port_stats_reply.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-30-ofp_port_stats_reply.packet.json .. autoclass:: OFPQueueStatsRequest .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-37-ofp_queue_stats_request.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-37-ofp_queue_stats_request.packet.json .. autoclass:: OFPQueueStatsReply .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-38-ofp_queue_stats_reply.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-38-ofp_queue_stats_reply.packet.json .. autoclass:: OFPVendorStatsRequest .. autoclass:: OFPVendorStatsReply @@ -160,7 +160,7 @@ Send Packet Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-1-ofp_packet_out.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-1-ofp_packet_out.packet.json Barrier Message --------------- @@ -169,13 +169,13 @@ Barrier Message .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-17-ofp_barrier_request.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-17-ofp_barrier_request.packet.json .. autoclass:: OFPBarrierReply .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-18-ofp_barrier_reply.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-18-ofp_barrier_reply.packet.json Asynchronous Messages @@ -188,7 +188,7 @@ Packet-In Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-4-ofp_packet_in.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-4-ofp_packet_in.packet.json Flow Removed Message -------------------- @@ -197,7 +197,7 @@ Flow Removed Message .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-40-ofp_flow_removed.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-40-ofp_flow_removed.packet.json Port Status Message ------------------- @@ -206,7 +206,7 @@ Port Status Message .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-39-ofp_port_status.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-39-ofp_port_status.packet.json Error Message ------------- @@ -215,8 +215,8 @@ Error Message .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-15-ofp_error_msg.packet.json -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-41-ofp_error_msg_vendor.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-15-ofp_error_msg.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-41-ofp_error_msg_vendor.packet.json Symmetric Messages ================== @@ -228,7 +228,7 @@ Hello .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-10-ofp_hello.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-10-ofp_hello.packet.json Echo Request ------------ @@ -237,7 +237,7 @@ Echo Request .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-13-ofp_echo_request.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-13-ofp_echo_request.packet.json Echo Reply @@ -247,7 +247,7 @@ Echo Reply .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-14-ofp_echo_reply.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-14-ofp_echo_reply.packet.json Vendor @@ -257,7 +257,7 @@ Vendor .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of10/1-16-ofp_vendor.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of10/1-16-ofp_vendor.packet.json Port Structures =============== diff --git a/doc/source/ofproto_v1_2_ref.rst b/doc/source/ofproto_v1_2_ref.rst index 525cdcc9..f592ae6f 100644 --- a/doc/source/ofproto_v1_2_ref.rst +++ b/doc/source/ofproto_v1_2_ref.rst @@ -14,13 +14,13 @@ Handshake JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-5-ofp_features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-5-ofp_features_request.packet.json .. autoclass:: OFPSwitchFeatures JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-6-ofp_features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-6-ofp_features_reply.packet.json Switch Configuration -------------------- @@ -29,19 +29,19 @@ Switch Configuration JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-7-ofp_set_config.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-7-ofp_set_config.packet.json .. autoclass:: OFPGetConfigRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-8-ofp_get_config_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-8-ofp_get_config_request.packet.json .. autoclass:: OFPGetConfigReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-9-ofp_get_config_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-9-ofp_get_config_reply.packet.json Flow Table Configuration ------------------------ @@ -50,7 +50,7 @@ Flow Table Configuration JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-23-ofp_table_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-23-ofp_table_mod.packet.json Modify State Messages --------------------- @@ -59,20 +59,20 @@ Modify State Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-2-ofp_flow_mod.packet.json - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-3-ofp_flow_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-2-ofp_flow_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-3-ofp_flow_mod.packet.json .. autoclass:: OFPGroupMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-21-ofp_group_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-21-ofp_group_mod.packet.json .. autoclass:: OFPPortMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-22-ofp_port_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-22-ofp_port_mod.packet.json Read State Messages ------------------- @@ -81,74 +81,74 @@ Read State Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-24-ofp_desc_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-24-ofp_desc_stats_request.packet.json .. autoclass:: OFPDescStats JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-0-ofp_desc_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-0-ofp_desc_stats_reply.packet.json .. autoclass:: OFPFlowStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-11-ofp_flow_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-11-ofp_flow_stats_request.packet.json .. autoclass:: OFPFlowStats JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-12-ofp_flow_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-12-ofp_flow_stats_reply.packet.json .. autoclass:: OFPAggregateStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-25-ofp_aggregate_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-25-ofp_aggregate_stats_request.packet.json .. autoclass:: OFPAggregateStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-26-ofp_aggregate_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-26-ofp_aggregate_stats_reply.packet.json .. autoclass:: OFPTableStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-27-ofp_table_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-27-ofp_table_stats_request.packet.json .. autoclass:: OFPTableStats .. XXX commented out because it's too long .. JSON Example: .. -.. .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-28-ofp_table_stats_reply.packet.json +.. .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-28-ofp_table_stats_reply.packet.json .. autoclass:: OFPPortStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-29-ofp_port_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-29-ofp_port_stats_request.packet.json .. autoclass:: OFPPortStats JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-30-ofp_port_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-30-ofp_port_stats_reply.packet.json .. autoclass:: OFPQueueStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-37-ofp_queue_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-37-ofp_queue_stats_request.packet.json .. autoclass:: OFPQueueStats JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-38-ofp_queue_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-38-ofp_queue_stats_reply.packet.json .. autoclass:: OFPGroupStatsRequest .. autoclass:: OFPGroupStats @@ -156,25 +156,25 @@ Read State Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-33-ofp_group_desc_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-33-ofp_group_desc_stats_request.packet.json .. autoclass:: OFPGroupDescStats JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-34-ofp_group_desc_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-34-ofp_group_desc_stats_reply.packet.json .. autoclass:: OFPGroupFeaturesStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-31-ofp_group_features_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-31-ofp_group_features_stats_request.packet.json .. autoclass:: OFPGroupFeaturesStats JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-32-ofp_group_features_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-32-ofp_group_features_stats_reply.packet.json Queue Configuration Messages ---------------------------- @@ -183,13 +183,13 @@ Queue Configuration Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-35-ofp_queue_get_config_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-35-ofp_queue_get_config_request.packet.json .. autoclass:: OFPQueueGetConfigReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-36-ofp_queue_get_config_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-36-ofp_queue_get_config_reply.packet.json Packet-Out Message ------------------ @@ -198,7 +198,7 @@ Packet-Out Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-1-ofp_packet_out.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-1-ofp_packet_out.packet.json Barrier Message --------------- @@ -207,13 +207,13 @@ Barrier Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-17-ofp_barrier_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-17-ofp_barrier_request.packet.json .. autoclass:: OFPBarrierReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-18-ofp_barrier_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-18-ofp_barrier_reply.packet.json Role Request Message -------------------- @@ -222,13 +222,13 @@ Role Request Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-19-ofp_role_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-19-ofp_role_request.packet.json .. autoclass:: OFPRoleReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-20-ofp_role_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-20-ofp_role_reply.packet.json Asynchronous Messages @@ -241,7 +241,7 @@ Packet-In Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-4-ofp_packet_in.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-4-ofp_packet_in.packet.json Flow Removed Message -------------------- @@ -250,7 +250,7 @@ Flow Removed Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-40-ofp_flow_removed.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-40-ofp_flow_removed.packet.json Port Status Message ------------------- @@ -259,7 +259,7 @@ Port Status Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-39-ofp_port_status.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-39-ofp_port_status.packet.json Error Message ------------- @@ -268,8 +268,8 @@ Error Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-15-ofp_error_msg.packet.json - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-41-ofp_error_msg_experimenter.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-15-ofp_error_msg.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-41-ofp_error_msg_experimenter.packet.json Symmetric Messages ================== @@ -281,7 +281,7 @@ Hello JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-10-ofp_hello.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-10-ofp_hello.packet.json Echo Request ------------ @@ -290,7 +290,7 @@ Echo Request JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-13-ofp_echo_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-13-ofp_echo_request.packet.json Echo Reply @@ -300,7 +300,7 @@ Echo Reply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-14-ofp_echo_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-14-ofp_echo_reply.packet.json Experimenter @@ -310,7 +310,7 @@ Experimenter JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of12/3-16-ofp_experimenter.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of12/3-16-ofp_experimenter.packet.json Port Structures =============== diff --git a/doc/source/ofproto_v1_3_ref.rst b/doc/source/ofproto_v1_3_ref.rst index e48bb485..f5c9d884 100644 --- a/doc/source/ofproto_v1_3_ref.rst +++ b/doc/source/ofproto_v1_3_ref.rst @@ -14,13 +14,13 @@ Handshake JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-5-ofp_features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-5-ofp_features_request.packet.json .. autoclass:: OFPSwitchFeatures JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-6-ofp_features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-6-ofp_features_reply.packet.json Switch Configuration -------------------- @@ -29,19 +29,19 @@ Switch Configuration JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-7-ofp_set_config.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-7-ofp_set_config.packet.json .. autoclass:: OFPGetConfigRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-8-ofp_get_config_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-8-ofp_get_config_request.packet.json .. autoclass:: OFPGetConfigReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-9-ofp_get_config_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-9-ofp_get_config_reply.packet.json Flow Table Configuration ------------------------ @@ -50,7 +50,7 @@ Flow Table Configuration JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-23-ofp_table_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-23-ofp_table_mod.packet.json Modify State Messages --------------------- @@ -59,27 +59,27 @@ Modify State Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-2-ofp_flow_mod.packet.json - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-3-ofp_flow_mod.packet.json - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-46-ofp_flow_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-2-ofp_flow_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-3-ofp_flow_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-46-ofp_flow_mod.packet.json .. autoclass:: OFPGroupMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-21-ofp_group_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-21-ofp_group_mod.packet.json .. autoclass:: OFPPortMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-22-ofp_port_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-22-ofp_port_mod.packet.json .. autoclass:: OFPMeterMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-45-ofp_meter_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-45-ofp_meter_mod.packet.json Multipart Messages ------------------ @@ -88,85 +88,85 @@ Multipart Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-24-ofp_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-24-ofp_desc_request.packet.json .. autoclass:: OFPDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-0-ofp_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-0-ofp_desc_reply.packet.json .. autoclass:: OFPFlowStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-11-ofp_flow_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-11-ofp_flow_stats_request.packet.json .. autoclass:: OFPFlowStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-12-ofp_flow_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-12-ofp_flow_stats_reply.packet.json .. autoclass:: OFPAggregateStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-25-ofp_aggregate_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-25-ofp_aggregate_stats_request.packet.json .. autoclass:: OFPAggregateStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-26-ofp_aggregate_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-26-ofp_aggregate_stats_reply.packet.json .. autoclass:: OFPTableStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-27-ofp_table_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-27-ofp_table_stats_request.packet.json .. autoclass:: OFPTableStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-28-ofp_table_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-28-ofp_table_stats_reply.packet.json .. autoclass:: OFPPortStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-29-ofp_port_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-29-ofp_port_stats_request.packet.json .. autoclass:: OFPPortStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-30-ofp_port_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-30-ofp_port_stats_reply.packet.json .. autoclass:: OFPPortDescStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-53-ofp_port_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-53-ofp_port_desc_request.packet.json .. autoclass:: OFPPortDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-54-ofp_port_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-54-ofp_port_desc_reply.packet.json .. autoclass:: OFPQueueStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-37-ofp_queue_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-37-ofp_queue_stats_request.packet.json .. autoclass:: OFPQueueStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-38-ofp_queue_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-38-ofp_queue_stats_reply.packet.json .. autoclass:: OFPGroupStatsRequest .. autoclass:: OFPGroupStatsReply @@ -174,61 +174,61 @@ Multipart Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-33-ofp_group_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-33-ofp_group_desc_request.packet.json .. autoclass:: OFPGroupDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-34-ofp_group_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-34-ofp_group_desc_reply.packet.json .. autoclass:: OFPGroupFeaturesStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-31-ofp_group_features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-31-ofp_group_features_request.packet.json .. autoclass:: OFPGroupFeaturesStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-32-ofp_group_features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-32-ofp_group_features_reply.packet.json .. autoclass:: OFPMeterStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-49-ofp_meter_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-49-ofp_meter_stats_request.packet.json .. autoclass:: OFPMeterStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-50-ofp_meter_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-50-ofp_meter_stats_reply.packet.json .. autoclass:: OFPMeterConfigStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-47-ofp_meter_config_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-47-ofp_meter_config_request.packet.json .. autoclass:: OFPMeterConfigStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-48-ofp_meter_config_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-48-ofp_meter_config_reply.packet.json .. autoclass:: OFPMeterFeaturesStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-51-ofp_meter_features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-51-ofp_meter_features_request.packet.json .. autoclass:: OFPMeterFeaturesStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-52-ofp_meter_features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-52-ofp_meter_features_reply.packet.json .. autoclass:: OFPTableFeaturesStatsRequest .. autoclass:: OFPTableFeaturesStatsReply @@ -237,7 +237,7 @@ Multipart Messages See an example in: - ``ryu/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json`` + ``tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json`` Queue Configuration Messages ---------------------------- @@ -246,13 +246,13 @@ Queue Configuration Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-35-ofp_queue_get_config_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-35-ofp_queue_get_config_request.packet.json .. autoclass:: OFPQueueGetConfigReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-36-ofp_queue_get_config_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-36-ofp_queue_get_config_reply.packet.json Packet-Out Message ------------------ @@ -261,7 +261,7 @@ Packet-Out Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-1-ofp_packet_out.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-1-ofp_packet_out.packet.json Barrier Message --------------- @@ -270,13 +270,13 @@ Barrier Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-17-ofp_barrier_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-17-ofp_barrier_request.packet.json .. autoclass:: OFPBarrierReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-18-ofp_barrier_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-18-ofp_barrier_reply.packet.json Role Request Message -------------------- @@ -285,13 +285,13 @@ Role Request Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-19-ofp_role_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-19-ofp_role_request.packet.json .. autoclass:: OFPRoleReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-20-ofp_role_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-20-ofp_role_reply.packet.json Set Asynchronous Configuration Message -------------------------------------- @@ -300,19 +300,19 @@ Set Asynchronous Configuration Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-44-ofp_set_async.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-44-ofp_set_async.packet.json .. autoclass:: OFPGetAsyncRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-42-ofp_get_async_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-42-ofp_get_async_request.packet.json .. autoclass:: OFPGetAsyncReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-43-ofp_get_async_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-43-ofp_get_async_reply.packet.json Asynchronous Messages @@ -325,7 +325,7 @@ Packet-In Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-4-ofp_packet_in.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-4-ofp_packet_in.packet.json Flow Removed Message -------------------- @@ -334,7 +334,7 @@ Flow Removed Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-40-ofp_flow_removed.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-40-ofp_flow_removed.packet.json Port Status Message ------------------- @@ -343,7 +343,7 @@ Port Status Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-39-ofp_port_status.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-39-ofp_port_status.packet.json Error Message ------------- @@ -352,7 +352,7 @@ Error Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-15-ofp_error_msg.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-15-ofp_error_msg.packet.json Symmetric Messages @@ -365,7 +365,7 @@ Hello JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-10-ofp_hello.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-10-ofp_hello.packet.json .. autoclass:: OFPHelloElemVersionBitmap @@ -376,7 +376,7 @@ Echo Request JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-13-ofp_echo_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-13-ofp_echo_request.packet.json Echo Reply ---------- @@ -385,7 +385,7 @@ Echo Reply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-14-ofp_echo_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-14-ofp_echo_reply.packet.json Experimenter ------------ @@ -394,7 +394,7 @@ Experimenter JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of13/4-16-ofp_experimenter.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of13/4-16-ofp_experimenter.packet.json Port Structures =============== diff --git a/doc/source/ofproto_v1_4_ref.rst b/doc/source/ofproto_v1_4_ref.rst index 8e84790e..4ab1dcd2 100644 --- a/doc/source/ofproto_v1_4_ref.rst +++ b/doc/source/ofproto_v1_4_ref.rst @@ -14,13 +14,13 @@ Handshake JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-5-ofp_features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-5-ofp_features_request.packet.json .. autoclass:: OFPSwitchFeatures JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-6-ofp_features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-6-ofp_features_reply.packet.json Switch Configuration -------------------- @@ -29,19 +29,19 @@ Switch Configuration JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-7-ofp_set_config.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-7-ofp_set_config.packet.json .. autoclass:: OFPGetConfigRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-8-ofp_get_config_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-8-ofp_get_config_request.packet.json .. autoclass:: OFPGetConfigReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-9-ofp_get_config_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-9-ofp_get_config_reply.packet.json Modify State Messages --------------------- @@ -50,34 +50,34 @@ Modify State Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-23-ofp_table_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-23-ofp_table_mod.packet.json .. autoclass:: OFPFlowMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-3-ofp_flow_mod.packet.json - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-44-ofp_flow_mod.packet.json - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-58-ofp_flow_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-3-ofp_flow_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-44-ofp_flow_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-58-ofp_flow_mod.packet.json .. autoclass:: OFPGroupMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-21-ofp_group_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-21-ofp_group_mod.packet.json .. autoclass:: OFPPortMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-22-ofp_port_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-22-ofp_port_mod.packet.json .. autoclass:: OFPMeterMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-43-ofp_meter_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-43-ofp_meter_mod.packet.json Multipart Messages ------------------ @@ -86,61 +86,61 @@ Multipart Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-24-ofp_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-24-ofp_desc_request.packet.json .. autoclass:: OFPDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-0-ofp_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-0-ofp_desc_reply.packet.json .. autoclass:: OFPFlowStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-11-ofp_flow_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-11-ofp_flow_stats_request.packet.json .. autoclass:: OFPFlowStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json .. autoclass:: OFPAggregateStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-25-ofp_aggregate_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-25-ofp_aggregate_stats_request.packet.json .. autoclass:: OFPAggregateStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-26-ofp_aggregate_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-26-ofp_aggregate_stats_reply.packet.json .. autoclass:: OFPTableStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-27-ofp_table_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-27-ofp_table_stats_request.packet.json .. autoclass:: OFPTableStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-28-ofp_table_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-28-ofp_table_stats_reply.packet.json .. autoclass:: OFPTableDescStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-61-ofp_table_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-61-ofp_table_desc_request.packet.json .. autoclass:: OFPTableDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-62-ofp_table_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-62-ofp_table_desc_reply.packet.json .. autoclass:: OFPTableFeaturesStatsRequest @@ -148,7 +148,7 @@ Multipart Messages See an example in: - ``ryu/tests/unit/ofproto/json/of14/5-53-ofp_table_features_request.packet.json`` + ``tests/unit/ofproto/json/of14/5-53-ofp_table_features_request.packet.json`` .. autoclass:: OFPTableFeaturesStatsReply @@ -156,151 +156,151 @@ Multipart Messages See an example in: - ``ryu/tests/unit/ofproto/json/of14/5-54-ofp_table_features_reply.packet.json`` + ``tests/unit/ofproto/json/of14/5-54-ofp_table_features_reply.packet.json`` .. autoclass:: OFPPortStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-29-ofp_port_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-29-ofp_port_stats_request.packet.json .. autoclass:: OFPPortStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-30-ofp_port_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-30-ofp_port_stats_reply.packet.json .. autoclass:: OFPPortDescStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-51-ofp_port_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-51-ofp_port_desc_request.packet.json .. autoclass:: OFPPortDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-52-ofp_port_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-52-ofp_port_desc_reply.packet.json .. autoclass:: OFPQueueStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-35-ofp_queue_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-35-ofp_queue_stats_request.packet.json .. autoclass:: OFPQueueStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-36-ofp_queue_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-36-ofp_queue_stats_reply.packet.json .. autoclass:: OFPQueueDescStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-63-ofp_queue_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-63-ofp_queue_desc_request.packet.json .. autoclass:: OFPQueueDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-64-ofp_queue_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-64-ofp_queue_desc_reply.packet.json .. autoclass:: OFPGroupStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-55-ofp_group_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-55-ofp_group_stats_request.packet.json .. autoclass:: OFPGroupStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-56-ofp_group_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-56-ofp_group_stats_reply.packet.json .. autoclass:: OFPGroupDescStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-33-ofp_group_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-33-ofp_group_desc_request.packet.json .. autoclass:: OFPGroupDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-34-ofp_group_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-34-ofp_group_desc_reply.packet.json .. autoclass:: OFPGroupFeaturesStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-31-ofp_group_features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-31-ofp_group_features_request.packet.json .. autoclass:: OFPGroupFeaturesStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-32-ofp_group_features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-32-ofp_group_features_reply.packet.json .. autoclass:: OFPMeterStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-47-ofp_meter_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-47-ofp_meter_stats_request.packet.json .. autoclass:: OFPMeterStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-48-ofp_meter_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-48-ofp_meter_stats_reply.packet.json .. autoclass:: OFPMeterConfigStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-45-ofp_meter_config_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-45-ofp_meter_config_request.packet.json .. autoclass:: OFPMeterConfigStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-46-ofp_meter_config_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-46-ofp_meter_config_reply.packet.json .. autoclass:: OFPMeterFeaturesStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-49-ofp_meter_features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-49-ofp_meter_features_request.packet.json .. autoclass:: OFPMeterFeaturesStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-50-ofp_meter_features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-50-ofp_meter_features_reply.packet.json .. autoclass:: OFPFlowMonitorRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-66-ofp_flow_monitor_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-66-ofp_flow_monitor_request.packet.json .. autoclass:: OFPFlowMonitorReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-67-ofp_flow_monitor_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-67-ofp_flow_monitor_reply.packet.json .. autoclass:: OFPExperimenterStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-59-ofp_experimenter_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-59-ofp_experimenter_request.packet.json .. autoclass:: OFPExperimenterStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-60-ofp_experimenter_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-60-ofp_experimenter_reply.packet.json Packet-Out Message ------------------ @@ -309,7 +309,7 @@ Packet-Out Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-1-ofp_packet_out.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-1-ofp_packet_out.packet.json Barrier Message --------------- @@ -318,13 +318,13 @@ Barrier Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-17-ofp_barrier_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-17-ofp_barrier_request.packet.json .. autoclass:: OFPBarrierReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-18-ofp_barrier_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-18-ofp_barrier_reply.packet.json Role Request Message -------------------- @@ -333,13 +333,13 @@ Role Request Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-19-ofp_role_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-19-ofp_role_request.packet.json .. autoclass:: OFPRoleReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-20-ofp_role_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-20-ofp_role_reply.packet.json Bundle Messages --------------- @@ -348,13 +348,13 @@ Bundle Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-69-ofp_bundle_ctrl_msg.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-69-ofp_bundle_ctrl_msg.packet.json .. autoclass:: OFPBundleAddMsg JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-70-ofp_bundle_add_msg.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-70-ofp_bundle_add_msg.packet.json Set Asynchronous Configuration Message -------------------------------------- @@ -363,19 +363,19 @@ Set Asynchronous Configuration Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-42-ofp_set_async.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-42-ofp_set_async.packet.json .. autoclass:: OFPGetAsyncRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-40-ofp_get_async_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-40-ofp_get_async_request.packet.json .. autoclass:: OFPGetAsyncReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-41-ofp_get_async_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-41-ofp_get_async_reply.packet.json Asynchronous Messages @@ -388,8 +388,8 @@ Packet-In Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-4-ofp_packet_in.packet.json - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-57-ofp_packet_in.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-4-ofp_packet_in.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-57-ofp_packet_in.packet.json Flow Removed Message -------------------- @@ -398,7 +398,7 @@ Flow Removed Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-38-ofp_flow_removed.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-38-ofp_flow_removed.packet.json Port Status Message ------------------- @@ -407,7 +407,7 @@ Port Status Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-37-ofp_port_status.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-37-ofp_port_status.packet.json Controller Role Status Message ------------------------------ @@ -416,7 +416,7 @@ Controller Role Status Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-65-ofp_role_status.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-65-ofp_role_status.packet.json Table Status Message -------------------- @@ -425,7 +425,7 @@ Table Status Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-68-ofp_table_status.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-68-ofp_table_status.packet.json Request Forward Message ----------------------- @@ -434,7 +434,7 @@ Request Forward Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-71-ofp_requestforward.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-71-ofp_requestforward.packet.json Symmetric Messages @@ -447,7 +447,7 @@ Hello JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-10-ofp_hello.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-10-ofp_hello.packet.json .. autoclass:: OFPHelloElemVersionBitmap @@ -458,7 +458,7 @@ Echo Request JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-13-ofp_echo_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-13-ofp_echo_request.packet.json Echo Reply ---------- @@ -467,7 +467,7 @@ Echo Reply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-14-ofp_echo_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-14-ofp_echo_reply.packet.json Error Message ------------- @@ -476,7 +476,7 @@ Error Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-15-ofp_error_msg.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-15-ofp_error_msg.packet.json Experimenter ------------ @@ -485,7 +485,7 @@ Experimenter JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of14/5-16-ofp_experimenter.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of14/5-16-ofp_experimenter.packet.json Port Structures =============== diff --git a/doc/source/ofproto_v1_5_ref.rst b/doc/source/ofproto_v1_5_ref.rst index a78cfb67..d6a78e2e 100644 --- a/doc/source/ofproto_v1_5_ref.rst +++ b/doc/source/ofproto_v1_5_ref.rst @@ -14,13 +14,13 @@ Handshake JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json .. autoclass:: OFPSwitchFeatures JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json Switch Configuration -------------------- @@ -29,19 +29,19 @@ Switch Configuration JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json .. autoclass:: OFPGetConfigRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json .. autoclass:: OFPGetConfigReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json Modify State Messages --------------------- @@ -50,33 +50,33 @@ Modify State Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json .. autoclass:: OFPFlowMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod.packet.json - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_conjunction.packet.json - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_match_conj.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_conjunction.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_match_conj.packet.json .. autoclass:: OFPGroupMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-group_mod.packet.json .. autoclass:: OFPPortMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json .. autoclass:: OFPMeterMod JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json Multipart Messages ------------------ @@ -85,253 +85,253 @@ Multipart Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json .. autoclass:: OFPDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json .. autoclass:: OFPFlowDescStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_request.packet.json .. autoclass:: OFPFlowDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_reply.packet.json .. autoclass:: OFPFlowStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json .. autoclass:: OFPFlowStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_reply.packet.json .. autoclass:: OFPAggregateStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json .. autoclass:: OFPAggregateStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json .. autoclass:: OFPPortStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json .. autoclass:: OFPPortStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json .. autoclass:: OFPPortDescStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_request.packet.json .. autoclass:: OFPPortDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json .. autoclass:: OFPQueueStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json .. autoclass:: OFPQueueStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json .. autoclass:: OFPQueueDescStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_request.packet.json .. autoclass:: OFPQueueDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json .. autoclass:: OFPGroupStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json .. autoclass:: OFPGroupStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json .. autoclass:: OFPGroupDescStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_request.packet.json .. autoclass:: OFPGroupDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_reply.packet.json .. autoclass:: OFPGroupFeaturesStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json .. autoclass:: OFPGroupFeaturesStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json .. autoclass:: OFPMeterStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json .. autoclass:: OFPMeterStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json .. autoclass:: OFPMeterDescStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json .. autoclass:: OFPMeterDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json .. autoclass:: OFPMeterFeaturesStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json .. autoclass:: OFPMeterFeaturesStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json .. autoclass:: OFPControllerStatusStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_request.packet.json .. autoclass:: OFPControllerStatusStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_reply.packet.json .. autoclass:: OFPTableStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json .. autoclass:: OFPTableStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json .. autoclass:: OFPTableDescStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json .. autoclass:: OFPTableDescStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json .. autoclass:: OFPTableFeaturesStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_request.packet.json .. autoclass:: OFPTableFeaturesStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_reply.packet.json .. autoclass:: OFPFlowMonitorRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json .. autoclass:: OFPFlowMonitorReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json .. autoclass:: OFPBundleFeaturesStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_request.packet.json .. autoclass:: OFPBundleFeaturesStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_reply.packet.json .. autoclass:: OFPExperimenterStatsRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json .. autoclass:: OFPExperimenterStatsReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json Packet-Out Message ------------------ @@ -340,7 +340,7 @@ Packet-Out Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_out.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-packet_out.packet.json Barrier Message --------------- @@ -349,13 +349,13 @@ Barrier Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json .. autoclass:: OFPBarrierReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json Role Request Message -------------------- @@ -364,13 +364,13 @@ Role Request Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-role_request.packet.json .. autoclass:: OFPRoleReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-role_reply.packet.json Bundle Messages --------------- @@ -379,13 +379,13 @@ Bundle Messages JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_ctrl.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_ctrl.packet.json .. autoclass:: OFPBundleAddMsg JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_add.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_add.packet.json Set Asynchronous Configuration Message -------------------------------------- @@ -394,19 +394,19 @@ Set Asynchronous Configuration Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json .. autoclass:: OFPGetAsyncRequest JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json .. autoclass:: OFPGetAsyncReply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json Asynchronous Messages ===================== @@ -418,7 +418,7 @@ Packet-In Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_in.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-packet_in.packet.json Flow Removed Message -------------------- @@ -427,7 +427,7 @@ Flow Removed Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_removed.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-flow_removed.packet.json Port Status Message ------------------- @@ -436,7 +436,7 @@ Port Status Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json Controller Role Status Message ------------------------------ @@ -445,7 +445,7 @@ Controller Role Status Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json Table Status Message -------------------- @@ -454,7 +454,7 @@ Table Status Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json Request Forward Message ----------------------- @@ -463,7 +463,7 @@ Request Forward Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json Controller Status Message ------------------------- @@ -472,7 +472,7 @@ Controller Status Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status.packet.json Symmetric Messages ================== @@ -484,7 +484,7 @@ Hello JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json .. autoclass:: OFPHelloElemVersionBitmap @@ -495,7 +495,7 @@ Echo Request JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json Echo Reply ---------- @@ -504,7 +504,7 @@ Echo Reply JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json Error Message ------------- @@ -513,7 +513,7 @@ Error Message JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json Experimenter ------------ @@ -522,7 +522,7 @@ Experimenter JSON Example: - .. literalinclude:: ../../ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json + .. literalinclude:: ../../tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json Port Structures =============== diff --git a/doc/source/test-vrrp.rst b/doc/source/test-vrrp.rst index 6e3783a1..aa03d4ae 100644 --- a/doc/source/test-vrrp.rst +++ b/doc/source/test-vrrp.rst @@ -9,8 +9,8 @@ Running integrated tests Some testing scripts are available. -* ryu/tests/integrated/test_vrrp_linux_multi.py -* ryu/tests/integrated/test_vrrp_multi.py +* tests/integrated/test_vrrp_linux_multi.py +* tests/integrated/test_vrrp_multi.py Each files include how to run in the comment. Please refer to it. diff --git a/doc/source/writing_ryu_app.rst b/doc/source/writing_ryu_app.rst index 8f8556bb..ff1fd755 100644 --- a/doc/source/writing_ryu_app.rst +++ b/doc/source/writing_ryu_app.rst @@ -122,5 +122,5 @@ switch? Move to `the next step can learn from the existing Ryu applications at `ryu/app `_ directory and `integrated tests -`_ +`_ directory. diff --git a/run_tests.sh b/run_tests.sh index 1ab8aea7..2f448dce 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -90,7 +90,7 @@ run_tests() { run_pylint() { echo "Running pylint ..." PYLINT_OPTIONS="--rcfile=.pylintrc --output-format=parseable" - PYLINT_INCLUDE="ryu bin/ryu bin/ryu-manager ryu/tests/bin/ryu-client" + PYLINT_INCLUDE="ryu bin/ryu bin/ryu-manager tests/integrated tests/packet_data_generator3 tests/unit" export PYTHONPATH=$PYTHONPATH:.ryu PYLINT_LOG=pylint.log @@ -115,11 +115,11 @@ run_pep8() { run_integrated() { echo "Running integrated test ..." - INTEGRATED_TEST_RUNNER="./ryu/tests/integrated/run_tests_with_ovs12.py" + INTEGRATED_TEST_RUNNER="./tests/integrated/run_tests_with_ovs12.py" sudo PYTHONPATH=. nosetests -s $INTEGRATED_TEST_RUNNER } #NOSETESTS="nosetests $noseopts $noseargs" -NOSETESTS="${PYTHON} ./ryu/tests/run_tests.py $noseopts $noseargs" +NOSETESTS="${PYTHON} ./tests/run_tests.py $noseopts $noseargs" #if [ -n "$PLUGIN_DIR" ] #then diff --git a/ryu/tests/integrated/__init__.py b/ryu/tests/integrated/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/integrated/bgp/__init__.py b/ryu/tests/integrated/bgp/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/integrated/bgp/base.py b/ryu/tests/integrated/bgp/base.py deleted file mode 100644 index 26fa396c..00000000 --- a/ryu/tests/integrated/bgp/base.py +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2016 Fumihiko Kakuma -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import absolute_import - -import logging -import sys -import unittest - -from ryu.tests.integrated.common import docker_base as ctn_base -from ryu.tests.integrated.common import ryubgp -from ryu.tests.integrated.common import quagga - - -LOG = logging.getLogger(__name__) - - -class BgpSpeakerTestBase(unittest.TestCase): - images = [] - containers = [] - bridges = [] - checktime = 120 - - @classmethod - def setUpClass(cls): - cls.brdc1 = ctn_base.Bridge(name='brdc1', - subnet='192.168.10.0/24') - cls.bridges.append(cls.brdc1) - - cls.dockerimg = ctn_base.DockerImage() - image = 'python:%d.%d' % ( - sys.version_info.major, sys.version_info.minor) - cls.r_img = cls.dockerimg.create_ryu(image=image, check_exist=True) - cls.images.append(cls.r_img) - cls.q_img = 'osrg/quagga' - cls.images.append(cls.q_img) - - cls.r1 = ryubgp.RyuBGPContainer(name='r1', asn=64512, - router_id='192.168.0.1', - ctn_image_name=cls.r_img) - cls.containers.append(cls.r1) - cls.r1.add_route('10.10.0.0/28') - cls.r1.run(wait=True) - cls.r1_ip_cidr = cls.brdc1.addif(cls.r1) - cls.r1_ip = cls.r1_ip_cidr.split('/')[0] - - cls.q1 = quagga.QuaggaBGPContainer(name='q1', asn=64522, - router_id='192.168.0.2', - ctn_image_name=cls.q_img) - cls.containers.append(cls.q1) - cls.q1.add_route('192.168.160.0/24') - cls.q1.run(wait=True) - cls.q1_ip_cidr = cls.brdc1.addif(cls.q1) - cls.q1_ip = cls.q1_ip_cidr.split('/')[0] - - cls.r1.add_peer(cls.q1, bridge=cls.brdc1.name) - cls.q1.add_peer(cls.r1, bridge=cls.brdc1.name) - - super(BgpSpeakerTestBase, cls).setUpClass() - - @classmethod - def tearDownClass(cls): - for ctn in cls.containers: - try: - ctn.stop() - except ctn_base.CommandError as e: - LOG.exception('Exception when stopping containers: %s', e) - ctn.remove() - for br in cls.bridges: - br.delete() - super(BgpSpeakerTestBase, cls).tearDownClass() diff --git a/ryu/tests/integrated/bgp/base_ip6.py b/ryu/tests/integrated/bgp/base_ip6.py deleted file mode 100644 index be26fafd..00000000 --- a/ryu/tests/integrated/bgp/base_ip6.py +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2016 Fumihiko Kakuma -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import absolute_import - -import logging -import sys -import unittest - -from ryu.tests.integrated.common import docker_base as ctn_base -from ryu.tests.integrated.common import ryubgp -from ryu.tests.integrated.common import quagga - - -LOG = logging.getLogger(__name__) - - -class BgpSpeakerTestBase(unittest.TestCase): - images = [] - containers = [] - bridges = [] - checktime = 120 - - @classmethod - def setUpClass(cls): - cls.brdc1 = ctn_base.Bridge(name='brip6dc1', - subnet='2001:10::/32') - cls.bridges.append(cls.brdc1) - - cls.dockerimg = ctn_base.DockerImage() - image = 'python:%d.%d' % ( - sys.version_info.major, sys.version_info.minor) - cls.r_img = cls.dockerimg.create_ryu(image=image, check_exist=True) - cls.images.append(cls.r_img) - cls.q_img = 'osrg/quagga' - cls.images.append(cls.q_img) - - cls.r1 = ryubgp.RyuBGPContainer(name='r1', asn=64512, - router_id='192.168.0.1', - ctn_image_name=cls.r_img) - cls.containers.append(cls.r1) - cls.r1.add_route('fc00:10::/64', route_info={'rf': 'ipv6'}) - cls.r1.run(wait=True) - cls.r1_ip_cidr = cls.brdc1.addif(cls.r1) - cls.r1_ip = cls.r1_ip_cidr.split('/')[0] - - cls.q1 = quagga.QuaggaBGPContainer(name='q1', asn=64522, - router_id='192.168.0.2', - ctn_image_name=cls.q_img) - cls.containers.append(cls.q1) - cls.q1.add_route('fc00:100::/64', route_info={'rf': 'ipv6'}) - cls.q1.run(wait=True) - cls.q1_ip_cidr = cls.brdc1.addif(cls.q1) - cls.q1_ip = cls.q1_ip_cidr.split('/')[0] - - cls.r1.add_peer(cls.q1, bridge=cls.brdc1.name, v6=True) - cls.q1.add_peer(cls.r1, bridge=cls.brdc1.name, v6=True) - - super(BgpSpeakerTestBase, cls).setUpClass() - - @classmethod - def tearDownClass(cls): - for ctn in cls.containers: - try: - ctn.stop() - except ctn_base.CommandError as e: - LOG.exception('Exception when stopping containers: %s', e) - ctn.remove() - for br in cls.bridges: - br.delete() - super(BgpSpeakerTestBase, cls).tearDownClass() diff --git a/ryu/tests/integrated/bgp/test_basic.py b/ryu/tests/integrated/bgp/test_basic.py deleted file mode 100644 index 7c6c8cf5..00000000 --- a/ryu/tests/integrated/bgp/test_basic.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2016 Fumihiko Kakuma -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import absolute_import - -import time - -from ryu.tests.integrated.common import docker_base as ctn_base -from . import base - - -class BgpSpeakerBasicTest(base.BgpSpeakerTestBase): - def setUp(self): - super(BgpSpeakerBasicTest, self).setUp() - self.r1.stop_ryubgp(retry=True) - self.r1.start_ryubgp(retry=True) - - def test_check_neighbor_established(self): - neighbor_state = ctn_base.BGP_FSM_IDLE - for _ in range(0, self.checktime): - neighbor_state = self.q1.get_neighbor_state(self.r1) - if neighbor_state == ctn_base.BGP_FSM_ESTABLISHED: - break - time.sleep(1) - self.assertEqual(neighbor_state, ctn_base.BGP_FSM_ESTABLISHED) - - def test_check_rib_nexthop(self): - neighbor_state = ctn_base.BGP_FSM_IDLE - for _ in range(0, self.checktime): - neighbor_state = self.q1.get_neighbor_state(self.r1) - if neighbor_state == ctn_base.BGP_FSM_ESTABLISHED: - break - time.sleep(1) - self.assertEqual(neighbor_state, ctn_base.BGP_FSM_ESTABLISHED) - rib = self.q1.get_global_rib(prefix='10.10.0.0/28') - self.assertEqual(self.r1_ip, rib[0]['nexthop']) diff --git a/ryu/tests/integrated/bgp/test_ip6_basic.py b/ryu/tests/integrated/bgp/test_ip6_basic.py deleted file mode 100644 index 288e9e68..00000000 --- a/ryu/tests/integrated/bgp/test_ip6_basic.py +++ /dev/null @@ -1,49 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2016 Fumihiko Kakuma -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import absolute_import - -import time - -from ryu.tests.integrated.common import docker_base as ctn_base -from . import base_ip6 as base - - -class BgpSpeakerBasicTest(base.BgpSpeakerTestBase): - def setUp(self): - super(BgpSpeakerBasicTest, self).setUp() - self.r1.stop_ryubgp(retry=True) - self.r1.start_ryubgp(retry=True) - - def test_check_neighbor_established(self): - neighbor_state = ctn_base.BGP_FSM_IDLE - for _ in range(0, self.checktime): - neighbor_state = self.q1.get_neighbor_state(self.r1) - if neighbor_state == ctn_base.BGP_FSM_ESTABLISHED: - break - time.sleep(1) - self.assertEqual(neighbor_state, ctn_base.BGP_FSM_ESTABLISHED) - - def test_check_rib_nexthop(self): - neighbor_state = ctn_base.BGP_FSM_IDLE - for _ in range(0, self.checktime): - neighbor_state = self.q1.get_neighbor_state(self.r1) - if neighbor_state == ctn_base.BGP_FSM_ESTABLISHED: - break - time.sleep(1) - self.assertEqual(neighbor_state, ctn_base.BGP_FSM_ESTABLISHED) - rib = self.q1.get_global_rib(prefix='fc00:10::/64', rf='ipv6') - self.assertEqual(self.r1_ip, rib[0]['nexthop']) diff --git a/ryu/tests/integrated/common/__init__.py b/ryu/tests/integrated/common/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/integrated/common/docker_base.py b/ryu/tests/integrated/common/docker_base.py deleted file mode 100644 index 1ae2cc27..00000000 --- a/ryu/tests/integrated/common/docker_base.py +++ /dev/null @@ -1,801 +0,0 @@ -# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. -# -# This is based on the following -# https://github.com/osrg/gobgp/test/lib/base.py -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import absolute_import - -import itertools -import logging -import os -import subprocess -import time - -import netaddr -import six - -LOG = logging.getLogger(__name__) - -DEFAULT_TEST_PREFIX = '' -DEFAULT_TEST_BASE_DIR = '/tmp/ctn_docker/bgp' -TEST_PREFIX = DEFAULT_TEST_PREFIX -TEST_BASE_DIR = DEFAULT_TEST_BASE_DIR - -BGP_FSM_IDLE = 'BGP_FSM_IDLE' -BGP_FSM_ACTIVE = 'BGP_FSM_ACTIVE' -BGP_FSM_ESTABLISHED = 'BGP_FSM_ESTABLISHED' - -BGP_ATTR_TYPE_ORIGIN = 1 -BGP_ATTR_TYPE_AS_PATH = 2 -BGP_ATTR_TYPE_NEXT_HOP = 3 -BGP_ATTR_TYPE_MULTI_EXIT_DISC = 4 -BGP_ATTR_TYPE_LOCAL_PREF = 5 -BGP_ATTR_TYPE_COMMUNITIES = 8 -BGP_ATTR_TYPE_ORIGINATOR_ID = 9 -BGP_ATTR_TYPE_CLUSTER_LIST = 10 -BGP_ATTR_TYPE_MP_REACH_NLRI = 14 -BGP_ATTR_TYPE_EXTENDED_COMMUNITIES = 16 - -BRIDGE_TYPE_DOCKER = 'docker' -BRIDGE_TYPE_BRCTL = 'brctl' -BRIDGE_TYPE_OVS = 'ovs' - - -class CommandError(Exception): - def __init__(self, out): - super(CommandError, self).__init__() - self.out = out - - -def try_several_times(f, t=3, s=1): - e = RuntimeError() - for _ in range(t): - try: - r = f() - except RuntimeError as e: - time.sleep(s) - else: - return r - raise e - - -class CmdBuffer(list): - def __init__(self, delim='\n'): - super(CmdBuffer, self).__init__() - self.delim = delim - - def __lshift__(self, value): - self.append(value) - - def __str__(self): - return self.delim.join(self) - - -class CommandOut(str): - - def __new__(cls, stdout, stderr, command, returncode, **kwargs): - stdout = stdout or '' - obj = super(CommandOut, cls).__new__(cls, stdout, **kwargs) - obj.stderr = stderr or '' - obj.command = command - obj.returncode = returncode - return obj - - -class Command(object): - - def _execute(self, cmd, capture=False, executable=None): - """Execute a command using subprocess.Popen() - :Parameters: - - out: stdout from subprocess.Popen() - out has some attributes. - out.returncode: returncode of subprocess.Popen() - out.stderr: stderr from subprocess.Popen() - """ - if capture: - p_stdout = subprocess.PIPE - p_stderr = subprocess.PIPE - else: - p_stdout = None - p_stderr = None - pop = subprocess.Popen(cmd, shell=True, executable=executable, - stdout=p_stdout, - stderr=p_stderr) - __stdout, __stderr = pop.communicate() - _stdout = six.text_type(__stdout, 'utf-8') - _stderr = six.text_type(__stderr, 'utf-8') - out = CommandOut(_stdout, _stderr, cmd, pop.returncode) - return out - - def execute(self, cmd, capture=True, try_times=1, interval=1): - out = None - for i in range(try_times): - out = self._execute(cmd, capture=capture) - LOG.info(out.command) - if out.returncode == 0: - return out - LOG.error("stdout: %s", out) - LOG.error("stderr: %s", out.stderr) - if i + 1 >= try_times: - break - time.sleep(interval) - raise CommandError(out) - - def sudo(self, cmd, capture=True, try_times=1, interval=1): - cmd = 'sudo %s' % cmd - return self.execute(cmd, capture=capture, - try_times=try_times, interval=interval) - - -class DockerImage(object): - def __init__(self, baseimage='ubuntu:16.04'): - self.baseimage = baseimage - self.cmd = Command() - - def get_images(self): - out = self.cmd.sudo('sudo docker images') - images = [] - for line in out.splitlines()[1:]: - images.append(line.split()[0]) - return images - - def exist(self, name): - return name in self.get_images() - - def build(self, tagname, dockerfile_dir): - self.cmd.sudo( - "docker build -t {0} {1}".format(tagname, dockerfile_dir), - try_times=3) - - def remove(self, tagname, check_exist=False): - if check_exist and not self.exist(tagname): - return tagname - self.cmd.sudo("docker rmi -f %s" % tagname, try_times=3) - - def create_quagga(self, tagname='quagga', image=None, check_exist=False): - if check_exist and self.exist(tagname): - return tagname - workdir = os.path.join(TEST_BASE_DIR, tagname) - pkges = ' '.join([ - 'telnet', - 'tcpdump', - 'quagga', - ]) - if image: - use_image = image - else: - use_image = self.baseimage - c = CmdBuffer() - c << 'FROM %s' % use_image - c << 'RUN apt-get update' - c << 'RUN apt-get install -qy --no-install-recommends %s' % pkges - c << 'CMD /usr/lib/quagga/bgpd' - - self.cmd.sudo('rm -rf %s' % workdir) - self.cmd.execute('mkdir -p %s' % workdir) - self.cmd.execute("echo '%s' > %s/Dockerfile" % (str(c), workdir)) - self.build(tagname, workdir) - return tagname - - def create_ryu(self, tagname='ryu', image=None, check_exist=False): - if check_exist and self.exist(tagname): - return tagname - workdir = os.path.join(TEST_BASE_DIR, tagname) - workdir_ctn = '/root/osrg/ryu' - pkges = ' '.join([ - 'tcpdump', - 'iproute2', - ]) - if image: - use_image = image - else: - use_image = self.baseimage - c = CmdBuffer() - c << 'FROM %s' % use_image - c << 'ADD ryu %s' % workdir_ctn - install = ' '.join([ - 'RUN apt-get update', - '&& apt-get install -qy --no-install-recommends %s' % pkges, - '&& cd %s' % workdir_ctn, - # Note: Clean previous builds, because "python setup.py install" - # might fail if the current directory contains the symlink to - # Docker host file systems. - '&& rm -rf *.egg-info/ build/ dist/ .tox/ *.log' - '&& pip install -r tools/pip-requires -r tools/optional-requires', - '&& python setup.py install', - ]) - c << install - - self.cmd.sudo('rm -rf %s' % workdir) - self.cmd.execute('mkdir -p %s' % workdir) - self.cmd.execute("echo '%s' > %s/Dockerfile" % (str(c), workdir)) - self.cmd.execute('cp -r ../ryu %s/' % workdir) - self.build(tagname, workdir) - return tagname - - -class Bridge(object): - def __init__(self, name, subnet='', start_ip=None, end_ip=None, - with_ip=True, self_ip=False, - fixed_ip=None, reuse=False, - br_type='docker'): - """Manage a bridge - :Parameters: - - name: bridge name - - subnet: network cider to be used in this bridge - - start_ip: start address of an ip to be used in the subnet - - end_ip: end address of an ip to be used in the subnet - - with_ip: specify if assign automatically an ip address - - self_ip: specify if assign an ip address for the bridge - - fixed_ip: an ip address to be assigned to the bridge - - reuse: specify if use an existing bridge - - br_type: One either in a 'docker', 'brctl' or 'ovs' - """ - self.cmd = Command() - self.name = name - if br_type not in (BRIDGE_TYPE_DOCKER, BRIDGE_TYPE_BRCTL, - BRIDGE_TYPE_OVS): - raise Exception("argument error br_type: %s" % br_type) - self.br_type = br_type - self.docker_nw = bool(self.br_type == BRIDGE_TYPE_DOCKER) - if TEST_PREFIX != '': - self.name = '{0}_{1}'.format(TEST_PREFIX, name) - self.with_ip = with_ip - if with_ip: - self.subnet = netaddr.IPNetwork(subnet) - if start_ip: - self.start_ip = start_ip - else: - self.start_ip = netaddr.IPAddress(self.subnet.first) - if end_ip: - self.end_ip = end_ip - else: - self.end_ip = netaddr.IPAddress(self.subnet.last) - - def _ip_gen(): - for host in netaddr.IPRange(self.start_ip, self.end_ip): - yield host - self._ip_generator = _ip_gen() - # throw away first network address - self.next_ip_address() - - self.self_ip = self_ip - if fixed_ip: - self.ip_addr = fixed_ip - else: - self.ip_addr = self.next_ip_address() - if not reuse: - def f(): - if self.br_type == BRIDGE_TYPE_DOCKER: - gw = "--gateway %s" % self.ip_addr.split('/')[0] - v6 = '' - if self.subnet.version == 6: - v6 = '--ipv6' - cmd = ("docker network create --driver bridge %s " - "%s --subnet %s %s" % (v6, gw, subnet, self.name)) - elif self.br_type == BRIDGE_TYPE_BRCTL: - cmd = "ip link add {0} type bridge".format(self.name) - elif self.br_type == BRIDGE_TYPE_OVS: - cmd = "ovs-vsctl add-br {0}".format(self.name) - else: - raise ValueError('Unsupported br_type: %s' % self.br_type) - self.delete() - self.execute(cmd, sudo=True, retry=True) - try_several_times(f) - if not self.docker_nw: - self.execute("ip link set up dev {0}".format(self.name), - sudo=True, retry=True) - - if not self.docker_nw and self_ip: - ips = self.check_br_addr(self.name) - for key, ip in ips.items(): - if self.subnet.version == key: - self.execute( - "ip addr del {0} dev {1}".format(ip, self.name), - sudo=True, retry=True) - self.execute( - "ip addr add {0} dev {1}".format(self.ip_addr, self.name), - sudo=True, retry=True) - self.ctns = [] - - def get_bridges_dc(self): - out = self.execute('docker network ls', sudo=True, retry=True) - bridges = [] - for line in out.splitlines()[1:]: - bridges.append(line.split()[1]) - return bridges - - def get_bridges_brctl(self): - out = self.execute('brctl show', retry=True) - bridges = [] - for line in out.splitlines()[1:]: - bridges.append(line.split()[0]) - return bridges - - def get_bridges_ovs(self): - out = self.execute('ovs-vsctl list-br', sudo=True, retry=True) - return out.splitlines() - - def get_bridges(self): - if self.br_type == BRIDGE_TYPE_DOCKER: - return self.get_bridges_dc() - elif self.br_type == BRIDGE_TYPE_BRCTL: - return self.get_bridges_brctl() - elif self.br_type == BRIDGE_TYPE_OVS: - return self.get_bridges_ovs() - - def exist(self): - return self.name in self.get_bridges() - - def execute(self, cmd, capture=True, sudo=False, retry=False): - if sudo: - m = self.cmd.sudo - else: - m = self.cmd.execute - if retry: - return m(cmd, capture=capture, try_times=3, interval=1) - else: - return m(cmd, capture=capture) - - def check_br_addr(self, br): - ips = {} - cmd = "ip a show dev %s" % br - for line in self.execute(cmd, sudo=True).split('\n'): - if line.strip().startswith("inet "): - elems = [e.strip() for e in line.strip().split(' ')] - ips[4] = elems[1] - elif line.strip().startswith("inet6 "): - elems = [e.strip() for e in line.strip().split(' ')] - ips[6] = elems[1] - return ips - - def next_ip_address(self): - return "{0}/{1}".format(next(self._ip_generator), - self.subnet.prefixlen) - - def addif(self, ctn): - name = ctn.next_if_name() - self.ctns.append(ctn) - ip_address = None - if self.docker_nw: - ipv4 = None - ipv6 = None - ip_address = self.next_ip_address() - ip_address_ip = ip_address.split('/')[0] - version = 4 - if netaddr.IPNetwork(ip_address).version == 6: - version = 6 - opt_ip = "--ip %s" % ip_address_ip - if version == 4: - ipv4 = ip_address - else: - opt_ip = "--ip6 %s" % ip_address_ip - ipv6 = ip_address - cmd = "docker network connect %s %s %s" % ( - opt_ip, self.name, ctn.docker_name()) - self.execute(cmd, sudo=True) - ctn.set_addr_info(bridge=self.name, ipv4=ipv4, ipv6=ipv6, - ifname=name) - else: - if self.with_ip: - ip_address = self.next_ip_address() - version = 4 - if netaddr.IPNetwork(ip_address).version == 6: - version = 6 - ctn.pipework(self, ip_address, name, version=version) - else: - ctn.pipework(self, '0/0', name) - return ip_address - - def delete(self, check_exist=True): - if check_exist: - if not self.exist(): - return - if self.br_type == BRIDGE_TYPE_DOCKER: - self.execute("docker network rm %s" % self.name, - sudo=True, retry=True) - elif self.br_type == BRIDGE_TYPE_BRCTL: - self.execute("ip link set down dev %s" % self.name, - sudo=True, retry=True) - self.execute( - "ip link delete %s type bridge" % self.name, - sudo=True, retry=True) - elif self.br_type == BRIDGE_TYPE_OVS: - self.execute( - "ovs-vsctl del-br %s" % self.name, - sudo=True, retry=True) - - -class Container(object): - def __init__(self, name, image=None): - self.name = name - self.image = image - self.shared_volumes = [] - self.ip_addrs = [] - self.ip6_addrs = [] - self.is_running = False - self.eths = [] - self.id = None - - self.cmd = Command() - self.remove() - - def docker_name(self): - if TEST_PREFIX == DEFAULT_TEST_PREFIX: - return self.name - return '{0}_{1}'.format(TEST_PREFIX, self.name) - - def get_docker_id(self): - if self.id: - return self.id - else: - return self.docker_name() - - def next_if_name(self): - name = 'eth{0}'.format(len(self.eths) + 1) - self.eths.append(name) - return name - - def set_addr_info(self, bridge, ipv4=None, ipv6=None, ifname='eth0'): - if ipv4: - self.ip_addrs.append((ifname, ipv4, bridge)) - if ipv6: - self.ip6_addrs.append((ifname, ipv6, bridge)) - - def get_addr_info(self, bridge, ipv=4): - addrinfo = {} - if ipv == 4: - ip_addrs = self.ip_addrs - elif ipv == 6: - ip_addrs = self.ip6_addrs - else: - return None - for addr in ip_addrs: - if addr[2] == bridge: - addrinfo[addr[1]] = addr[0] - return addrinfo - - def execute(self, cmd, capture=True, sudo=False, retry=False): - if sudo: - m = self.cmd.sudo - else: - m = self.cmd.execute - if retry: - return m(cmd, capture=capture, try_times=3, interval=1) - else: - return m(cmd, capture=capture) - - def dcexec(self, cmd, capture=True, retry=False): - if retry: - return self.cmd.sudo(cmd, capture=capture, try_times=3, interval=1) - else: - return self.cmd.sudo(cmd, capture=capture) - - def exec_on_ctn(self, cmd, capture=True, detach=False): - name = self.docker_name() - flag = '-d' if detach else '' - return self.dcexec('docker exec {0} {1} {2}'.format( - flag, name, cmd), capture=capture) - - def get_containers(self, allctn=False): - cmd = 'docker ps --no-trunc=true' - if allctn: - cmd += ' --all=true' - out = self.dcexec(cmd, retry=True) - containers = [] - for line in out.splitlines()[1:]: - containers.append(line.split()[-1]) - return containers - - def exist(self, allctn=False): - return self.docker_name() in self.get_containers(allctn=allctn) - - def run(self): - c = CmdBuffer(' ') - c << "docker run --privileged=true" - for sv in self.shared_volumes: - c << "-v {0}:{1}".format(sv[0], sv[1]) - c << "--name {0} --hostname {0} -id {1}".format(self.docker_name(), - self.image) - self.id = self.dcexec(str(c), retry=True) - self.is_running = True - self.exec_on_ctn("ip li set up dev lo") - ipv4 = None - ipv6 = None - for line in self.exec_on_ctn("ip a show dev eth0").split('\n'): - if line.strip().startswith("inet "): - elems = [e.strip() for e in line.strip().split(' ')] - ipv4 = elems[1] - elif line.strip().startswith("inet6 "): - elems = [e.strip() for e in line.strip().split(' ')] - ipv6 = elems[1] - self.set_addr_info(bridge='docker0', ipv4=ipv4, ipv6=ipv6, - ifname='eth0') - return 0 - - def stop(self, check_exist=True): - if check_exist: - if not self.exist(allctn=False): - return - ctn_id = self.get_docker_id() - out = self.dcexec('docker stop -t 0 %s' % ctn_id, retry=True) - self.is_running = False - return out - - def remove(self, check_exist=True): - if check_exist: - if not self.exist(allctn=True): - return - ctn_id = self.get_docker_id() - out = self.dcexec('docker rm -f %s' % ctn_id, retry=True) - self.is_running = False - return out - - def pipework(self, bridge, ip_addr, intf_name="", version=4): - if not self.is_running: - LOG.warning('Call run() before pipeworking') - return - c = CmdBuffer(' ') - c << "pipework {0}".format(bridge.name) - - if intf_name != "": - c << "-i {0}".format(intf_name) - else: - intf_name = "eth1" - ipv4 = None - ipv6 = None - if version == 4: - ipv4 = ip_addr - else: - c << '-a 6' - ipv6 = ip_addr - c << "{0} {1}".format(self.docker_name(), ip_addr) - self.set_addr_info(bridge=bridge.name, ipv4=ipv4, ipv6=ipv6, - ifname=intf_name) - self.execute(str(c), sudo=True, retry=True) - - def get_pid(self): - if self.is_running: - cmd = "docker inspect -f '{{.State.Pid}}' %s" % self.docker_name() - return int(self.dcexec(cmd)) - return -1 - - def start_tcpdump(self, interface=None, filename=None): - if not interface: - interface = "eth0" - if not filename: - filename = "{0}/{1}.dump".format( - self.shared_volumes[0][1], interface) - self.exec_on_ctn( - "tcpdump -i {0} -w {1}".format(interface, filename), - detach=True) - - -class BGPContainer(Container): - - WAIT_FOR_BOOT = 1 - RETRY_INTERVAL = 5 - DEFAULT_PEER_ARG = {'neigh_addr': '', - 'passwd': None, - 'vpn': False, - 'flowspec': False, - 'is_rs_client': False, - 'is_rr_client': False, - 'cluster_id': None, - 'policies': None, - 'passive': False, - 'local_addr': '', - 'as2': False, - 'graceful_restart': None, - 'local_as': None, - 'prefix_limit': None} - default_peer_keys = sorted(DEFAULT_PEER_ARG.keys()) - DEFAULT_ROUTE_ARG = {'prefix': None, - 'rf': 'ipv4', - 'attr': None, - 'next-hop': None, - 'as-path': None, - 'community': None, - 'med': None, - 'local-pref': None, - 'extended-community': None, - 'matchs': None, - 'thens': None} - default_route_keys = sorted(DEFAULT_ROUTE_ARG.keys()) - - def __init__(self, name, asn, router_id, ctn_image_name=None): - self.config_dir = TEST_BASE_DIR - if TEST_PREFIX: - self.config_dir = os.path.join(self.config_dir, TEST_PREFIX) - self.config_dir = os.path.join(self.config_dir, name) - self.asn = asn - self.router_id = router_id - self.peers = {} - self.routes = {} - self.policies = {} - super(BGPContainer, self).__init__(name, ctn_image_name) - self.execute( - 'rm -rf {0}'.format(self.config_dir), sudo=True) - self.execute('mkdir -p {0}'.format(self.config_dir)) - self.execute('chmod 777 {0}'.format(self.config_dir)) - - def __repr__(self): - return str({'name': self.name, 'asn': self.asn, - 'router_id': self.router_id}) - - def run(self, wait=False, w_time=WAIT_FOR_BOOT): - self.create_config() - super(BGPContainer, self).run() - if wait: - time.sleep(w_time) - return w_time - - def add_peer(self, peer, bridge='', reload_config=True, v6=False, - peer_info=None): - peer_info = peer_info or {} - self.peers[peer] = self.DEFAULT_PEER_ARG.copy() - self.peers[peer].update(peer_info) - peer_keys = sorted(self.peers[peer].keys()) - if peer_keys != self.default_peer_keys: - raise Exception("argument error peer_info: %s" % peer_info) - - neigh_addr = '' - local_addr = '' - it = itertools.product(self.ip_addrs, peer.ip_addrs) - if v6: - it = itertools.product(self.ip6_addrs, peer.ip6_addrs) - - for me, you in it: - if bridge != '' and bridge != me[2]: - continue - if me[2] == you[2]: - neigh_addr = you[1] - local_addr = me[1] - if v6: - addr, mask = local_addr.split('/') - local_addr = "{0}%{1}/{2}".format(addr, me[0], mask) - break - - if neigh_addr == '': - raise Exception('peer {0} seems not ip reachable'.format(peer)) - - if not self.peers[peer]['policies']: - self.peers[peer]['policies'] = {} - - self.peers[peer]['neigh_addr'] = neigh_addr - self.peers[peer]['local_addr'] = local_addr - if self.is_running and reload_config: - self.create_config() - self.reload_config() - - def del_peer(self, peer, reload_config=True): - del self.peers[peer] - if self.is_running and reload_config: - self.create_config() - self.reload_config() - - def disable_peer(self, peer): - raise NotImplementedError() - - def enable_peer(self, peer): - raise NotImplementedError() - - def log(self): - return self.execute('cat {0}/*.log'.format(self.config_dir)) - - def add_route(self, route, reload_config=True, route_info=None): - route_info = route_info or {} - self.routes[route] = self.DEFAULT_ROUTE_ARG.copy() - self.routes[route].update(route_info) - route_keys = sorted(self.routes[route].keys()) - if route_keys != self.default_route_keys: - raise Exception("argument error route_info: %s" % route_info) - self.routes[route]['prefix'] = route - if self.is_running and reload_config: - self.create_config() - self.reload_config() - - def add_policy(self, policy, peer, typ, default='accept', - reload_config=True): - self.set_default_policy(peer, typ, default) - self.define_policy(policy) - self.assign_policy(peer, policy, typ) - if self.is_running and reload_config: - self.create_config() - self.reload_config() - - def set_default_policy(self, peer, typ, default): - if (typ in ['in', 'out', 'import', 'export'] and - default in ['reject', 'accept']): - if 'default-policy' not in self.peers[peer]: - self.peers[peer]['default-policy'] = {} - self.peers[peer]['default-policy'][typ] = default - else: - raise Exception('wrong type or default') - - def define_policy(self, policy): - self.policies[policy['name']] = policy - - def assign_policy(self, peer, policy, typ): - if peer not in self.peers: - raise Exception('peer {0} not found'.format(peer.name)) - name = policy['name'] - if name not in self.policies: - raise Exception('policy {0} not found'.format(name)) - self.peers[peer]['policies'][typ] = policy - - def get_local_rib(self, peer, rf): - raise NotImplementedError() - - def get_global_rib(self, rf): - raise NotImplementedError() - - def get_neighbor_state(self, peer_id): - raise NotImplementedError() - - def get_reachablily(self, prefix, timeout=20): - version = netaddr.IPNetwork(prefix).version - addr = prefix.split('/')[0] - if version == 4: - ping_cmd = 'ping' - elif version == 6: - ping_cmd = 'ping6' - else: - raise Exception( - 'unsupported route family: {0}'.format(version)) - cmd = '/bin/bash -c "/bin/{0} -c 1 -w 1 {1} | xargs echo"'.format( - ping_cmd, addr) - interval = 1 - count = 0 - while True: - res = self.exec_on_ctn(cmd) - LOG.info(res) - if '1 packets received' in res and '0% packet loss': - break - time.sleep(interval) - count += interval - if count >= timeout: - raise Exception('timeout') - return True - - def wait_for(self, expected_state, peer, timeout=120): - interval = 1 - count = 0 - while True: - state = self.get_neighbor_state(peer) - LOG.info("%s's peer %s state: %s", - self.router_id, peer.router_id, state) - if state == expected_state: - return - - time.sleep(interval) - count += interval - if count >= timeout: - raise Exception('timeout') - - def add_static_route(self, network, next_hop): - cmd = '/sbin/ip route add {0} via {1}'.format(network, next_hop) - self.exec_on_ctn(cmd) - - def set_ipv6_forward(self): - cmd = 'sysctl -w net.ipv6.conf.all.forwarding=1' - self.exec_on_ctn(cmd) - - def create_config(self): - raise NotImplementedError() - - def reload_config(self): - raise NotImplementedError() diff --git a/ryu/tests/integrated/common/install_docker_test_pkg.sh b/ryu/tests/integrated/common/install_docker_test_pkg.sh deleted file mode 100644 index a771dfc1..00000000 --- a/ryu/tests/integrated/common/install_docker_test_pkg.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash -set -ex - -RYU_PATH=`dirname $0` - -source ${RYU_PATH}/install_docker_test_pkg_common.sh - -function add_docker_aptline { - sudo apt-get update - if ! apt-cache search docker-engine | grep docker-engine; then - VER=`lsb_release -r` - if echo $VER | grep 12.04; then - REL_NAME=precise - elif echo $VER | grep 14.04; then - REL_NAME=trusty - elif echo $VER | grep 15.10; then - REL_NAME=wily - elif echo $VER | grep 16.04; then - REL_NAME=xenial - else - retrun 1 - fi - RELEASE=ubuntu-$REL_NAME - sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D - sudo sh -c "echo deb https://apt.dockerproject.org/repo $RELEASE main > /etc/apt/sources.list.d/docker.list" - fi -} - -init_variables -process_options "$@" - -if [ $APTLINE_DOCKER -eq 1 ]; then - add_docker_aptline -fi - -sudo apt-get update -if apt-cache search docker-engine | grep docker-engine; then - DOCKER_PKG=docker-engine -else - DOCKER_PKG=docker.io -fi -sudo apt-get install -y $DOCKER_PKG -install_depends_pkg diff --git a/ryu/tests/integrated/common/install_docker_test_pkg_common.sh b/ryu/tests/integrated/common/install_docker_test_pkg_common.sh deleted file mode 100644 index 44a3e107..00000000 --- a/ryu/tests/integrated/common/install_docker_test_pkg_common.sh +++ /dev/null @@ -1,39 +0,0 @@ -#!/bin/bash -set -ex - -function init_variables { - APTLINE_DOCKER=0 - DIR_BASE=/tmp -} - -function process_options { - local max - local i - max=$# - i=1 - while [ $i -le $max ]; do - case "$1" in - -a|--add-docker-aptline) - APTLINE_DOCKER=1 - ;; - -d|--download-dir) - shift; ((i++)) - DIR_BASE=$1 - ;; - esac - shift; ((i++)) - done -} - -function install_pipework { - if ! which /usr/local/bin/pipework >/dev/null - then - sudo rm -rf $DIR_BASE/pipework - git clone https://github.com/jpetazzo/pipework.git $DIR_BASE/pipework - sudo install -m 0755 $DIR_BASE/pipework/pipework /usr/local/bin/pipework - fi -} - -function install_depends_pkg { - install_pipework -} diff --git a/ryu/tests/integrated/common/install_docker_test_pkg_for_travis.sh b/ryu/tests/integrated/common/install_docker_test_pkg_for_travis.sh deleted file mode 100644 index d8c3b499..00000000 --- a/ryu/tests/integrated/common/install_docker_test_pkg_for_travis.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -set -ex - -RYU_PATH=`dirname $0` - -source ${RYU_PATH}/install_docker_test_pkg_common.sh - -init_variables -process_options "$@" - -sudo apt-get update -install_depends_pkg diff --git a/ryu/tests/integrated/common/quagga.py b/ryu/tests/integrated/common/quagga.py deleted file mode 100644 index 9b6d2183..00000000 --- a/ryu/tests/integrated/common/quagga.py +++ /dev/null @@ -1,332 +0,0 @@ -# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. -# -# This is based on the following -# https://github.com/osrg/gobgp/test/lib/quagga.py -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import absolute_import - -import logging -import os - -import netaddr - -from . import docker_base as base - -LOG = logging.getLogger(__name__) - - -class QuaggaBGPContainer(base.BGPContainer): - - WAIT_FOR_BOOT = 1 - SHARED_VOLUME = '/etc/quagga' - - def __init__(self, name, asn, router_id, ctn_image_name, zebra=False): - super(QuaggaBGPContainer, self).__init__(name, asn, router_id, - ctn_image_name) - self.shared_volumes.append((self.config_dir, self.SHARED_VOLUME)) - self.zebra = zebra - self._create_config_debian() - - def run(self, wait=False, w_time=WAIT_FOR_BOOT): - w_time = super(QuaggaBGPContainer, - self).run(wait=wait, w_time=self.WAIT_FOR_BOOT) - return w_time - - def get_global_rib(self, prefix='', rf='ipv4'): - rib = [] - if prefix != '': - return self.get_global_rib_with_prefix(prefix, rf) - - out = self.vtysh('show bgp {0} unicast'.format(rf), config=False) - if out.startswith('No BGP network exists'): - return rib - - read_next = False - - for line in out.split('\n'): - ibgp = False - if line[:2] == '*>': - line = line[2:] - if line[0] == 'i': - line = line[1:] - ibgp = True - elif not read_next: - continue - - elems = line.split() - - if len(elems) == 1: - read_next = True - prefix = elems[0] - continue - elif read_next: - nexthop = elems[0] - else: - prefix = elems[0] - nexthop = elems[1] - read_next = False - - rib.append({'prefix': prefix, 'nexthop': nexthop, - 'ibgp': ibgp}) - - return rib - - def get_global_rib_with_prefix(self, prefix, rf): - rib = [] - - lines = [line.strip() for line in self.vtysh( - 'show bgp {0} unicast {1}'.format(rf, prefix), - config=False).split('\n')] - - if lines[0] == '% Network not in table': - return rib - - lines = lines[2:] - - if lines[0].startswith('Not advertised'): - lines.pop(0) # another useless line - elif lines[0].startswith('Advertised to non peer-group peers:'): - lines = lines[2:] # other useless lines - else: - raise Exception('unknown output format {0}'.format(lines)) - - if lines[0] == 'Local': - aspath = [] - else: - aspath = [int(asn) for asn in lines[0].split()] - - nexthop = lines[1].split()[0].strip() - info = [s.strip(',') for s in lines[2].split()] - attrs = [] - if 'metric' in info: - med = info[info.index('metric') + 1] - attrs.append({'type': base.BGP_ATTR_TYPE_MULTI_EXIT_DISC, - 'metric': int(med)}) - if 'localpref' in info: - localpref = info[info.index('localpref') + 1] - attrs.append({'type': base.BGP_ATTR_TYPE_LOCAL_PREF, - 'value': int(localpref)}) - - rib.append({'prefix': prefix, 'nexthop': nexthop, - 'aspath': aspath, 'attrs': attrs}) - - return rib - - def get_neighbor_state(self, peer): - if peer not in self.peers: - raise Exception('not found peer {0}'.format(peer.router_id)) - - neigh_addr = self.peers[peer]['neigh_addr'].split('/')[0] - - info = [l.strip() for l in self.vtysh( - 'show bgp neighbors {0}'.format(neigh_addr), - config=False).split('\n')] - - if not info[0].startswith('BGP neighbor is'): - raise Exception('unknown format') - - idx1 = info[0].index('BGP neighbor is ') - idx2 = info[0].index(',') - n_addr = info[0][idx1 + len('BGP neighbor is '):idx2] - if n_addr == neigh_addr: - idx1 = info[2].index('= ') - state = info[2][idx1 + len('= '):] - if state.startswith('Idle'): - return base.BGP_FSM_IDLE - elif state.startswith('Active'): - return base.BGP_FSM_ACTIVE - elif state.startswith('Established'): - return base.BGP_FSM_ESTABLISHED - else: - return state - - raise Exception('not found peer {0}'.format(peer.router_id)) - - def send_route_refresh(self): - self.vtysh('clear ip bgp * soft', config=False) - - def create_config(self): - zebra = 'no' - self._create_config_bgp() - if self.zebra: - zebra = 'yes' - self._create_config_zebra() - self._create_config_daemons(zebra) - - def _create_config_debian(self): - c = base.CmdBuffer() - c << 'vtysh_enable=yes' - c << 'zebra_options=" --daemon -A 127.0.0.1"' - c << 'bgpd_options=" --daemon -A 127.0.0.1"' - c << 'ospfd_options=" --daemon -A 127.0.0.1"' - c << 'ospf6d_options=" --daemon -A ::1"' - c << 'ripd_options=" --daemon -A 127.0.0.1"' - c << 'ripngd_options=" --daemon -A ::1"' - c << 'isisd_options=" --daemon -A 127.0.0.1"' - c << 'babeld_options=" --daemon -A 127.0.0.1"' - c << 'watchquagga_enable=yes' - c << 'watchquagga_options=(--daemon)' - with open('{0}/debian.conf'.format(self.config_dir), 'w') as f: - LOG.info("[%s's new config]", self.name) - LOG.info(str(c)) - f.writelines(str(c)) - - def _create_config_daemons(self, zebra='no'): - c = base.CmdBuffer() - c << 'zebra=%s' % zebra - c << 'bgpd=yes' - c << 'ospfd=no' - c << 'ospf6d=no' - c << 'ripd=no' - c << 'ripngd=no' - c << 'isisd=no' - c << 'babeld=no' - with open('{0}/daemons'.format(self.config_dir), 'w') as f: - LOG.info("[%s's new config]", self.name) - LOG.info(str(c)) - f.writelines(str(c)) - - def _create_config_bgp(self): - - c = base.CmdBuffer() - c << 'hostname bgpd' - c << 'password zebra' - c << 'router bgp {0}'.format(self.asn) - c << 'bgp router-id {0}'.format(self.router_id) - if any(info['graceful_restart'] for info in self.peers.values()): - c << 'bgp graceful-restart' - - version = 4 - for peer, info in self.peers.items(): - version = netaddr.IPNetwork(info['neigh_addr']).version - n_addr = info['neigh_addr'].split('/')[0] - if version == 6: - c << 'no bgp default ipv4-unicast' - - c << 'neighbor {0} remote-as {1}'.format(n_addr, peer.asn) - if info['is_rs_client']: - c << 'neighbor {0} route-server-client'.format(n_addr) - for typ, p in info['policies'].items(): - c << 'neighbor {0} route-map {1} {2}'.format(n_addr, p['name'], - typ) - if info['passwd']: - c << 'neighbor {0} password {1}'.format(n_addr, info['passwd']) - if info['passive']: - c << 'neighbor {0} passive'.format(n_addr) - if version == 6: - c << 'address-family ipv6 unicast' - c << 'neighbor {0} activate'.format(n_addr) - c << 'exit-address-family' - - for route in self.routes.values(): - if route['rf'] == 'ipv4': - c << 'network {0}'.format(route['prefix']) - elif route['rf'] == 'ipv6': - c << 'address-family ipv6 unicast' - c << 'network {0}'.format(route['prefix']) - c << 'exit-address-family' - else: - raise Exception( - 'unsupported route faily: {0}'.format(route['rf'])) - - if self.zebra: - if version == 6: - c << 'address-family ipv6 unicast' - c << 'redistribute connected' - c << 'exit-address-family' - else: - c << 'redistribute connected' - - for name, policy in self.policies.items(): - c << 'access-list {0} {1} {2}'.format(name, policy['type'], - policy['match']) - c << 'route-map {0} permit 10'.format(name) - c << 'match ip address {0}'.format(name) - c << 'set metric {0}'.format(policy['med']) - - c << 'debug bgp as4' - c << 'debug bgp fsm' - c << 'debug bgp updates' - c << 'debug bgp events' - c << 'log file {0}/bgpd.log'.format(self.SHARED_VOLUME) - - with open('{0}/bgpd.conf'.format(self.config_dir), 'w') as f: - LOG.info("[%s's new config]", self.name) - LOG.info(str(c)) - f.writelines(str(c)) - - def _create_config_zebra(self): - c = base.CmdBuffer() - c << 'hostname zebra' - c << 'password zebra' - c << 'log file {0}/zebra.log'.format(self.SHARED_VOLUME) - c << 'debug zebra packet' - c << 'debug zebra kernel' - c << 'debug zebra rib' - c << '' - - with open('{0}/zebra.conf'.format(self.config_dir), 'w') as f: - LOG.info("[%s's new config]", self.name) - LOG.info(str(c)) - f.writelines(str(c)) - - def vtysh(self, cmd, config=True): - if not isinstance(cmd, list): - cmd = [cmd] - cmd = ' '.join("-c '{0}'".format(c) for c in cmd) - if config: - return self.exec_on_ctn( - "vtysh -d bgpd -c 'en' -c 'conf t' -c " - "'router bgp {0}' {1}".format(self.asn, cmd), - capture=True) - else: - return self.exec_on_ctn("vtysh -d bgpd {0}".format(cmd), - capture=True) - - def reload_config(self): - daemon = [] - daemon.append('bgpd') - if self.zebra: - daemon.append('zebra') - for d in daemon: - cmd = '/usr/bin/pkill {0} -SIGHUP'.format(d) - self.exec_on_ctn(cmd, capture=True) - - -class RawQuaggaBGPContainer(QuaggaBGPContainer): - def __init__(self, name, config, ctn_image_name, - zebra=False): - asn = None - router_id = None - for line in config.split('\n'): - line = line.strip() - if line.startswith('router bgp'): - asn = int(line[len('router bgp'):].strip()) - if line.startswith('bgp router-id'): - router_id = line[len('bgp router-id'):].strip() - if not asn: - raise Exception('asn not in quagga config') - if not router_id: - raise Exception('router-id not in quagga config') - self.config = config - super(RawQuaggaBGPContainer, self).__init__(name, asn, router_id, - ctn_image_name, zebra) - - def create_config(self): - with open(os.path.join(self.config_dir, 'bgpd.conf'), 'w') as f: - LOG.info("[%s's new config]", self.name) - LOG.info(self.config) - f.writelines(self.config) diff --git a/ryu/tests/integrated/common/ryubgp.py b/ryu/tests/integrated/common/ryubgp.py deleted file mode 100644 index 8fe16f49..00000000 --- a/ryu/tests/integrated/common/ryubgp.py +++ /dev/null @@ -1,212 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import absolute_import - -import logging -import os -import time - -from . import docker_base as base - -LOG = logging.getLogger(__name__) - - -class RyuBGPContainer(base.BGPContainer): - - WAIT_FOR_BOOT = 1 - SHARED_VOLUME = '/etc/ryu' - - def __init__(self, name, asn, router_id, ctn_image_name): - super(RyuBGPContainer, self).__init__(name, asn, router_id, - ctn_image_name) - self.RYU_CONF = os.path.join(self.config_dir, 'ryu.conf') - self.SHARED_RYU_CONF = os.path.join(self.SHARED_VOLUME, 'ryu.conf') - self.SHARED_BGP_CONF = os.path.join(self.SHARED_VOLUME, 'bgp_conf.py') - self.shared_volumes.append((self.config_dir, self.SHARED_VOLUME)) - - def _create_config_ryu(self): - c = base.CmdBuffer() - c << '[DEFAULT]' - c << 'verbose=True' - c << 'log_file=/etc/ryu/manager.log' - with open(self.RYU_CONF, 'w') as f: - LOG.info("[%s's new config]" % self.name) - LOG.info(str(c)) - f.writelines(str(c)) - - def _create_config_ryu_bgp(self): - c = base.CmdBuffer() - c << 'import os' - c << '' - c << 'BGP = {' - c << " 'local_as': %s," % str(self.asn) - c << " 'router_id': '%s'," % self.router_id - c << " 'neighbors': [" - c << " {" - for peer, info in self.peers.items(): - n_addr = info['neigh_addr'].split('/')[0] - c << " 'address': '%s'," % n_addr - c << " 'remote_as': %s," % str(peer.asn) - c << " 'enable_ipv4': True," - c << " 'enable_ipv6': True," - c << " 'enable_vpnv4': True," - c << " 'enable_vpnv6': True," - c << ' },' - c << ' ],' - c << " 'routes': [" - for route in self.routes.values(): - c << " {" - c << " 'prefix': '%s'," % route['prefix'] - c << " }," - c << " ]," - c << "}" - log_conf = """LOGGING = { - - # We use python logging package for logging. - 'version': 1, - 'disable_existing_loggers': False, - - 'formatters': { - 'verbose': { - 'format': '%(levelname)s %(asctime)s %(module)s ' + - '[%(process)d %(thread)d] %(message)s' - }, - 'simple': { - 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)s ' + - '%(message)s' - }, - 'stats': { - 'format': '%(message)s' - }, - }, - - 'handlers': { - # Outputs log to console. - 'console': { - 'level': 'DEBUG', - 'class': 'logging.StreamHandler', - 'formatter': 'simple' - }, - 'console_stats': { - 'level': 'DEBUG', - 'class': 'logging.StreamHandler', - 'formatter': 'stats' - }, - # Rotates log file when its size reaches 10MB. - 'log_file': { - 'level': 'DEBUG', - 'class': 'logging.handlers.RotatingFileHandler', - 'filename': os.path.join('.', 'bgpspeaker.log'), - 'maxBytes': '10000000', - 'formatter': 'verbose' - }, - 'stats_file': { - 'level': 'DEBUG', - 'class': 'logging.handlers.RotatingFileHandler', - 'filename': os.path.join('.', 'statistics_bgps.log'), - 'maxBytes': '10000000', - 'formatter': 'stats' - }, - }, - - # Fine-grained control of logging per instance. - 'loggers': { - 'bgpspeaker': { - 'handlers': ['console', 'log_file'], - 'handlers': ['console'], - 'level': 'DEBUG', - 'propagate': False, - }, - 'stats': { - 'handlers': ['stats_file', 'console_stats'], - 'level': 'INFO', - 'propagate': False, - 'formatter': 'stats', - }, - }, - - # Root loggers. - 'root': { - 'handlers': ['console', 'log_file'], - 'level': 'DEBUG', - 'propagate': True, - }, -}""" - c << log_conf - with open(os.path.join(self.config_dir, 'bgp_conf.py'), 'w') as f: - LOG.info("[%s's new config]", self.name) - LOG.info(str(c)) - f.writelines(str(c)) - - def create_config(self): - self._create_config_ryu() - self._create_config_ryu_bgp() - - def is_running_ryu(self): - results = self.exec_on_ctn('ps ax') - running = False - for line in results.split('\n')[1:]: - if 'ryu-manager' in line: - running = True - return running - - def start_ryubgp(self, check_running=True, retry=False): - if check_running: - if self.is_running_ryu(): - return True - result = False - if retry: - try_times = 3 - else: - try_times = 1 - cmd = "ryu-manager --verbose " - cmd += "--config-file %s " % self.SHARED_RYU_CONF - cmd += "--bgp-app-config-file %s " % self.SHARED_BGP_CONF - cmd += "ryu.services.protocols.bgp.application" - for _ in range(try_times): - self.exec_on_ctn(cmd, detach=True) - if self.is_running_ryu(): - result = True - break - time.sleep(1) - return result - - def stop_ryubgp(self, check_running=True, retry=False): - if check_running: - if not self.is_running_ryu(): - return True - result = False - if retry: - try_times = 3 - else: - try_times = 1 - for _ in range(try_times): - cmd = '/usr/bin/pkill ryu-manager -SIGTERM' - self.exec_on_ctn(cmd) - if not self.is_running_ryu(): - result = True - break - time.sleep(1) - return result - - def run(self, wait=False, w_time=WAIT_FOR_BOOT): - w_time = super(RyuBGPContainer, - self).run(wait=wait, w_time=self.WAIT_FOR_BOOT) - return w_time - - def reload_config(self): - self.stop_ryubgp(retry=True) - self.start_ryubgp(retry=True) diff --git a/ryu/tests/integrated/run_test.py b/ryu/tests/integrated/run_test.py deleted file mode 100644 index 2aca03db..00000000 --- a/ryu/tests/integrated/run_test.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2016 Fumihiko Kakuma -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import absolute_import - -import logging -import os -import sys -import unittest - -from ryu import log - - -def load_tests(loader, tests, pattern): - dirname = os.path.dirname(os.path.abspath(__file__)) - base_path = os.path.abspath(dirname + '/../../..') - suite = unittest.TestSuite() - for test_dir in ['ryu/tests/integrated/bgp']: - if not pattern: - suite.addTests(loader.discover(test_dir, - top_level_dir=base_path)) - else: - suite.addTests(loader.discover(test_dir, pattern=pattern, - top_level_dir=base_path)) - return suite - - -if __name__ == '__main__': - log.early_init_log(logging.DEBUG) - log.init_log() - LOG = logging.getLogger(__name__) - pattern = None - if len(sys.argv) == 2: - pattern = sys.argv[1] - loader = unittest.defaultTestLoader - suite = load_tests(loader, None, pattern) - res = unittest.TextTestRunner(verbosity=2).run(suite) - ret = 0 - if res.errors or res.failures: - ret = 1 - sys.exit(ret) diff --git a/ryu/tests/integrated/run_tests_with_ovs12.py b/ryu/tests/integrated/run_tests_with_ovs12.py deleted file mode 100755 index 9d82d370..00000000 --- a/ryu/tests/integrated/run_tests_with_ovs12.py +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env python -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import unittest -from nose.tools import ok_, eq_, timed, nottest - -from subprocess import Popen, PIPE, STDOUT -import time - -from mininet.net import Mininet -from mininet.node import RemoteController, OVSKernelSwitch - -TIMEOUT = 60 -RYU_HOST = '127.0.0.1' -RYU_PORT = 6633 -PYTHON_BIN = '.venv/bin/python' -RYU_MGR = './bin/ryu-manager' - - -class OVS12KernelSwitch(OVSKernelSwitch): - """Set protocols parameter for OVS version 1.10""" - def start(self, controllers): - super(OVS12KernelSwitch, self).start(controllers) - self.cmd('ovs-vsctl set Bridge', self, - "protocols='[OpenFlow10, OpenFlow12]'") - - -class TestWithOVS12(unittest.TestCase): - @classmethod - def setUpClass(cls): - cls.mn = Mininet() - c = cls.mn.addController(controller=RemoteController, - ip=RYU_HOST, port=RYU_PORT) - c.start() - - s1 = cls.mn.addSwitch('s1', cls=OVS12KernelSwitch) - s1.start(cls.mn.controllers) - - h1 = cls.mn.addHost('h1', ip='0.0.0.0/0') - - link = cls.mn.addLink(h1, s1) - s1.attach(link.intf2) - - @classmethod - def tearDownClass(cls): - cls.mn.stop() - - @timed(TIMEOUT) - def test_add_flow_v10(self): - app = 'ryu/tests/integrated/test_add_flow_v10.py' - self._run_ryu_manager_and_check_output(app) - - @timed(TIMEOUT) - def test_request_reply_v12(self): - app = 'ryu/tests/integrated/test_request_reply_v12.py' - self._run_ryu_manager_and_check_output(app) - - @timed(TIMEOUT) - def test_add_flow_v12_actions(self): - app = 'ryu/tests/integrated/test_add_flow_v12_actions.py' - self._run_ryu_manager_and_check_output(app) - - @timed(TIMEOUT) - def test_add_flow_v12_matches(self): - app = 'ryu/tests/integrated/test_add_flow_v12_matches.py' - self._run_ryu_manager_and_check_output(app) - - @nottest - def test_of_config(self): - # OVS 1.10 does not support of_config - pass - - def _run_ryu_manager_and_check_output(self, app): - cmd = [PYTHON_BIN, RYU_MGR, app] - p = Popen(cmd, stdout=PIPE, stderr=STDOUT) - - while True: - if p.poll() is not None: - raise Exception('Another ryu-manager already running?') - - line = p.stdout.readline().strip() - if line == '': - time.sleep(1) - continue - - print("ryu-manager: %s" % line) - if line.find('TEST_FINISHED') != -1: - ok_(line.find('Completed=[True]') != -1) - p.terminate() - p.communicate() # wait for subprocess is terminated - break - - -if __name__ == '__main__': - unittest.main() diff --git a/ryu/tests/integrated/test_add_flow_v10.py b/ryu/tests/integrated/test_add_flow_v10.py deleted file mode 100644 index 6a09646c..00000000 --- a/ryu/tests/integrated/test_add_flow_v10.py +++ /dev/null @@ -1,257 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import logging - -from ryu.tests.integrated import tester -from ryu.ofproto import ofproto_v1_0 -from ryu.ofproto import ether -from ryu.ofproto import nx_match - -LOG = logging.getLogger(__name__) - - -class RunTest(tester.TestFlowBase): - """ Test case for add flows of1.0 - """ - OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION] - - def __init__(self, *args, **kwargs): - super(RunTest, self).__init__(*args, **kwargs) - self._verify = [] - - def add_action(self, dp, action): - rule = nx_match.ClsRule() - self.send_flow_mod( - dp, rule, 0, dp.ofproto.OFPFC_ADD, 0, 0, None, - 0xffffffff, None, dp.ofproto.OFPFF_SEND_FLOW_REM, action) - - def add_rule(self, dp, rule): - self.send_flow_mod( - dp, rule, 0, dp.ofproto.OFPFC_ADD, 0, 0, None, - 0xffffffff, None, dp.ofproto.OFPFF_SEND_FLOW_REM, []) - - def send_flow_mod(self, dp, rule, cookie, command, idle_timeout, - hard_timeout, priority=None, buffer_id=0xffffffff, - out_port=None, flags=0, actions=None): - - if priority is None: - priority = dp.ofproto.OFP_DEFAULT_PRIORITY - if out_port is None: - out_port = dp.ofproto.OFPP_NONE - - match_tuple = rule.match_tuple() - match = dp.ofproto_parser.OFPMatch(*match_tuple) - - m = dp.ofproto_parser.OFPFlowMod( - dp, match, cookie, command, idle_timeout, hard_timeout, - priority, buffer_id, out_port, flags, actions) - - dp.send_msg(m) - - def _verify_action(self, actions, type_, name, value): - try: - action = actions[0] - if action.cls_action_type != type_: - return "Action type error. send:%s, val:%s" \ - % (type_, action.cls_action_type) - except IndexError: - return "Action is not setting." - - f_value = None - if name: - try: - if isinstance(name, list): - f_value = [getattr(action, n) for n in name] - else: - f_value = getattr(action, name) - except AttributeError: - pass - - if f_value != value: - return "Value error. send:%s=%s val:%s" \ - % (name, value, f_value) - return True - - def _verify_rule(self, rule, name, value): - f_value = getattr(rule, name) - if f_value != value: - return "Value error. send:%s=%s val:%s" \ - % (name, value, f_value) - return True - - def verify_default(self, dp, stats): - verify = self._verify - self._verify = [] - match = stats[0].match - actions = stats[0].actions - - if len(verify) == 2: - return self._verify_rule(match, *verify) - elif len(verify) == 3: - return self._verify_action(actions, *verify) - else: - return "self._verify is invalid." - - # Test of Actions - def test_action_output(self, dp): - out_port = 2 - self._verify = [dp.ofproto.OFPAT_OUTPUT, - 'port', out_port] - action = dp.ofproto_parser.OFPActionOutput(out_port) - self.add_action(dp, [action, ]) - - def test_action_vlan_vid(self, dp): - vlan_vid = 2 - self._verify = [dp.ofproto.OFPAT_SET_VLAN_VID, - 'vlan_vid', vlan_vid] - action = dp.ofproto_parser.OFPActionVlanVid(vlan_vid) - self.add_action(dp, [action, ]) - - def test_action_vlan_pcp(self, dp): - vlan_pcp = 4 - self._verify = [dp.ofproto.OFPAT_SET_VLAN_PCP, - 'vlan_pcp', vlan_pcp] - action = dp.ofproto_parser.OFPActionVlanPcp(vlan_pcp) - self.add_action(dp, [action, ]) - - def test_action_strip_vlan(self, dp): - vlan_pcp = 4 - self._verify = [dp.ofproto.OFPAT_STRIP_VLAN, - None, None] - action = dp.ofproto_parser.OFPActionStripVlan() - self.add_action(dp, [action, ]) - - def test_action_set_dl_src(self, dp): - dl_src = '56:b3:42:04:b2:7a' - dl_src_bin = self.haddr_to_bin(dl_src) - self._verify = [dp.ofproto.OFPAT_SET_DL_SRC, - 'dl_addr', dl_src_bin] - action = dp.ofproto_parser.OFPActionSetDlSrc(dl_src_bin) - self.add_action(dp, [action, ]) - - def test_action_set_dl_dst(self, dp): - dl_dst = 'c2:93:a2:fb:d0:f4' - dl_dst_bin = self.haddr_to_bin(dl_dst) - self._verify = [dp.ofproto.OFPAT_SET_DL_DST, - 'dl_addr', dl_dst_bin] - action = dp.ofproto_parser.OFPActionSetDlDst(dl_dst_bin) - self.add_action(dp, [action, ]) - - def test_action_set_nw_src(self, dp): - nw_src = '216.132.81.105' - nw_src_int = self.ipv4_to_int(nw_src) - self._verify = [dp.ofproto.OFPAT_SET_NW_SRC, - 'nw_addr', nw_src_int] - action = dp.ofproto_parser.OFPActionSetNwSrc(nw_src_int) - self.add_action(dp, [action, ]) - - def test_action_set_nw_dst(self, dp): - nw_dst = '223.201.206.3' - nw_dst_int = self.ipv4_to_int(nw_dst) - self._verify = [dp.ofproto.OFPAT_SET_NW_DST, - 'nw_addr', nw_dst_int] - action = dp.ofproto_parser.OFPActionSetNwDst(nw_dst_int) - self.add_action(dp, [action, ]) - - def test_action_set_nw_tos(self, dp): - # lowest two bits must be zero - nw_tos = 1 << 2 - self._verify = [dp.ofproto.OFPAT_SET_NW_TOS, - 'tos', nw_tos] - action = dp.ofproto_parser.OFPActionSetNwTos(nw_tos) - self.add_action(dp, [action, ]) - - def test_action_set_tp_src(self, dp): - tp_src = 55420 - self._verify = [dp.ofproto.OFPAT_SET_TP_SRC, - 'tp', tp_src] - action = dp.ofproto_parser.OFPActionSetTpSrc(tp_src) - self.add_action(dp, [action, ]) - - def test_action_set_tp_dst(self, dp): - tp_dst = 15430 - self._verify = [dp.ofproto.OFPAT_SET_TP_DST, - 'tp', tp_dst] - action = dp.ofproto_parser.OFPActionSetTpDst(tp_dst) - self.add_action(dp, [action, ]) - - def test_action_enqueue(self, dp): - port = 207 - queue_id = 4287508753 - self._verify = [dp.ofproto.OFPAT_ENQUEUE, - ['port', 'queue_id'], [port, queue_id]] - action = dp.ofproto_parser.OFPActionEnqueue(port, queue_id) - self.add_action(dp, [action, ]) - - # Test of Rules - def test_rule_set_in_port(self, dp): - in_port = 32 - self._verify = ['in_port', in_port] - - rule = nx_match.ClsRule() - rule.set_in_port(in_port) - self.add_rule(dp, rule) - - def test_rule_set_dl_src(self, dp): - dl_src = 'b8:a1:94:51:78:83' - dl_src_bin = self.haddr_to_bin(dl_src) - self._verify = ['dl_src', dl_src_bin] - - rule = nx_match.ClsRule() - rule.set_dl_src(dl_src_bin) - self.add_rule(dp, rule) - - def test_rule_set_dl_type_ip(self, dp): - dl_type = ether.ETH_TYPE_IP - self._verify = ['dl_type', dl_type] - - rule = nx_match.ClsRule() - rule.set_dl_type(dl_type) - self.add_rule(dp, rule) - - def test_rule_set_dl_type_arp(self, dp): - dl_type = ether.ETH_TYPE_ARP - self._verify = ['dl_type', dl_type] - - rule = nx_match.ClsRule() - rule.set_dl_type(dl_type) - self.add_rule(dp, rule) - - def test_rule_set_dl_type_vlan(self, dp): - dl_type = ether.ETH_TYPE_8021Q - self._verify = ['dl_type', dl_type] - - rule = nx_match.ClsRule() - rule.set_dl_type(dl_type) - self.add_rule(dp, rule) - - def test_rule_set_dl_type_ipv6(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - self._verify = ['dl_type', dl_type] - - rule = nx_match.ClsRule() - rule.set_dl_type(dl_type) - self.add_rule(dp, rule) - - def test_rule_set_dl_type_lacp(self, dp): - dl_type = ether.ETH_TYPE_SLOW - self._verify = ['dl_type', dl_type] - - rule = nx_match.ClsRule() - rule.set_dl_type(dl_type) - self.add_rule(dp, rule) diff --git a/ryu/tests/integrated/test_add_flow_v12_actions.py b/ryu/tests/integrated/test_add_flow_v12_actions.py deleted file mode 100644 index 7c75aa53..00000000 --- a/ryu/tests/integrated/test_add_flow_v12_actions.py +++ /dev/null @@ -1,495 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import logging - -from ryu.ofproto import ofproto_v1_2 -from ryu.ofproto import ether -from ryu.ofproto import inet -from ryu.tests.integrated import tester - -LOG = logging.getLogger(__name__) - - -class RunTest(tester.TestFlowBase): - """ Test case for add flows of Actions - """ - OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] - - def __init__(self, *args, **kwargs): - super(RunTest, self).__init__(*args, **kwargs) - - self._verify = [] - - def add_apply_actions(self, dp, actions, match=None): - inst = [dp.ofproto_parser.OFPInstructionActions( - dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] - if match is None: - match = dp.ofproto_parser.OFPMatch() - m = dp.ofproto_parser.OFPFlowMod(dp, 0, 0, 0, - dp.ofproto.OFPFC_ADD, - 0, 0, 0xff, 0xffffffff, - dp.ofproto.OFPP_ANY, - dp.ofproto.OFPG_ANY, - 0, match, inst) - dp.send_msg(m) - - def add_set_field_action(self, dp, field, value, match=None): - self._verify = [dp.ofproto.OFPAT_SET_FIELD, - 'field', field, value] - f = dp.ofproto_parser.OFPMatchField.make(field, value) - actions = [dp.ofproto_parser.OFPActionSetField(f), ] - self.add_apply_actions(dp, actions, match=match) - - def verify_default(self, dp, stats): - verify = self._verify - self._verify = [] - - type_ = name = field = value = None - if len(verify) == 1: - (type_, ) = verify - elif len(verify) == 3: - (type_, name, value) = verify - elif len(verify) == 4: - (type_, name, field, value) = verify - else: - return "self._verify is invalid." - - try: - action = stats[0].instructions[0].actions[0] - if action.cls_action_type != type_: - return "Action type error. send:%s, val:%s" \ - % (type_, action.cls_action_type) - except IndexError: - return "Action is not setting." - - s_val = None - if name: - try: - s_val = getattr(action, name) - except AttributeError: - pass - - if name == 'field': - if s_val.header != field: - return "Field error. send:%s val:%s" \ - % (field, s_val.header) - s_val = s_val.value - - if name and s_val != value: - return "Value error. send:%s=%s val:%s" \ - % (name, value, s_val) - - return True - - def verify_action_drop(self, dp, stats): - for s in stats: - for i in s.instructions: - if len(i.actions): - return "has actions. %s" % (i.actions) - return True - - # Test of General Actions - def test_action_output(self, dp): - out_port = 255 - self._verify = [dp.ofproto.OFPAT_OUTPUT, - 'port', out_port] - - actions = [dp.ofproto_parser.OFPActionOutput(out_port, 0), ] - self.add_apply_actions(dp, actions) - - def test_action_drop(self, dp): - self.add_apply_actions(dp, []) - - # Test of Push-Tag/Pop-Tag Actions - def test_action_push_vlan(self, dp): - ethertype = ether.ETH_TYPE_8021Q - self._verify = [dp.ofproto.OFPAT_PUSH_VLAN, - 'ethertype', ethertype] - - actions = [dp.ofproto_parser.OFPActionPushVlan(ethertype)] - self.add_apply_actions(dp, actions) - - def test_action_pop_vlan(self, dp): - self._verify = [dp.ofproto.OFPAT_POP_VLAN, ] - - actions = [dp.ofproto_parser.OFPActionPopVlan(), ] - match = dp.ofproto_parser.OFPMatch() - match.set_vlan_vid(1) - self.add_apply_actions(dp, actions, match) - - def test_action_push_mpls(self, dp): - ethertype = ether.ETH_TYPE_MPLS - self._verify = [dp.ofproto.OFPAT_PUSH_MPLS, - 'ethertype', ethertype] - - actions = [dp.ofproto_parser.OFPActionPushMpls(ethertype), ] - self.add_apply_actions(dp, actions) - - def test_action_pop_mpls(self, dp): - ethertype = ether.ETH_TYPE_8021Q - self._verify = [dp.ofproto.OFPAT_POP_MPLS, - 'ethertype', ethertype] - actions = [dp.ofproto_parser.OFPActionPopMpls(ethertype), ] - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_MPLS) - self.add_apply_actions(dp, actions, match) - - # Test of Set-Filed Actions - def test_action_set_field_dl_dst(self, dp): - field = dp.ofproto.OXM_OF_ETH_DST - dl_dst = 'e2:7a:09:79:0b:0f' - value = self.haddr_to_bin(dl_dst) - - self.add_set_field_action(dp, field, value) - - def test_action_set_field_dl_src(self, dp): - field = dp.ofproto.OXM_OF_ETH_SRC - dl_src = '08:82:63:b6:62:05' - value = self.haddr_to_bin(dl_src) - - self.add_set_field_action(dp, field, value) - - def test_action_set_field_dl_type(self, dp): - field = dp.ofproto.OXM_OF_ETH_TYPE - value = ether.ETH_TYPE_IPV6 - - self.add_set_field_action(dp, field, value) - - def test_action_set_field_vlan_vid(self, dp): - field = dp.ofproto.OXM_OF_VLAN_VID - value = 0x1e4 - - match = dp.ofproto_parser.OFPMatch() - match.set_vlan_vid(1) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_vlan_pcp(self, dp): - field = dp.ofproto.OXM_OF_VLAN_PCP - value = 3 - - match = dp.ofproto_parser.OFPMatch() - match.set_vlan_vid(1) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_nw_dscp(self, dp): - field = dp.ofproto.OXM_OF_IP_DSCP - value = 32 - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_IP) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_nw_ecn(self, dp): - field = dp.ofproto.OXM_OF_IP_ECN - value = 1 - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_IP) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_ip_proto(self, dp): - field = dp.ofproto.OXM_OF_IP_PROTO - value = inet.IPPROTO_TCP - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_IP) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_ipv4_src(self, dp): - field = dp.ofproto.OXM_OF_IPV4_SRC - ipv4_src = '192.168.3.92' - value = self.ipv4_to_int(ipv4_src) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_IP) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_ipv4_dst(self, dp): - field = dp.ofproto.OXM_OF_IPV4_DST - ipv4_dst = '192.168.74.122' - value = self.ipv4_to_int(ipv4_dst) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_IP) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_tcp_src(self, dp): - field = dp.ofproto.OXM_OF_TCP_SRC - value = 105 - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_IP) - match.set_ip_proto(inet.IPPROTO_TCP) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_tcp_dst(self, dp): - field = dp.ofproto.OXM_OF_TCP_DST - value = 75 - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_IP) - match.set_ip_proto(inet.IPPROTO_TCP) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_udp_src(self, dp): - field = dp.ofproto.OXM_OF_UDP_SRC - value = 197 - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_IP) - match.set_ip_proto(inet.IPPROTO_UDP) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_udp_dst(self, dp): - field = dp.ofproto.OXM_OF_UDP_DST - value = 17 - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_IP) - match.set_ip_proto(inet.IPPROTO_UDP) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_icmpv4_type(self, dp): - field = dp.ofproto.OXM_OF_ICMPV4_TYPE - value = 8 - - match = dp.ofproto_parser.OFPMatch() - match.set_ip_proto(inet.IPPROTO_ICMP) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_icmpv4_code(self, dp): - field = dp.ofproto.OXM_OF_ICMPV4_CODE - value = 2 - - match = dp.ofproto_parser.OFPMatch() - match.set_ip_proto(inet.IPPROTO_ICMP) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_arp_op(self, dp): - field = dp.ofproto.OXM_OF_ARP_OP - value = 2 - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_ARP) - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_arp_spa(self, dp): - field = dp.ofproto.OXM_OF_ARP_SPA - nw_src = '192.168.132.179' - value = self.ipv4_to_int(nw_src) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_ARP) - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_arp_tpa(self, dp): - field = dp.ofproto.OXM_OF_ARP_TPA - nw_dst = '192.168.118.85' - value = self.ipv4_to_int(nw_dst) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_ARP) - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_arp_sha(self, dp): - field = dp.ofproto.OXM_OF_ARP_SHA - arp_sha = '50:29:e7:7f:6c:7f' - value = self.haddr_to_bin(arp_sha) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_ARP) - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_arp_tha(self, dp): - field = dp.ofproto.OXM_OF_ARP_THA - arp_tha = '71:c8:72:2f:47:fd' - value = self.haddr_to_bin(arp_tha) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_ARP) - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_ipv6_src(self, dp): - field = dp.ofproto.OXM_OF_IPV6_SRC - ipv6_src = '7527:c798:c772:4a18:117a:14ff:c1b6:e4ef' - value = self.ipv6_to_int(ipv6_src) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(0x86dd) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_ipv6_dst(self, dp): - field = dp.ofproto.OXM_OF_IPV6_DST - ipv6_dst = '8893:65b3:6b49:3bdb:3d2:9401:866c:c96' - value = self.ipv6_to_int(ipv6_dst) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(0x86dd) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_ipv6_flabel(self, dp): - field = dp.ofproto.OXM_OF_IPV6_FLABEL - value = 0x2c12 - - self.add_set_field_action(dp, field, value) - - def test_action_set_field_icmpv6_type(self, dp): - field = dp.ofproto.OXM_OF_ICMPV6_TYPE - value = 129 - - self.add_set_field_action(dp, field, value) - - def test_action_set_field_icmpv6_code(self, dp): - field = dp.ofproto.OXM_OF_ICMPV6_CODE - value = 2 - - self.add_set_field_action(dp, field, value) - - def test_action_set_field_ipv6_nd_target(self, dp): - field = dp.ofproto.OXM_OF_IPV6_ND_TARGET - target = "5420:db3f:921b:3e33:2791:98f:dd7f:2e19" - value = self.ipv6_to_int(target) - - self.add_set_field_action(dp, field, value) - - def test_action_set_field_ipv6_nd_sll(self, dp): - field = dp.ofproto.OXM_OF_IPV6_ND_SLL - sll = "54:db:3f:3e:27:19" - value = self.haddr_to_bin(sll) - - self.add_set_field_action(dp, field, value) - - def test_action_set_field_ipv6_nd_tll(self, dp): - field = dp.ofproto.OXM_OF_IPV6_ND_TLL - tll = "83:13:48:1e:d0:b0" - value = self.haddr_to_bin(tll) - - self.add_set_field_action(dp, field, value) - - def test_action_set_field_mpls_label(self, dp): - field = dp.ofproto.OXM_OF_MPLS_LABEL - value = 0x4c - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_MPLS) - - self.add_set_field_action(dp, field, value, match) - - def test_action_set_field_mpls_tc(self, dp): - field = dp.ofproto.OXM_OF_MPLS_TC - value = 0b101 - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_MPLS) - - self.add_set_field_action(dp, field, value, match) - - # Test of Change-TTL Actions - def test_action_set_mpls_ttl(self, dp): - mpls_ttl = 8 - self._verify = [dp.ofproto.OFPAT_SET_MPLS_TTL, - 'mpls_ttl', mpls_ttl] - actions = [dp.ofproto_parser.OFPActionSetMplsTtl(mpls_ttl), ] - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_MPLS) - self.add_apply_actions(dp, actions, match) - - def test_action_dec_mpls_ttl(self, dp): - self._verify = [dp.ofproto.OFPAT_DEC_MPLS_TTL] - actions = [dp.ofproto_parser.OFPActionDecMplsTtl(), ] - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(ether.ETH_TYPE_MPLS) - self.add_apply_actions(dp, actions, match) - - def test_action_set_nw_ttl_ipv4(self, dp): - nw_ttl = 64 - self._verify = [dp.ofproto.OFPAT_SET_NW_TTL, - 'nw_ttl', nw_ttl] - actions = [dp.ofproto_parser.OFPActionSetNwTtl(nw_ttl), ] - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(0x0800) - self.add_apply_actions(dp, actions, match) - - def test_action_set_nw_ttl_ipv6(self, dp): - nw_ttl = 64 - self._verify = [dp.ofproto.OFPAT_SET_NW_TTL, - 'nw_ttl', nw_ttl] - actions = [dp.ofproto_parser.OFPActionSetNwTtl(nw_ttl), ] - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(0x86dd) - self.add_apply_actions(dp, actions, match) - - def test_action_dec_nw_ttl_ipv4(self, dp): - self._verify = [dp.ofproto.OFPAT_DEC_NW_TTL] - actions = [dp.ofproto_parser.OFPActionDecNwTtl(), ] - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(0x0800) - self.add_apply_actions(dp, actions, match) - - def test_action_dec_nw_ttl_ipv6(self, dp): - self._verify = [dp.ofproto.OFPAT_DEC_NW_TTL] - actions = [dp.ofproto_parser.OFPActionDecNwTtl(), ] - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(0x86dd) - self.add_apply_actions(dp, actions, match) - - def test_action_copy_ttl_out(self, dp): - self._verify = [dp.ofproto.OFPAT_COPY_TTL_OUT] - actions = [dp.ofproto_parser.OFPActionCopyTtlOut(), ] - self.add_apply_actions(dp, actions) - - def test_action_copy_ttl_in(self, dp): - self._verify = [dp.ofproto.OFPAT_COPY_TTL_IN] - actions = [dp.ofproto_parser.OFPActionCopyTtlIn(), ] - self.add_apply_actions(dp, actions) - - def is_supported(self, t): - # Open vSwitch 1.10 does not support MPLS yet. - unsupported = [ - 'test_action_set_field_ip_proto', - 'test_action_set_field_dl_type', - 'test_action_set_field_icmp', - 'test_action_set_field_icmpv6_code', - 'test_action_set_field_icmpv6_type', - 'test_action_set_field_ipv6_flabel', - 'test_action_set_field_ipv6_nd_sll', - 'test_action_set_field_ipv6_nd_target', - 'test_action_set_field_ipv6_nd_tll', - 'test_action_copy_ttl_in', - 'test_action_copy_ttl_out' - ] - for u in unsupported: - if t.find(u) != -1: - return False - - return True diff --git a/ryu/tests/integrated/test_add_flow_v12_matches.py b/ryu/tests/integrated/test_add_flow_v12_matches.py deleted file mode 100644 index 588855a6..00000000 --- a/ryu/tests/integrated/test_add_flow_v12_matches.py +++ /dev/null @@ -1,1199 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import logging - -from ryu.ofproto import ofproto_v1_2 -from ryu.ofproto import ether -from ryu.ofproto import inet -from ryu.tests.integrated import tester - -LOG = logging.getLogger(__name__) - - -class RunTest(tester.TestFlowBase): - """ Test case for add flows of Matches - """ - OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] - - def __init__(self, *args, **kwargs): - super(RunTest, self).__init__(*args, **kwargs) - - self._verify = {} - - def add_matches(self, dp, match): - m = dp.ofproto_parser.OFPFlowMod(dp, 0, 0, 0, - dp.ofproto.OFPFC_ADD, - 0, 0, 0, 0xffffffff, - dp.ofproto.OFPP_ANY, - 0xffffffff, 0, match, []) - dp.send_msg(m) - - def _set_verify(self, headers, value, mask=None, - all_bits_masked=False, type_='int'): - self._verify = {} - self._verify['headers'] = headers - self._verify['value'] = value - self._verify['mask'] = mask - self._verify['all_bits_masked'] = all_bits_masked - self._verify['type'] = type_ - - def verify_default(self, dp, stats): - type_ = self._verify['type'] - headers = self._verify['headers'] - value = self._verify['value'] - mask = self._verify['mask'] - value_masked = self._masked(type_, value, mask) - all_bits_masked = self._verify['all_bits_masked'] - - field = None - for s in stats: - for f in s.match.fields: - if f.header in headers: - field = f - break - - if field is None: - if self._is_all_zero_bit(type_, mask): - return True - return 'Field not found.' - - f_value = field.value - if hasattr(field, 'mask'): - f_mask = field.mask - else: - f_mask = None - - if (f_value == value) or (f_value == value_masked): - if (f_mask == mask) or (all_bits_masked and f_mask is None): - return True - - return "send: %s/%s, reply: %s/%s" \ - % (self._cnv_to_str(type_, value, mask, f_value, f_mask)) - - def _masked(self, type_, value, mask): - if mask is None: - v = value - elif type_ == 'int': - v = value & mask - elif type_ == 'mac': - v = self.haddr_masked(value, mask) - elif type_ == 'ipv4': - v = self.ipv4_masked(value, mask) - elif type_ == 'ipv6': - v = self.ipv6_masked(value, mask) - else: - raise Exception('Unknown type') - return v - - def _is_all_zero_bit(self, type_, val): - if type_ == 'int' or type_ == 'ipv4': - return val == 0 - elif type_ == 'mac': - for v in val: - if v != b'\x00': - return False - return True - elif type_ == 'ipv6': - for v in val: - if v != 0: - return False - return True - else: - raise Exception('Unknown type') - - def _cnv_to_str(self, type_, value, mask, f_value, f_mask): - func = None - if type_ == 'int': - pass - elif type_ == 'mac': - func = self.haddr_to_str - elif type_ == 'ipv4': - func = self.ipv4_to_str - elif type_ == 'ipv6': - func = self.ipv6_to_str - else: - raise Exception('Unknown type') - - if func: - value = func(value) - f_value = func(f_value) - if mask: - mask = func(mask) - if f_mask: - f_mask = func(f_mask) - - return value, mask, f_value, f_mask - - def test_rule_set_dl_dst(self, dp): - dl_dst = 'e2:7a:09:79:0b:0f' - dl_dst_bin = self.haddr_to_bin(dl_dst) - - headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] - self._set_verify(headers, dl_dst_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_dst(dl_dst_bin) - self.add_matches(dp, match) - - def test_rule_set_dl_dst_masked_ff(self, dp): - dl_dst = 'd0:98:79:b4:75:b5' - dl_dst_bin = self.haddr_to_bin(dl_dst) - mask = 'ff:ff:ff:ff:ff:ff' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] - self._set_verify(headers, dl_dst_bin, mask_bin, True, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_dst_masked(dl_dst_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_dl_dst_masked_f0(self, dp): - dl_dst = 'e2:7a:09:79:0b:0f' - dl_dst_bin = self.haddr_to_bin(dl_dst) - mask = 'ff:ff:ff:ff:ff:00' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] - self._set_verify(headers, dl_dst_bin, mask_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_dst_masked(dl_dst_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_dl_dst_masked_00(self, dp): - dl_dst = 'e2:7a:09:79:0b:0f' - dl_dst_bin = self.haddr_to_bin(dl_dst) - mask = '00:00:00:00:00:00' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] - self._set_verify(headers, dl_dst_bin, mask_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_dst_masked(dl_dst_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_dl_src(self, dp): - dl_src = 'e2:7a:09:79:0b:0f' - dl_src_bin = self.haddr_to_bin(dl_src) - - headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] - self._set_verify(headers, dl_src_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_src(dl_src_bin) - self.add_matches(dp, match) - - def test_rule_set_dl_src_masked_ff(self, dp): - dl_src = 'e2:7a:09:79:0b:0f' - dl_src_bin = self.haddr_to_bin(dl_src) - mask = 'ff:ff:ff:ff:ff:ff' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] - self._set_verify(headers, dl_src_bin, mask_bin, True, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_src_masked(dl_src_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_dl_src_masked_f0(self, dp): - dl_src = 'e2:7a:09:79:0b:0f' - dl_src_bin = self.haddr_to_bin(dl_src) - mask = 'ff:ff:ff:ff:ff:00' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] - self._set_verify(headers, dl_src_bin, mask_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_src_masked(dl_src_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_dl_src_masked_00(self, dp): - dl_src = 'e2:7a:09:79:0b:0f' - dl_src_bin = self.haddr_to_bin(dl_src) - mask = '00:00:00:00:00:00' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] - self._set_verify(headers, dl_src_bin, mask_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_src_masked(dl_src_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_dl_type_ip(self, dp): - dl_type = ether.ETH_TYPE_IP - - headers = [dp.ofproto.OXM_OF_ETH_TYPE] - self._set_verify(headers, dl_type) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - self.add_matches(dp, match) - - def test_rule_set_dl_type_arp(self, dp): - dl_type = ether.ETH_TYPE_ARP - - headers = [dp.ofproto.OXM_OF_ETH_TYPE] - self._set_verify(headers, dl_type) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - self.add_matches(dp, match) - - def test_rule_set_dl_type_vlan(self, dp): - dl_type = ether.ETH_TYPE_8021Q - - headers = [dp.ofproto.OXM_OF_ETH_TYPE] - self._set_verify(headers, dl_type) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - self.add_matches(dp, match) - - def test_rule_set_dl_type_ipv6(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - - headers = [dp.ofproto.OXM_OF_ETH_TYPE] - self._set_verify(headers, dl_type) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - self.add_matches(dp, match) - - def test_rule_set_dl_type_lacp(self, dp): - dl_type = ether.ETH_TYPE_SLOW - - headers = [dp.ofproto.OXM_OF_ETH_TYPE] - self._set_verify(headers, dl_type) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - self.add_matches(dp, match) - - def test_rule_set_ip_dscp(self, dp): - ip_dscp = 36 - dl_type = ether.ETH_TYPE_IP - - headers = [dp.ofproto.OXM_OF_IP_DSCP] - self._set_verify(headers, ip_dscp) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_dscp(ip_dscp) - self.add_matches(dp, match) - - def test_rule_set_vlan_vid(self, dp): - vlan_vid = 0x4ef - - headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] - self._set_verify(headers, vlan_vid) - - match = dp.ofproto_parser.OFPMatch() - match.set_vlan_vid(vlan_vid) - self.add_matches(dp, match) - - def test_rule_set_vlan_vid_masked_ff(self, dp): - vlan_vid = 0x4ef - mask = 0xfff - - headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] - self._set_verify(headers, vlan_vid, mask, True) - - match = dp.ofproto_parser.OFPMatch() - match.set_vlan_vid_masked(vlan_vid, mask) - self.add_matches(dp, match) - - def test_rule_set_vlan_vid_masked_f0(self, dp): - vlan_vid = 0x4ef - mask = 0xff0 - - headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] - self._set_verify(headers, vlan_vid, mask) - - match = dp.ofproto_parser.OFPMatch() - match.set_vlan_vid_masked(vlan_vid, mask) - self.add_matches(dp, match) - - def test_rule_set_vlan_vid_masked_00(self, dp): - vlan_vid = 0x4ef - mask = 0x000 - - headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] - self._set_verify(headers, vlan_vid, mask) - - match = dp.ofproto_parser.OFPMatch() - match.set_vlan_vid_masked(vlan_vid, mask) - self.add_matches(dp, match) - - def test_rule_set_vlan_pcp(self, dp): - vlan_vid = 0x4ef - vlan_pcp = 5 - - headers = [dp.ofproto.OXM_OF_VLAN_PCP] - self._set_verify(headers, vlan_pcp) - - match = dp.ofproto_parser.OFPMatch() - match.set_vlan_vid(vlan_vid) - match.set_vlan_pcp(vlan_pcp) - self.add_matches(dp, match) - - def test_rule_set_ip_ecn(self, dp): - dl_type = ether.ETH_TYPE_IP - ip_ecn = 3 - - headers = [dp.ofproto.OXM_OF_IP_ECN] - self._set_verify(headers, ip_ecn) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_ecn(ip_ecn) - self.add_matches(dp, match) - - def test_rule_set_ip_proto_icmp(self, dp): - dl_type = ether.ETH_TYPE_IP - ip_proto = inet.IPPROTO_ICMP - - headers = [dp.ofproto.OXM_OF_IP_PROTO] - self._set_verify(headers, ip_proto) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - self.add_matches(dp, match) - - def test_rule_set_ip_proto_tcp(self, dp): - dl_type = ether.ETH_TYPE_IP - ip_proto = inet.IPPROTO_TCP - - headers = [dp.ofproto.OXM_OF_IP_PROTO] - self._set_verify(headers, ip_proto) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - self.add_matches(dp, match) - - def test_rule_set_ip_proto_udp(self, dp): - dl_type = ether.ETH_TYPE_IP - ip_proto = inet.IPPROTO_UDP - - headers = [dp.ofproto.OXM_OF_IP_PROTO] - self._set_verify(headers, ip_proto) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - self.add_matches(dp, match) - - def test_rule_set_ip_proto_ipv6_route(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ip_proto = inet.IPPROTO_ROUTING - - headers = [dp.ofproto.OXM_OF_IP_PROTO] - self._set_verify(headers, ip_proto) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - self.add_matches(dp, match) - - def test_rule_set_ip_proto_ipv6_frag(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ip_proto = inet.IPPROTO_FRAGMENT - - headers = [dp.ofproto.OXM_OF_IP_PROTO] - self._set_verify(headers, ip_proto) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - self.add_matches(dp, match) - - def test_rule_set_ip_proto_ipv6_icmp(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ip_proto = inet.IPPROTO_ICMPV6 - - headers = [dp.ofproto.OXM_OF_IP_PROTO] - self._set_verify(headers, ip_proto) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - self.add_matches(dp, match) - - def test_rule_set_ip_proto_ipv6_none(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ip_proto = inet.IPPROTO_NONE - - headers = [dp.ofproto.OXM_OF_IP_PROTO] - self._set_verify(headers, ip_proto) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - self.add_matches(dp, match) - - def test_rule_set_ip_proto_ipv6_dstopts(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ip_proto = inet.IPPROTO_DSTOPTS - - headers = [dp.ofproto.OXM_OF_IP_PROTO] - self._set_verify(headers, ip_proto) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - self.add_matches(dp, match) - - def test_rule_set_ipv4_src(self, dp): - dl_type = ether.ETH_TYPE_IP - src = '192.168.196.250' - src_int = self.ipv4_to_int(src) - - headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] - self._set_verify(headers, src_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv4_src(src_int) - self.add_matches(dp, match) - - def test_rule_set_ipv4_src_masked_32(self, dp): - dl_type = ether.ETH_TYPE_IP - src = '192.168.196.250' - src_int = self.ipv4_to_int(src) - mask = '255.255.255.255' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] - self._set_verify(headers, src_int, mask_int, True, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv4_src_masked(src_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_ipv4_src_masked_24(self, dp): - dl_type = ether.ETH_TYPE_IP - src = '192.168.196.250' - src_int = self.ipv4_to_int(src) - mask = '255.255.255.0' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] - self._set_verify(headers, src_int, mask_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv4_src_masked(src_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_ipv4_src_masked_0(self, dp): - dl_type = ether.ETH_TYPE_IP - src = '192.168.196.250' - src_int = self.ipv4_to_int(src) - mask = '0.0.0.0' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] - self._set_verify(headers, src_int, mask_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv4_src_masked(src_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_ipv4_dst(self, dp): - dl_type = ether.ETH_TYPE_IP - dst = '192.168.54.155' - dst_int = self.ipv4_to_int(dst) - - headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] - self._set_verify(headers, dst_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv4_dst(dst_int) - self.add_matches(dp, match) - - def test_rule_set_ipv4_dst_masked_32(self, dp): - dl_type = ether.ETH_TYPE_IP - dst = '192.168.54.155' - dst_int = self.ipv4_to_int(dst) - mask = '255.255.255.255' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] - self._set_verify(headers, dst_int, mask_int, True, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv4_dst_masked(dst_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_ipv4_dst_masked_24(self, dp): - dl_type = ether.ETH_TYPE_IP - dst = '192.168.54.155' - dst_int = self.ipv4_to_int(dst) - mask = '255.255.255.0' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] - self._set_verify(headers, dst_int, mask_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv4_dst_masked(dst_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_ipv4_dst_masked_0(self, dp): - dl_type = ether.ETH_TYPE_IP - dst = '192.168.54.155' - dst_int = self.ipv4_to_int(dst) - mask = '0.0.0.0' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] - self._set_verify(headers, dst_int, mask_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv4_dst_masked(dst_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_tcp_src(self, dp): - dl_type = ether.ETH_TYPE_IP - ip_proto = inet.IPPROTO_TCP - tp_src = 1103 - - headers = [dp.ofproto.OXM_OF_TCP_SRC] - self._set_verify(headers, tp_src) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - match.set_tcp_src(tp_src) - self.add_matches(dp, match) - - def test_rule_set_tcp_dst(self, dp): - dl_type = ether.ETH_TYPE_IP - ip_proto = inet.IPPROTO_TCP - tp_dst = 236 - - headers = [dp.ofproto.OXM_OF_TCP_DST] - self._set_verify(headers, tp_dst) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - match.set_tcp_dst(tp_dst) - self.add_matches(dp, match) - - def test_rule_set_udp_src(self, dp): - dl_type = ether.ETH_TYPE_IP - ip_proto = inet.IPPROTO_UDP - tp_src = 56617 - - headers = [dp.ofproto.OXM_OF_UDP_SRC] - self._set_verify(headers, tp_src) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - match.set_udp_src(tp_src) - self.add_matches(dp, match) - - def test_rule_set_udp_dst(self, dp): - dl_type = ether.ETH_TYPE_IP - ip_proto = inet.IPPROTO_UDP - tp_dst = 61278 - - headers = [dp.ofproto.OXM_OF_UDP_DST] - self._set_verify(headers, tp_dst) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - match.set_udp_dst(tp_dst) - self.add_matches(dp, match) - - def test_rule_set_icmpv4_type(self, dp): - dl_type = ether.ETH_TYPE_IP - ip_proto = inet.IPPROTO_ICMP - icmp_type = 8 - - headers = [dp.ofproto.OXM_OF_ICMPV4_TYPE] - self._set_verify(headers, icmp_type) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - match.set_icmpv4_type(icmp_type) - self.add_matches(dp, match) - - def test_rule_set_icmpv4_code(self, dp): - dl_type = ether.ETH_TYPE_IP - ip_proto = inet.IPPROTO_ICMP - icmp_type = 9 - icmp_code = 16 - - headers = [dp.ofproto.OXM_OF_ICMPV4_CODE] - self._set_verify(headers, icmp_code) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - match.set_icmpv4_type(icmp_type) - match.set_icmpv4_code(icmp_code) - self.add_matches(dp, match) - - def test_rule_set_arp_opcode(self, dp): - dl_type = ether.ETH_TYPE_ARP - arp_op = 1 - - headers = [dp.ofproto.OXM_OF_ARP_OP] - self._set_verify(headers, arp_op) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_opcode(arp_op) - self.add_matches(dp, match) - - def test_rule_set_arp_spa(self, dp): - dl_type = ether.ETH_TYPE_ARP - nw_src = '192.168.222.57' - nw_src_int = self.ipv4_to_int(nw_src) - - headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] - self._set_verify(headers, nw_src_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_spa(nw_src_int) - self.add_matches(dp, match) - - def test_rule_set_arp_spa_masked_32(self, dp): - dl_type = ether.ETH_TYPE_ARP - nw_src = '192.168.222.57' - nw_src_int = self.ipv4_to_int(nw_src) - mask = '255.255.255.255' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] - self._set_verify(headers, nw_src_int, mask_int, True, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_spa_masked(nw_src_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_arp_spa_masked_24(self, dp): - dl_type = ether.ETH_TYPE_ARP - nw_src = '192.168.222.57' - nw_src_int = self.ipv4_to_int(nw_src) - mask = '255.255.255.0' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] - self._set_verify(headers, nw_src_int, mask_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_spa_masked(nw_src_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_arp_spa_masked_00(self, dp): - dl_type = ether.ETH_TYPE_ARP - nw_src = '192.168.222.57' - nw_src_int = self.ipv4_to_int(nw_src) - mask = '0.0.0.0' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] - self._set_verify(headers, nw_src_int, mask_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_spa_masked(nw_src_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_arp_tpa(self, dp): - dl_type = ether.ETH_TYPE_ARP - nw_dst = '192.168.198.233' - nw_dst_int = self.ipv4_to_int(nw_dst) - - headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] - self._set_verify(headers, nw_dst_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_tpa(nw_dst_int) - self.add_matches(dp, match) - - def test_rule_set_arp_tpa_masked_32(self, dp): - dl_type = ether.ETH_TYPE_ARP - nw_dst = '192.168.198.233' - nw_dst_int = self.ipv4_to_int(nw_dst) - mask = '255.255.255.255' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] - self._set_verify(headers, nw_dst_int, mask_int, True, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_tpa_masked(nw_dst_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_arp_tpa_masked_24(self, dp): - dl_type = ether.ETH_TYPE_ARP - nw_dst = '192.168.198.233' - nw_dst_int = self.ipv4_to_int(nw_dst) - mask = '255.255.255.0' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] - self._set_verify(headers, nw_dst_int, mask_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_tpa_masked(nw_dst_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_arp_tpa_masked_00(self, dp): - dl_type = ether.ETH_TYPE_ARP - nw_dst = '192.168.198.233' - nw_dst_int = self.ipv4_to_int(nw_dst) - mask = '0.0.0.0' - mask_int = self.ipv4_to_int(mask) - - headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] - self._set_verify(headers, nw_dst_int, mask_int, type_='ipv4') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_tpa_masked(nw_dst_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_arp_sha(self, dp): - dl_type = ether.ETH_TYPE_ARP - arp_sha = '3e:ec:13:9b:f3:0b' - arp_sha_bin = self.haddr_to_bin(arp_sha) - - headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] - self._set_verify(headers, arp_sha_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_sha(arp_sha_bin) - self.add_matches(dp, match) - - def test_rule_set_arp_sha_masked_ff(self, dp): - dl_type = ether.ETH_TYPE_ARP - arp_sha = '3e:ec:13:9b:f3:0b' - arp_sha_bin = self.haddr_to_bin(arp_sha) - mask = 'ff:ff:ff:ff:ff:ff' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] - self._set_verify(headers, arp_sha_bin, mask_bin, True, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_sha_masked(arp_sha_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_arp_sha_masked_f0(self, dp): - dl_type = ether.ETH_TYPE_ARP - arp_sha = '3e:ec:13:9b:f3:0b' - arp_sha_bin = self.haddr_to_bin(arp_sha) - mask = 'ff:ff:ff:ff:ff:00' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] - self._set_verify(headers, arp_sha_bin, mask_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_sha_masked(arp_sha_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_arp_sha_masked_00(self, dp): - dl_type = ether.ETH_TYPE_ARP - arp_sha = '3e:ec:13:9b:f3:0b' - arp_sha_bin = self.haddr_to_bin(arp_sha) - mask = '00:00:00:00:00:00' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] - self._set_verify(headers, arp_sha_bin, mask_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_sha_masked(arp_sha_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_arp_tha(self, dp): - dl_type = ether.ETH_TYPE_ARP - arp_tha = '83:6c:21:52:49:68' - arp_tha_bin = self.haddr_to_bin(arp_tha) - - headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] - self._set_verify(headers, arp_tha_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_tha(arp_tha_bin) - self.add_matches(dp, match) - - def test_rule_set_arp_tha_masked_ff(self, dp): - dl_type = ether.ETH_TYPE_ARP - arp_tha = '83:6c:21:52:49:68' - arp_tha_bin = self.haddr_to_bin(arp_tha) - mask = 'ff:ff:ff:ff:ff:ff' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] - self._set_verify(headers, arp_tha_bin, mask_bin, True, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_tha_masked(arp_tha_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_arp_tha_masked_f0(self, dp): - dl_type = ether.ETH_TYPE_ARP - arp_tha = '83:6c:21:52:49:68' - arp_tha_bin = self.haddr_to_bin(arp_tha) - mask = 'ff:ff:ff:ff:ff:00' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] - self._set_verify(headers, arp_tha_bin, mask_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_tha_masked(arp_tha_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_arp_tha_masked_00(self, dp): - dl_type = ether.ETH_TYPE_ARP - arp_tha = '83:6c:21:52:49:68' - arp_tha_bin = self.haddr_to_bin(arp_tha) - mask = '00:00:00:00:00:00' - mask_bin = self.haddr_to_bin(mask) - - headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] - self._set_verify(headers, arp_tha_bin, mask_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_arp_tha_masked(arp_tha_bin, mask_bin) - self.add_matches(dp, match) - - def test_rule_set_ipv6_src(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_src = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' - ipv6_src_int = self.ipv6_to_int(ipv6_src) - - headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] - self._set_verify(headers, ipv6_src_int, type_='ipv6') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_src(ipv6_src_int) - self.add_matches(dp, match) - - def test_rule_set_ipv6_src_masked_ff(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_src = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' - ipv6_src_int = self.ipv6_to_int(ipv6_src) - mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' - mask_int = self.ipv6_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] - self._set_verify(headers, ipv6_src_int, mask_int, True, type_='ipv6') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_src_masked(ipv6_src_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_ipv6_src_masked_f0(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_src = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' - ipv6_src_int = self.ipv6_to_int(ipv6_src) - mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:0' - mask_int = self.ipv6_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] - self._set_verify(headers, ipv6_src_int, mask_int, type_='ipv6') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_src_masked(ipv6_src_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_ipv6_src_masked_00(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_src = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' - ipv6_src_int = self.ipv6_to_int(ipv6_src) - mask = '0:0:0:0:0:0:0:0' - mask_int = self.ipv6_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] - self._set_verify(headers, ipv6_src_int, mask_int, type_='ipv6') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_src_masked(ipv6_src_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_ipv6_dst(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_dst = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' - ipv6_dst_int = self.ipv6_to_int(ipv6_dst) - - headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] - self._set_verify(headers, ipv6_dst_int, type_='ipv6') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_dst(ipv6_dst_int) - self.add_matches(dp, match) - - def test_rule_set_ipv6_dst_masked_ff(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_dst = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' - ipv6_dst_int = self.ipv6_to_int(ipv6_dst) - mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' - mask_int = self.ipv6_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] - self._set_verify(headers, ipv6_dst_int, mask_int, True, type_='ipv6') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_dst_masked(ipv6_dst_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_ipv6_dst_masked_f0(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_dst = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' - ipv6_dst_int = self.ipv6_to_int(ipv6_dst) - mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:0' - mask_int = self.ipv6_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] - self._set_verify(headers, ipv6_dst_int, mask_int, type_='ipv6') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_dst_masked(ipv6_dst_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_ipv6_dst_masked_00(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_dst = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' - ipv6_dst_int = self.ipv6_to_int(ipv6_dst) - mask = '0:0:0:0:0:0:0:0' - mask_int = self.ipv6_to_int(mask) - - headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] - self._set_verify(headers, ipv6_dst_int, mask_int, type_='ipv6') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_dst_masked(ipv6_dst_int, mask_int) - self.add_matches(dp, match) - - def test_rule_set_ipv6_flabel(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_label = 0xc5384 - - headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, - dp.ofproto.OXM_OF_IPV6_FLABEL_W] - self._set_verify(headers, ipv6_label) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_flabel(ipv6_label) - self.add_matches(dp, match) - - def test_rule_set_ipv6_flabel_masked_ff(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_label = 0xc5384 - mask = 0xfffff - - headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, - dp.ofproto.OXM_OF_IPV6_FLABEL_W] - self._set_verify(headers, ipv6_label, mask, True) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_flabel_masked(ipv6_label, mask) - self.add_matches(dp, match) - - def test_rule_set_ipv6_flabel_masked_f0(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_label = 0xc5384 - mask = 0xffff0 - - headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, - dp.ofproto.OXM_OF_IPV6_FLABEL_W] - self._set_verify(headers, ipv6_label, mask) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_flabel_masked(ipv6_label, mask) - self.add_matches(dp, match) - - def test_rule_set_ipv6_flabel_masked_00(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ipv6_label = 0xc5384 - mask = 0x0 - - headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, - dp.ofproto.OXM_OF_IPV6_FLABEL_W] - self._set_verify(headers, ipv6_label, mask) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ipv6_flabel_masked(ipv6_label, mask) - self.add_matches(dp, match) - - def test_rule_set_icmpv6_type(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ip_proto = inet.IPPROTO_ICMPV6 - icmp_type = 129 - - headers = [dp.ofproto.OXM_OF_ICMPV6_TYPE] - self._set_verify(headers, icmp_type) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - match.set_icmpv6_type(icmp_type) - self.add_matches(dp, match) - - def test_rule_set_icmpv6_code(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ip_proto = inet.IPPROTO_ICMPV6 - icmp_type = 138 - icmp_code = 1 - - headers = [dp.ofproto.OXM_OF_ICMPV6_CODE] - self._set_verify(headers, icmp_code) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - match.set_icmpv6_type(icmp_type) - match.set_icmpv6_code(icmp_code) - self.add_matches(dp, match) - - def test_rule_set_ipv6_nd_target(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ip_proto = inet.IPPROTO_ICMPV6 - icmp_type = 135 - target = "5420:db3f:921b:3e33:2791:98f:dd7f:2e19" - target_int = self.ipv6_to_int(target) - - headers = [dp.ofproto.OXM_OF_IPV6_ND_TARGET] - self._set_verify(headers, target_int, type_='ipv6') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - match.set_icmpv6_type(icmp_type) - match.set_ipv6_nd_target(target_int) - self.add_matches(dp, match) - - def test_rule_set_ipv6_nd_sll(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ip_proto = inet.IPPROTO_ICMPV6 - icmp_type = 135 - nd_sll = "93:6d:d0:d4:e8:36" - nd_sll_bin = self.haddr_to_bin(nd_sll) - - headers = [dp.ofproto.OXM_OF_IPV6_ND_SLL] - self._set_verify(headers, nd_sll_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - match.set_icmpv6_type(icmp_type) - match.set_ipv6_nd_sll(nd_sll_bin) - self.add_matches(dp, match) - - def test_rule_set_ipv6_nd_tll(self, dp): - dl_type = ether.ETH_TYPE_IPV6 - ip_proto = inet.IPPROTO_ICMPV6 - icmp_type = 136 - nd_tll = "18:f6:66:b6:f1:b3" - nd_tll_bin = self.haddr_to_bin(nd_tll) - - headers = [dp.ofproto.OXM_OF_IPV6_ND_TLL] - self._set_verify(headers, nd_tll_bin, type_='mac') - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_ip_proto(ip_proto) - match.set_icmpv6_type(icmp_type) - match.set_ipv6_nd_tll(nd_tll_bin) - self.add_matches(dp, match) - - def test_rule_set_mpls_label(self, dp): - dl_type = 0x8847 - label = 2144 - - headers = [dp.ofproto.OXM_OF_MPLS_LABEL] - self._set_verify(headers, label) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_mpls_label(label) - self.add_matches(dp, match) - - def test_rule_set_mpls_tc(self, dp): - dl_type = 0x8847 - tc = 3 - - headers = [dp.ofproto.OXM_OF_MPLS_TC] - self._set_verify(headers, tc) - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_type(dl_type) - match.set_mpls_tc(tc) - self.add_matches(dp, match) - - def is_supported(self, t): - # Open vSwitch 1.10 does not support MPLS yet. - unsupported = [ - 'test_rule_set_mpls_label', - 'test_rule_set_mpls_tc', - ] - for u in unsupported: - if t.find(u) != -1: - return False - - return True diff --git a/ryu/tests/integrated/test_of_config.py b/ryu/tests/integrated/test_of_config.py deleted file mode 100644 index 6bcc7d0b..00000000 --- a/ryu/tests/integrated/test_of_config.py +++ /dev/null @@ -1,328 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 Isaku Yamahata -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -How to run this test - -edit linc config file. LINC-Switch/rel/linc/releases/1.0/sys.config -You can find the sample config I used for the test below - -For this following config to work, the network interface -linc-port and linc-port2 must be created before hand. -(Or edit the port name depending on your environment) -An easy way is to create them as follows -# ip link add linc-port type veth peer name linc-port-peer -# ip link set linc-port up -# ip link add linc-port2 type veth peer name linc-port-peer2 -# ip link set linc-port2 up - -Then run linc -# rel/linc/bin/linc console - -Then run ryu -# PYTHONPATH=. ./bin/ryu-manager --verbose \ - ryu/tests/integrated/test_of_config.py - - -Here is my sys.config used for this test. --->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8--- -[ - {linc, - [ - {of_config, enabled}, - - {logical_switches, - [ - {switch, 0, - [ - {backend, linc_us4}, - - {controllers, - [ - {"Switch0-DefaultController", "localhost", 6633, tcp} - ]}, - - {ports, - [ - {port, 1, [{interface, "linc-port"}]}, - {port, 2, [{interface, "linc-port2"}]} - ]}, - - {queues_status, disabled}, - - {queues, - [ - ]} - ]} - ]} - ]}, - - {enetconf, - [ - {capabilities, [{base, {1, 1}}, - {startup, {1, 0}}, - {'writable-running', {1, 0}}]}, - {callback_module, linc_ofconfig}, - {sshd_ip, any}, - {sshd_port, 1830}, - {sshd_user_passwords, - [ - {"linc", "linc"} - ]} - ]}, - - {lager, - [ - {handlers, - [ - {lager_console_backend, info}, - {lager_file_backend, - [ - {"log/error.log", error, 10485760, "$D0", 5}, - {"log/console.log", info, 10485760, "$D0", 5} - ]} - ]} - ]}, - - {sasl, - [ - {sasl_error_logger, {file, "log/sasl-error.log"}}, - {errlog_type, error}, - {error_logger_mf_dir, "log/sasl"}, % Log directory - {error_logger_mf_maxbytes, 10485760}, % 10 MB max file size - {error_logger_mf_maxfiles, 5} % 5 files max - ]} -]. --->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-- - -""" - -from __future__ import print_function - -import traceback - -import lxml.etree -import ncclient - -from ryu.base import app_manager -from ryu.lib.netconf import constants as nc_consts -from ryu.lib import hub -from ryu.lib import of_config -from ryu.lib.of_config import capable_switch -from ryu.lib.of_config import constants as ofc_consts - - -# Change those depending on switch configuration -HOST = '127.0.0.1' -PORT = 1830 -USERNAME = 'linc' -PASSWORD = 'linc' - -CAPABLE_SWITCH_ID = 'CapableSwitch0' -LOGICAL_SWITCH = 'LogicalSwitch0' -PORT_ID = 'LogicalSwitch0-Port2' -CONTROLLER_ID = 'Switch0-DefaultController' - -PORT_DICT = { - 'capable_switch': CAPABLE_SWITCH_ID, - 'port_id': PORT_ID, - 'logical_switch': LOGICAL_SWITCH, - 'controller_id': CONTROLLER_ID, - 'ip': HOST, -} - -SWITCH_PORT_DOWN = ''' - - - %(capable_switch)s - - - %(port_id)s - - down - false - false - false - - - - - -''' % PORT_DICT - -SWITCH_ADVERTISED = ''' - - - %(capable_switch)s - - - %(port_id)s - - - 10Mb-FD - true - copper - unsupported - - - - - - -''' % PORT_DICT - -SWITCH_CONTROLLER = ''' - - - %(capable_switch)s - - - %(logical_switch)s - - - %(controller_id)s - master - %(ip)s - 6633 - tcp - - - - - - -''' % PORT_DICT - - -def _get_schema(): - # file_name = of_config.OF_CONFIG_1_0_XSD - # file_name = of_config.OF_CONFIG_1_1_XSD - file_name = of_config.OF_CONFIG_1_1_1_XSD - return lxml.etree.XMLSchema(file=file_name) - - -class OFConfigClient(app_manager.RyuApp): - def __init__(self, *args, **kwargs): - super(OFConfigClient, self).__init__(*args, **kwargs) - self.switch = capable_switch.OFCapableSwitch( - host=HOST, port=PORT, username=USERNAME, password=PASSWORD, - unknown_host_cb=lambda host, fingeprint: True) - hub.spawn(self._do_of_config) - - def _validate(self, tree): - xmlschema = _get_schema() - try: - xmlschema.assertValid(tree) - except: - traceback.print_exc() - - def _do_get(self): - data_xml = self.switch.raw_get() - - tree = lxml.etree.fromstring(data_xml) - # print(lxml.etree.tostring(tree, pretty_print=True)) - self._validate(tree) - - name_spaces = set() - for e in tree.getiterator(): - name_spaces.add(capable_switch.get_ns_tag(e.tag)[0]) - print(name_spaces) - - return tree - - def _do_get_config(self, source): - print('source = %s' % source) - config_xml = self.switch.raw_get_config(source) - - tree = lxml.etree.fromstring(config_xml) - # print(lxml.etree.tostring(tree, pretty_print=True)) - self._validate(tree) - - def _do_edit_config(self, config): - tree = lxml.etree.fromstring(config) - self._validate(tree) - self.switch.raw_edit_config(target='running', config=config) - - def _print_ports(self, tree, ns): - for port in tree.findall('{%s}%s/{%s}%s' % (ns, ofc_consts.RESOURCES, - ns, ofc_consts.PORT)): - print(lxml.etree.tostring(port, pretty_print=True)) - - def _set_ports_down(self): - """try to set all ports down with etree operation""" - tree = self._do_get() - print(lxml.etree.tostring(tree, pretty_print=True)) - - qname = lxml.etree.QName(tree.tag) - ns = qname.namespace - self._print_ports(tree, ns) - - switch_id = tree.find('{%s}%s' % (ns, ofc_consts.ID)) - resources = tree.find('{%s}%s' % (ns, ofc_consts.RESOURCES)) - configuration = tree.find( - '{%s}%s/{%s}%s/{%s}%s' % (ns, ofc_consts.RESOURCES, - ns, ofc_consts.PORT, - ns, ofc_consts.CONFIGURATION)) - admin_state = tree.find( - '{%s}%s/{%s}%s/{%s}%s/{%s}%s' % (ns, ofc_consts.RESOURCES, - ns, ofc_consts.PORT, - ns, ofc_consts.CONFIGURATION, - ns, ofc_consts.ADMIN_STATE)) - - config_ = lxml.etree.Element( - '{%s}%s' % (ncclient.xml_.BASE_NS_1_0, nc_consts.CONFIG)) - capable_switch_ = lxml.etree.SubElement(config_, tree.tag) - switch_id_ = lxml.etree.SubElement(capable_switch_, switch_id.tag) - switch_id_.text = switch_id.text - resources_ = lxml.etree.SubElement(capable_switch_, - resources.tag) - for port in tree.findall( - '{%s}%s/{%s}%s' % (ns, ofc_consts.RESOURCES, - ns, ofc_consts.PORT)): - resource_id = port.find('{%s}%s' % (ns, ofc_consts.RESOURCE_ID)) - - port_ = lxml.etree.SubElement(resources_, port.tag) - resource_id_ = lxml.etree.SubElement(port_, resource_id.tag) - resource_id_.text = resource_id.text - configuration_ = lxml.etree.SubElement(port_, configuration.tag) - configuration_.set(ofc_consts.OPERATION, nc_consts.MERGE) - admin_state_ = lxml.etree.SubElement(configuration_, - admin_state.tag) - admin_state_.text = ofc_consts.DOWN - self._do_edit_config(lxml.etree.tostring(config_, pretty_print=True)) - - tree = self._do_get() - self._print_ports(tree, ns) - - def _do_of_config(self): - self._do_get() - self._do_get_config('running') - self._do_get_config('startup') - - # LINC doesn't support 'candidate' datastore - try: - self._do_get_config('candidate') - except ncclient.NCClientError: - traceback.print_exc() - - # use raw XML format - self._do_edit_config(SWITCH_PORT_DOWN) - self._do_edit_config(SWITCH_ADVERTISED) - self._do_edit_config(SWITCH_CONTROLLER) - - self._set_ports_down() - - self.switch.close_session() diff --git a/ryu/tests/integrated/test_request_reply_v12.py b/ryu/tests/integrated/test_request_reply_v12.py deleted file mode 100644 index ae99bcc7..00000000 --- a/ryu/tests/integrated/test_request_reply_v12.py +++ /dev/null @@ -1,1054 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import time -import logging - -from ryu.controller import ofp_event -from ryu.controller.handler import MAIN_DISPATCHER -from ryu.controller.handler import set_ev_cls -from ryu.ofproto import ofproto_v1_2 -from ryu.tests.integrated import tester - -LOG = logging.getLogger(__name__) - - -class RunTest(tester.TestFlowBase): - """ Test case for Request-Reply messages. - - Some tests need attached port to switch. - If use the OVS, can do it with the following commands. - # ip link add type dummy - # ovs-vsctl add-port - """ - - OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] - - def __init__(self, *args, **kwargs): - super(RunTest, self).__init__(*args, **kwargs) - - self._verify = None - self.n_tables = ofproto_v1_2.OFPTT_MAX - - def start_next_test(self, dp): - self._verify = None - self.delete_all_flows(dp) - dp.send_barrier() - if len(self.pending): - t = self.pending.pop() - if self.is_supported(t): - LOG.info(tester.LOG_TEST_START, t) - self.current = t - getattr(self, t)(dp) - else: - self.results[t] = 'SKIP (unsupported)' - self.unclear -= 1 - self.start_next_test(dp) - else: - self.print_results() - - def run_verify(self, ev): - msg = ev.msg - dp = msg.datapath - - verify_func = self.verify_default - v = "verify" + self.current[4:] - if v in dir(self): - verify_func = getattr(self, v) - - result = verify_func(dp, msg) - if result is True: - self.unclear -= 1 - - self.results[self.current] = result - self.start_next_test(dp) - - def verify_default(self, dp, msg): - type_ = self._verify - - if msg.msg_type == dp.ofproto.OFPT_STATS_REPLY: - return self.verify_stats(dp, msg.body, type_) - elif msg.msg_type == type_: - return True - else: - return 'Reply msg_type %s expected %s' \ - % (msg.msg_type, type_) - - def verify_stats(self, dp, stats, type_): - stats_types = dp.ofproto_parser.OFPStatsReply._STATS_TYPES - expect = stats_types.get(type_).__name__ - - if isinstance(stats, list): - for s in stats: - if expect == s.__class__.__name__: - return True - else: - if expect == stats.__class__.__name__: - return True - return 'Reply msg has not \'%s\' class.\n%s' % (expect, stats) - - def mod_flow(self, dp, cookie=0, cookie_mask=0, table_id=0, - command=None, idle_timeout=0, hard_timeout=0, - priority=0xff, buffer_id=0xffffffff, match=None, - actions=None, inst_type=None, out_port=None, - out_group=None, flags=0, inst=None): - - if command is None: - command = dp.ofproto.OFPFC_ADD - - if inst is None: - if inst_type is None: - inst_type = dp.ofproto.OFPIT_APPLY_ACTIONS - - inst = [] - if actions is not None: - inst = [dp.ofproto_parser.OFPInstructionActions( - inst_type, actions)] - - if match is None: - match = dp.ofproto_parser.OFPMatch() - - if out_port is None: - out_port = dp.ofproto.OFPP_ANY - - if out_group is None: - out_group = dp.ofproto.OFPG_ANY - - m = dp.ofproto_parser.OFPFlowMod(dp, cookie, cookie_mask, - table_id, command, - idle_timeout, hard_timeout, - priority, buffer_id, - out_port, out_group, - flags, match, inst) - - dp.send_msg(m) - - def get_port(self, dp): - for port_no, port in dp.ports.items(): - if port_no != dp.ofproto.OFPP_LOCAL: - return port - return None - - # Test for Reply message type - def test_desc_stats_request(self, dp): - self._verify = dp.ofproto.OFPST_DESC - m = dp.ofproto_parser.OFPDescStatsRequest(dp) - dp.send_msg(m) - - def test_flow_stats_request(self, dp): - self._verify = dp.ofproto.OFPST_FLOW - self.mod_flow(dp) - self.send_flow_stats(dp) - - def test_aggregate_stats_request(self, dp): - self._verify = dp.ofproto.OFPST_AGGREGATE - match = dp.ofproto_parser.OFPMatch() - m = dp.ofproto_parser.OFPAggregateStatsRequest( - dp, dp.ofproto.OFPTT_ALL, dp.ofproto.OFPP_ANY, - dp.ofproto.OFPG_ANY, 0, 0, match) - dp.send_msg(m) - - def test_table_stats_request(self, dp): - self._verify = dp.ofproto.OFPST_TABLE - m = dp.ofproto_parser.OFPTableStatsRequest(dp) - dp.send_msg(m) - - def test_port_stats_request(self, dp): - self._verify = dp.ofproto.OFPST_PORT - m = dp.ofproto_parser.OFPPortStatsRequest(dp, dp.ofproto.OFPP_ANY) - dp.send_msg(m) - - def test_echo_request(self, dp): - self._verify = dp.ofproto.OFPT_ECHO_REPLY - m = dp.ofproto_parser.OFPEchoRequest(dp) - dp.send_msg(m) - - def test_features_request(self, dp): - self._verify = dp.ofproto.OFPT_FEATURES_REPLY - m = dp.ofproto_parser.OFPFeaturesRequest(dp) - dp.send_msg(m) - - def test_get_config_request(self, dp): - self._verify = dp.ofproto.OFPT_GET_CONFIG_REPLY - m = dp.ofproto_parser.OFPGetConfigRequest(dp) - dp.send_msg(m) - - def test_barrier_request(self, dp): - self._verify = dp.ofproto.OFPT_BARRIER_REPLY - dp.send_barrier() - - def test_error_reply(self, dp): - ports = [0] - for p in dp.ports: - if p != dp.ofproto.OFPP_LOCAL: - ports.append(p) - - port_no = max(ports) + 1 - self._verify = dp.ofproto.OFPT_ERROR - m = dp.ofproto_parser.OFPPortMod( - dp, port_no, 'ff:ff:ff:ff:ff:ff', 0, 0, 0) - dp.send_msg(m) - - # Test for reply value - def test_flow_stats_none(self, dp): - self.send_flow_stats(dp) - - def verify_flow_stats_none(self, dp, msg): - stats = msg.body - if len(stats): - return 'Reply msg has body. %s' % (stats, ) - return True - - def test_flow_stats_reply_value(self, dp): - self._verify = [] - c = 0 - while c < self.n_tables: - # value = (talbe_id, cookie, idle_timeout, hard_timeout, priority) - v = (c, c + 1, c + 2, c + 3, c + 4) - self._verify.append(v) - self.mod_flow(dp, table_id=v[0], cookie=v[1], - idle_timeout=v[2], hard_timeout=v[3], priority=v[4]) - c += 1 - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_stats_reply_value(self, dp, msg): - c = 0 - for f in msg.body: - f_value = (f.table_id, f.cookie, f.idle_timeout, - f.hard_timeout, f.priority, ) - if f_value != self._verify[c]: - return 'param is mismatched. verify=%s, reply=%s' \ - % (self._verify[c], f_value,) - c += 1 - return len(msg.body) == self.n_tables - - def test_echo_request_has_data(self, dp): - data = 'test' - self._verify = data - m = dp.ofproto_parser.OFPEchoRequest(dp) - m.data = data - dp.send_msg(m) - - def verify_echo_request_has_data(self, dp, msg): - data = msg.data - return self._verify == data - - def test_aggregate_stats_flow_count(self, dp): - c = 0 - while c < self.n_tables: - self.mod_flow(dp, table_id=c) - c += 1 - dp.send_barrier() - match = dp.ofproto_parser.OFPMatch() - m = dp.ofproto_parser.OFPAggregateStatsRequest( - dp, dp.ofproto.OFPTT_ALL, dp.ofproto.OFPP_ANY, - dp.ofproto.OFPG_ANY, 0, 0, match) - dp.send_msg(m) - - def verify_aggregate_stats_flow_count(self, dp, msg): - stats = msg.body - return stats.flow_count == self.n_tables - - def test_aggregate_stats_flow_count_out_port(self, dp): - actions = [dp.ofproto_parser.OFPActionOutput(1, 1500)] - self.mod_flow(dp, table_id=1, actions=actions) - - actions = [dp.ofproto_parser.OFPActionOutput(2, 1500)] - self.mod_flow(dp, table_id=2, actions=actions) - dp.send_barrier() - - out_port = 2 - match = dp.ofproto_parser.OFPMatch() - m = dp.ofproto_parser.OFPAggregateStatsRequest( - dp, dp.ofproto.OFPTT_ALL, out_port, - dp.ofproto.OFPG_ANY, 0, 0, match) - dp.send_msg(m) - - def verify_aggregate_stats_flow_count_out_port(self, dp, msg): - stats = msg.body - return stats.flow_count == 1 - - def test_aggregate_stats_packet_count(self, dp): - in_port = 1 - data = 'test' - self._verify = {'packet_count': 1, - 'byte_count': len(data)} - - # add flow - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - self.mod_flow(dp, table_id=0, match=match) - - # packet out - output = dp.ofproto.OFPP_TABLE - actions = [dp.ofproto_parser.OFPActionOutput(output, 0)] - m = dp.ofproto_parser.OFPPacketOut(dp, 0xffffffff, in_port, - actions, data) - dp.send_msg(m) - dp.send_barrier() - - match = dp.ofproto_parser.OFPMatch() - m = dp.ofproto_parser.OFPAggregateStatsRequest( - dp, dp.ofproto.OFPTT_ALL, dp.ofproto.OFPP_ANY, - dp.ofproto.OFPG_ANY, 0, 0, match) - dp.send_msg(m) - - def verify_aggregate_stats_packet_count(self, dp, msg): - for name, val in self._verify.items(): - r_val = getattr(msg.body, name) - if val != r_val: - return '%s is mismatched. verify=%s, reply=%s' \ - % (name, val, r_val) - return True - - def test_set_config_nomal(self, dp): - flags = dp.ofproto.OFPC_FRAG_NORMAL - self._verify = flags - m = dp.ofproto_parser.OFPSetConfig(dp, flags, 0) - dp.send_msg(m) - dp.send_barrier() - - m = dp.ofproto_parser.OFPGetConfigRequest(dp) - dp.send_msg(m) - - def verify_set_config_nomal(self, dp, msg): - return self._verify == msg.flags - - def test_set_config_drop(self, dp): - flags = dp.ofproto.OFPC_FRAG_DROP - self._verify = flags - m = dp.ofproto_parser.OFPSetConfig(dp, flags, 0) - dp.send_msg(m) - dp.send_barrier() - - m = dp.ofproto_parser.OFPGetConfigRequest(dp) - dp.send_msg(m) - - def verify_set_config_drop(self, dp, msg): - return self._verify == msg.flags - - def test_set_config_mask(self, dp): - flags = dp.ofproto.OFPC_FRAG_MASK - self._verify = flags - m = dp.ofproto_parser.OFPSetConfig(dp, flags, 0) - dp.send_msg(m) - dp.send_barrier() - - m = dp.ofproto_parser.OFPGetConfigRequest(dp) - dp.send_msg(m) - - def verify_set_config_mask(self, dp, msg): - return self._verify == msg.flags - - def test_set_config_ttl_to_controller(self, dp): - flags = dp.ofproto.OFPC_INVALID_TTL_TO_CONTROLLER - self._verify = flags - m = dp.ofproto_parser.OFPSetConfig(dp, flags, 0) - dp.send_msg(m) - dp.send_barrier() - - m = dp.ofproto_parser.OFPGetConfigRequest(dp) - dp.send_msg(m) - - def verify_set_config_ttl_to_controller(self, dp, msg): - return self._verify == msg.flags - - def test_set_config_miss_send_len(self, dp): - flags = dp.ofproto.OFPC_FRAG_NORMAL - ms_len = 256 - self._verify = ms_len - m = dp.ofproto_parser.OFPSetConfig(dp, flags, ms_len) - dp.send_msg(m) - dp.send_barrier() - - m = dp.ofproto_parser.OFPGetConfigRequest(dp) - dp.send_msg(m) - - def verify_set_config_miss_send_len(self, dp, msg): - return self._verify == msg.miss_send_len - - def test_set_config_miss_send_len_max(self, dp): - flags = dp.ofproto.OFPC_FRAG_NORMAL - ms_len = dp.ofproto.OFPCML_MAX - self._verify = ms_len - m = dp.ofproto_parser.OFPSetConfig(dp, flags, ms_len) - dp.send_msg(m) - dp.send_barrier() - - m = dp.ofproto_parser.OFPGetConfigRequest(dp) - dp.send_msg(m) - - def verify_set_config_miss_send_len_max(self, dp, msg): - return self._verify == msg.miss_send_len - - def test_set_config_no_buffer(self, dp): - flags = dp.ofproto.OFPC_FRAG_NORMAL - ms_len = dp.ofproto.OFPCML_NO_BUFFER - self._verify = ms_len - m = dp.ofproto_parser.OFPSetConfig(dp, flags, ms_len) - dp.send_msg(m) - dp.send_barrier() - - m = dp.ofproto_parser.OFPGetConfigRequest(dp) - dp.send_msg(m) - - def verify_set_config_no_buffer(self, dp, msg): - return self._verify == msg.miss_send_len - - def _verify_flow_inst_type(self, dp, msg): - inst_type = self._verify - stats = msg.body - - for s in stats: - for i in s.instructions: - if i.type == inst_type: - return True - return 'not found inst_type[%s]' % (inst_type, ) - - def test_flow_add_apply_actions(self, dp): - inst_type = dp.ofproto.OFPIT_APPLY_ACTIONS - self._verify = inst_type - - actions = [dp.ofproto_parser.OFPActionOutput(1, 1500)] - self.mod_flow(dp, actions=actions, inst_type=inst_type) - self.send_flow_stats(dp) - - def verify_flow_add_apply_actions(self, dp, msg): - return self._verify_flow_inst_type(dp, msg) - - def test_flow_add_goto_table(self, dp): - self._verify = dp.ofproto.OFPIT_GOTO_TABLE - - inst = [dp.ofproto_parser.OFPInstructionGotoTable(1), ] - self.mod_flow(dp, inst=inst) - self.send_flow_stats(dp) - - def verify_flow_add_goto_table(self, dp, msg): - return self._verify_flow_inst_type(dp, msg) - - def _verify_flow_value(self, dp, msg): - stats = msg.body - verify = self._verify - - if len(verify) != len(stats): - return 'flow_count is mismatched. verify=%s stats=%s' \ - % (len(verify), len(stats)) - - for s in stats: - v_port = -1 - v = verify.get(s.table_id, None) - if v: - v_port = v[3].port - - s_port = s.instructions[0].actions[0].port - - if v_port != s_port: - return 'port is mismatched. table_id=%s verify=%s, stats=%s' \ - % (s.table_id, v_port, s_port) - return True - - def _add_flow_for_flow_mod_tests(self, dp): - a1 = dp.ofproto_parser.OFPActionOutput(1, 1500) - a2 = dp.ofproto_parser.OFPActionOutput(2, 1500) - - # table_id, cookie, priority, dl_dst, action) - tables = {0: [0xffff, 10, b'\xee' * 6, a1], - 1: [0xff00, 10, b'\xee' * 6, a2], - 2: [0xf000, 100, b'\xee' * 6, a1], - 3: [0x0000, 10, b'\xff' * 6, a1]} - - self._verify = tables - for table_id, val in tables.items(): - match = dp.ofproto_parser.OFPMatch() - match.set_dl_dst(val[2]) - self.mod_flow(dp, match=match, actions=[val[3]], - table_id=table_id, cookie=val[0], priority=val[1]) - dp.send_barrier() - - def test_flow_mod_table_id(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # modify flow of table_id=3 - action = dp.ofproto_parser.OFPActionOutput(3, 1500) - self._verify[3][3] = action - - table_id = 3 - self.mod_flow(dp, command=dp.ofproto.OFPFC_MODIFY, - actions=[action], table_id=table_id) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_mod_table_id(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def test_flow_mod_cookie(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # modify flow of table_id=1 - action = dp.ofproto_parser.OFPActionOutput(3, 1500) - self._verify[1][3] = action - - cookie = 0xff00 - cookie_mask = 0xffff - table_id = 1 - self.mod_flow(dp, command=dp.ofproto.OFPFC_MODIFY, - actions=[action], table_id=table_id, - cookie=cookie, cookie_mask=cookie_mask) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_mod_cookie(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def test_flow_mod_cookie_mask(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # modify flow of table_id=0,1 - action = dp.ofproto_parser.OFPActionOutput(3, 1500) - self._verify[0][3] = action - self._verify[1][3] = action - - cookie = 0xffff - cookie_mask = 0xff00 - for table_id in range(2): - self.mod_flow(dp, command=dp.ofproto.OFPFC_MODIFY, - actions=[action], table_id=table_id, - cookie=cookie, cookie_mask=cookie_mask) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_mod_cookie_mask(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def test_flow_mod_match(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # modify flow of table_id=3 - action = dp.ofproto_parser.OFPActionOutput(3, 1500) - self._verify[3][3] = action - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_dst(b'\xff' * 6) - table_id = 3 - self.mod_flow(dp, command=dp.ofproto.OFPFC_MODIFY, - actions=[action], table_id=table_id, match=match) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_mod_match(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def test_flow_mod_strict(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # modify flow of table_id=2 - action = dp.ofproto_parser.OFPActionOutput(3, 1500) - self._verify[2][3] = action - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_dst(b'\xee' * 6) - priority = 100 - table_id = 2 - self.mod_flow(dp, command=dp.ofproto.OFPFC_MODIFY_STRICT, - actions=[action], table_id=table_id, - match=match, priority=priority) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_mod_strict(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def test_flow_del_table_id(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # delete flow of table_id=3 - del self._verify[3] - - table_id = 3 - self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, - table_id=table_id) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_del_table_id(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def test_flow_del_table_id_all(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # delete all flows - self._verify = {} - - self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, - table_id=dp.ofproto.OFPTT_ALL) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_del_table_id_all(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def test_flow_del_cookie(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # delete flow of table_id=1 - del self._verify[1] - - cookie = 0xff00 - cookie_mask = 0xffff - self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, - table_id=dp.ofproto.OFPTT_ALL, - cookie=cookie, cookie_mask=cookie_mask) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_del_cookie(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def test_flow_del_cookie_mask(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # delete flow of table_id=0,1 - del self._verify[0] - del self._verify[1] - - cookie = 0xffff - cookie_mask = 0xff00 - self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, - table_id=dp.ofproto.OFPTT_ALL, - cookie=cookie, cookie_mask=cookie_mask) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_del_cookie_mask(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def test_flow_del_match(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # delete flow of table_id=3 - del self._verify[3] - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_dst(b'\xff' * 6) - self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, - table_id=dp.ofproto.OFPTT_ALL, match=match) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_del_match(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def test_flow_del_out_port(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # delete flow of table_id=1 - del self._verify[1] - - out_port = 2 - self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, - table_id=dp.ofproto.OFPTT_ALL, out_port=out_port) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_del_out_port(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def test_flow_del_strict(self, dp): - self._add_flow_for_flow_mod_tests(dp) - - # delete flow of table_id=2 - del self._verify[2] - - match = dp.ofproto_parser.OFPMatch() - match.set_dl_dst(b'\xee' * 6) - priority = 100 - self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE_STRICT, - table_id=dp.ofproto.OFPTT_ALL, - match=match, priority=priority) - - dp.send_barrier() - self.send_flow_stats(dp) - - def verify_flow_del_strict(self, dp, msg): - return self._verify_flow_value(dp, msg) - - def _send_port_mod(self, dp, config, mask): - p = self.get_port(dp) - if not p: - err = 'need attached port to switch.' - self.results[self.current] = err - self.start_next_test(dp) - return - - self._verify = [p.port_no, config & mask] - m = dp.ofproto_parser.OFPPortMod(dp, p.port_no, p.hw_addr, - config, mask, 0) - dp.send_msg(m) - dp.send_barrier() - - # TODO: waiting to port UP|DOWN. - time.sleep(1) - m = dp.ofproto_parser.OFPFeaturesRequest(dp) - dp.send_msg(m) - - def _verify_port_mod_config(self, dp, msg): - port_no = self._verify[0] - config = self._verify[1] - - port = msg.ports[port_no] - if config != port.config: - return "config is mismatched. verify=%s, stats=%s" \ - % (bin(config), bin(port.config)) - return True - - def test_port_mod_config_01_all(self, dp): - config = 0b1100101 - mask = 0b1111111 - self._send_port_mod(dp, config, mask) - - def verify_port_mod_config_01_all(self, dp, msg): - return self._verify_port_mod_config(dp, msg) - - def test_port_mod_config_02_none(self, dp): - config = 0 - mask = 0b1111111 - self._send_port_mod(dp, config, mask) - - def verify_port_mod_config_02_none(self, dp, msg): - return self._verify_port_mod_config(dp, msg) - - def test_port_mod_config_03_mask(self, dp): - config = 0b1100101 - mask = 0b1111000 - self._send_port_mod(dp, config, mask) - - def verify_port_mod_config_03_mask(self, dp, msg): - res = self._verify_port_mod_config(dp, msg) - # reset port config - port_no = self._verify[0] - p = msg.ports[port_no] - m = dp.ofproto_parser.OFPPortMod(dp, p.port_no, p.hw_addr, - 0, 0b1111111, 0) - dp.send_msg(m) - dp.send_barrier() - return res - - def test_port_stats_port_no(self, dp): - p = self.get_port(dp) - if not p: - err = 'need attached port to switch.' - self.results[self.current] = err - self.start_next_test(dp) - return - - self._verify = p.port_no - m = dp.ofproto_parser.OFPPortStatsRequest(dp, p.port_no) - dp.send_msg(m) - - def verify_port_stats_port_no(self, dp, msg): - ports = msg.body - if len(ports) > 1: - return 'reply some ports.\n%s' % (ports) - - if ports[0].port_no != self._verify: - return 'port_no is mismatched. request=%s reply=%s' \ - % (self._verify, ports[0].port_no) - - return True - - def _add_flow_flow_removed(self, dp, reason, table_id=0, - cookie=0xff, priority=100, in_port=1, - idle_timeout=0, hard_timeout=0): - self._verify = {} - self._verify['params'] = {'reason': reason, - 'table_id': table_id, - 'cookie': cookie, - 'priority': priority} - self._verify['in_port'] = in_port - self._verify['timeout'] = idle_timeout - if hard_timeout: - if (idle_timeout == 0 or idle_timeout > hard_timeout): - self._verify['timeout'] = hard_timeout - - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - self.mod_flow(dp, match=match, cookie=cookie, - priority=priority, table_id=table_id, - idle_timeout=idle_timeout, hard_timeout=hard_timeout, - flags=dp.ofproto.OFPFF_SEND_FLOW_REM) - - def _verify_flow_removed(self, dp, msg): - params = self._verify['params'] - in_port = self._verify['in_port'] - timeout = self._verify['timeout'] - - if timeout: - duration_nsec = (msg.duration_sec * 10 ** 9) + msg.duration_nsec - timeout_nsec = timeout * 10 ** 9 - - # grace of -0.5 and +1.5 second to timeout. - l = (timeout - 0.5) * 10 ** 9 - h = (timeout + 1.5) * 10 ** 9 - if not l < duration_nsec < h: - return 'bad duration time. set=%s(nsec), duration=%s(nsec)' \ - % (timeout_nsec, duration_nsec) - - for name, val in params.items(): - r_val = getattr(msg, name) - if val != r_val: - return '%s is mismatched. verify=%s, reply=%s' \ - % (name, val, r_val) - - for f in msg.match.fields: - if f.header == ofproto_v1_2.OXM_OF_IN_PORT: - if f.value != in_port: - return 'in_port is mismatched. verify=%s, reply=%s' \ - % (in_port, f.value) - return True - - def test_flow_removed_idle_timeout(self, dp): - reason = dp.ofproto.OFPRR_IDLE_TIMEOUT - idle_timeout = 2 - self._add_flow_flow_removed(dp, reason, - idle_timeout=idle_timeout) - - def verify_flow_removed_idle_timeout(self, dp, msg): - return self._verify_flow_removed(dp, msg) - - def test_flow_removed_idle_timeout_hit(self, dp): - reason = dp.ofproto.OFPRR_IDLE_TIMEOUT - idle_timeout = 5 - in_port = 1 - sleep = 2 - - # add target flow - self._add_flow_flow_removed(dp, reason, in_port=in_port, - idle_timeout=idle_timeout) - self._verify['timeout'] = idle_timeout + sleep - - # sleep - time.sleep(sleep) - - # packet out - output = dp.ofproto.OFPP_TABLE - actions = [dp.ofproto_parser.OFPActionOutput(output, 0)] - m = dp.ofproto_parser.OFPPacketOut(dp, 0xffffffff, in_port, - actions, None) - dp.send_msg(m) - - def verify_flow_removed_idle_timeout_hit(self, dp, msg): - return self._verify_flow_removed(dp, msg) - - def test_flow_removed_hard_timeout(self, dp): - reason = dp.ofproto.OFPRR_HARD_TIMEOUT - hard_timeout = 2 - self._add_flow_flow_removed(dp, reason, - hard_timeout=hard_timeout) - - def verify_flow_removed_hard_timeout(self, dp, msg): - return self._verify_flow_removed(dp, msg) - - def test_flow_removed_hard_timeout_hit(self, dp): - reason = dp.ofproto.OFPRR_HARD_TIMEOUT - hard_timeout = 5 - in_port = 1 - sleep = 2 - - self._add_flow_flow_removed(dp, reason, in_port=in_port, - hard_timeout=hard_timeout) - dp.send_barrier() - - # sleep - time.sleep(sleep) - - # packet out - output = dp.ofproto.OFPP_TABLE - actions = [dp.ofproto_parser.OFPActionOutput(output, 0)] - m = dp.ofproto_parser.OFPPacketOut(dp, 0xffffffff, in_port, - actions, None) - dp.send_msg(m) - - def verify_flow_removed_hard_timeout_hit(self, dp, msg): - return self._verify_flow_removed(dp, msg) - - def test_flow_removed_delete(self, dp): - reason = dp.ofproto.OFPRR_DELETE - self._add_flow_flow_removed(dp, reason) - dp.send_barrier() - self.delete_all_flows(dp) - - def verify_flow_removed_delete(self, dp, msg): - return self._verify_flow_removed(dp, msg) - - def test_flow_removed_table_id(self, dp): - reason = dp.ofproto.OFPRR_DELETE - table_id = 1 - self._add_flow_flow_removed(dp, reason, table_id=table_id) - dp.send_barrier() - self.delete_all_flows(dp) - - def verify_flow_removed_table_id(self, dp, msg): - return self._verify_flow_removed(dp, msg) - - def _send_packet_out(self, dp, buffer_id=0xffffffff, - in_port=None, output=None, data=''): - if in_port is None: - in_port = dp.ofproto.OFPP_LOCAL - - if output is None: - output = dp.ofproto.OFPP_CONTROLLER - - self._verify['in_port'] = in_port - self._verify['data'] = data - - actions = [dp.ofproto_parser.OFPActionOutput(output, len(data))] - m = dp.ofproto_parser.OFPPacketOut(dp, buffer_id, in_port, - actions, data) - dp.send_msg(m) - - def _verify_packet_in(self, dp, msg): - for name, val in self._verify.items(): - if name == 'in_port': - for f in msg.match.fields: - if f.header == ofproto_v1_2.OXM_OF_IN_PORT: - r_val = f.value - else: - r_val = getattr(msg, name) - - if val != r_val: - return '%s is mismatched. verify=%s, reply=%s' \ - % (name, val, r_val) - return True - - def test_packet_in_action(self, dp): - self._verify = {} - self._verify['reason'] = dp.ofproto.OFPR_ACTION - self._send_packet_out(dp) - - def verify_packet_in_action(self, dp, msg): - return self._verify_packet_in(dp, msg) - - def test_packet_in_data(self, dp): - self._verify = {} - self._verify['reason'] = dp.ofproto.OFPR_ACTION - data = 'test' - self._send_packet_out(dp, data=data) - - def verify_packet_in_data(self, dp, msg): - return self._verify_packet_in(dp, msg) - - def test_packet_in_table_id(self, dp): - in_port = 1 - table_id = 2 - output = dp.ofproto.OFPP_TABLE - - self._verify = {} - self._verify['reason'] = dp.ofproto.OFPR_ACTION - self._verify['table_id'] = table_id - - # add flow (goto_table) - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - inst = [dp.ofproto_parser.OFPInstructionGotoTable(table_id)] - self.mod_flow(dp, inst=inst, match=match) - - # add flow (output) - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - out = dp.ofproto.OFPP_CONTROLLER - actions = [dp.ofproto_parser.OFPActionOutput(out, 0)] - self.mod_flow(dp, actions=actions, match=match, table_id=table_id) - dp.send_barrier() - - # packet out - self._send_packet_out(dp, in_port=in_port, output=output) - - def verify_packet_in_table_id(self, dp, msg): - return self._verify_packet_in(dp, msg) - - # handler - @set_ev_cls(ofp_event.EventOFPEchoReply, MAIN_DISPATCHER) - def echo_replay_handler(self, ev): - if self.current.find('echo_request') > 0: - self.run_verify(ev) - - @set_ev_cls(ofp_event.EventOFPStatsReply, MAIN_DISPATCHER) - def stats_reply_handler(self, ev): - if self.current is None: - msg = ev.msg - dp = msg.datapath - if self._verify == dp.ofproto.OFPST_TABLE: - self.table_stats = msg.body - self.start_next_test(dp) - else: - self.run_verify(ev) - - @set_ev_cls(ofp_event.EventOFPSwitchFeatures, MAIN_DISPATCHER) - def features_replay_handler(self, ev): - if self.current is None: - pass - else: - self.run_verify(ev) - - @set_ev_cls(ofp_event.EventOFPGetConfigReply, MAIN_DISPATCHER) - def get_config_replay_handler(self, ev): - self.run_verify(ev) - - @set_ev_cls(ofp_event.EventOFPBarrierReply, MAIN_DISPATCHER) - def barrier_replay_handler(self, ev): - if self.current == 'test_barrier_request': - self.run_verify(ev) - - @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER) - def port_status_handler(self, ev): - pass - - @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) - def packet_in_handler(self, ev): - if self.current.find('packet_in'): - self.run_verify(ev) - - @set_ev_cls(ofp_event.EventOFPFlowRemoved, MAIN_DISPATCHER) - def flow_removed_handler(self, ev): - if self.current.find('flow_removed') > 0: - self.run_verify(ev) - - @set_ev_cls(ofp_event.EventOFPErrorMsg, MAIN_DISPATCHER) - def error_handler(self, ev): - if self.current.find('error') > 0: - self.run_verify(ev) - - def is_supported(self, t): - unsupported = [ - ] - for u in unsupported: - if t.find(u) != -1: - return False - - return True diff --git a/ryu/tests/integrated/test_vrrp_linux_multi.py b/ryu/tests/integrated/test_vrrp_linux_multi.py deleted file mode 100644 index dca70c47..00000000 --- a/ryu/tests/integrated/test_vrrp_linux_multi.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 Isaku Yamahata -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Usage: -PYTHONPATH=. ./bin/ryu-manager --verbose \ - ryu.services.protocols.vrrp.dumper \ - ryu.services.protocols.vrrp.sample_manager.py \ - ryu.tests.integrated.test_vrrp_linux_multi \ - ryu.app.rest - -ryu.services.protocols.vrrp.dumper is optional. -ryu.app.rest is merely to prevent ryu-manager from exiting. - - ---------------- - /--<--veth0-->| | - Ryu | linux bridge |<--veth2--> command to generate packets - \--<--veth1-->| (vrrpbr) | - ---------------- - - -# ip link add veth0 type veth peer name veth0-br -# ip link add veth1 type veth peer name veth1-br -# ip link add veth2 type veth peer name veth2-br - -# brctl addbr vrrpbr -# brctl addif vrrpbr veth0-br -# brctl addif vrrpbr veth1-br -# brctl addif vrrpbr veth2-br - - -# ip link set veth0 up -# ip link set veth0-br up -# ip link set veth1 up -# ip link set veth1-br up -# ip link set veth2 up -# ip link set veth2-br up -# ip link set vrrpbr up - -if you like, capture packets on each interfaces like -# tshark -i vrrpbr -# tshark -i veth0 -# tshark -i veth1 -# tshark -i veth2 - -virtual router mac address: 00:00:5E:00:01:{VRID} = 00:00:5E:00:01:07 -during working, send packets destined to mac address 00:00:5E:00:01:07 -from veth2 by packet generator like packeth - -NOTE: vrid: 7 and ip address: 10.0.0.1... are hardcoded below -""" - -from ryu.base import app_manager -from ryu.lib import hub -from ryu.lib import mac as lib_mac -from ryu.lib.packet import vrrp -from ryu.services.protocols.vrrp import api as vrrp_api -from ryu.services.protocols.vrrp import event as vrrp_event -from ryu.services.protocols.vrrp import monitor_linux - -from . import vrrp_common - - -class VRRPConfigApp(vrrp_common.VRRPCommon): - _IFNAME0 = 'veth0' - _IFNAME1 = 'veth1' - - def __init__(self, *args, **kwargs): - super(VRRPConfigApp, self).__init__(*args, **kwargs) - - def start(self): - hub.spawn(self._main) - - def _configure_vrrp_router(self, vrrp_version, priority, - primary_ip_address, ifname, vrid): - interface = vrrp_event.VRRPInterfaceNetworkDevice( - lib_mac.DONTCARE_STR, primary_ip_address, None, ifname) - self.logger.debug('%s', interface) - - vip = '10.0.%d.1' % vrid - ip_addresses = [vip] - config = vrrp_event.VRRPConfig( - version=vrrp_version, vrid=vrid, priority=priority, - ip_addresses=ip_addresses) - self.logger.debug('%s', config) - - rep = vrrp_api.vrrp_config(self, interface, config) - self.logger.debug('%s', rep) - - return rep diff --git a/ryu/tests/integrated/test_vrrp_linux_multi.sh b/ryu/tests/integrated/test_vrrp_linux_multi.sh deleted file mode 100644 index b1dba4bc..00000000 --- a/ryu/tests/integrated/test_vrrp_linux_multi.sh +++ /dev/null @@ -1,34 +0,0 @@ -#! /bin/sh - -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -ip link add veth0 type veth peer name veth0-br -ip link add veth1 type veth peer name veth1-br -ip link add veth2 type veth peer name veth2-br - -brctl addbr vrrpbr -brctl addif vrrpbr veth0-br -brctl addif vrrpbr veth1-br -brctl addif vrrpbr veth2-br - -ip link set veth0 up -ip link set veth0-br up -ip link set veth1 up -ip link set veth1-br up -ip link set veth2 up -ip link set veth2-br up -ip link set vrrpbr up diff --git a/ryu/tests/integrated/test_vrrp_multi.py b/ryu/tests/integrated/test_vrrp_multi.py deleted file mode 100644 index 6aee6395..00000000 --- a/ryu/tests/integrated/test_vrrp_multi.py +++ /dev/null @@ -1,143 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 Isaku Yamahata -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -""" -Usage: -PYTHONPATH=. ./bin/ryu-manager --verbose \ - ryu.topology.switches \ - ryu.tests.integrated.test_vrrp_multi \ - ryu.services.protocols.vrrp.dumper - -ryu.services.protocols.vrrp.dumper is optional. - - +---+ ---------------- - /--|OVS|<--veth-->| | - Ryu +---+ | linux bridge |<--veth--> command to generate packets - \--|OVS|<--veth-->| | - +---+ ---------------- - -configure OVSs to connect ryu -example -# brctl addbr b0 -# ip link add veth0-ovs type veth peer name veth0-br -# ip link add veth1-ovs type veth peer name veth1-br -# brctl addif b0 veth0-br -# brctl addif b0 veth1-br -# brctl show -bridge name bridge id STP enabled interfaces -b0 8000.6642e5822497 no veth0-br - veth1-br -ovs-system 0000.122038293b55 no - -# ovs-vsctl add-br s0 -# ovs-vsctl add-port s0 veth0-ovs -# ovs-vsctl add-br s1 -# ovs-vsctl add-port s1 veth1-ovs -# ovs-vsctl set-controller s0 tcp:127.0.0.1:6633 -# ovs-vsctl set bridge s0 protocols='[OpenFlow12]' -# ovs-vsctl set-controller s1 tcp:127.0.0.1:6633 -# ovs-vsctl set bridge s1 protocols='[OpenFlow12]' -# ovs-vsctl show -20c2a046-ae7e-4453-a576-11034db24985 - Manager "ptcp:6634" - Bridge "s0" - Controller "tcp:127.0.0.1:6633" - is_connected: true - Port "veth0-ovs" - Interface "veth0-ovs" - Port "s0" - Interface "s0" - type: internal - Bridge "s1" - Controller "tcp:127.0.0.1:6633" - is_connected: true - Port "veth1-ovs" - Interface "veth1-ovs" - Port "s1" - Interface "s1" - type: internal - ovs_version: "1.9.90" -# ip link veth0-br set up -# ip link veth0-ovs set up -# ip link veth1-br set up -# ip link veth1-ovs set up -# ip link b0 set up -""" - -from ryu.base import app_manager -from ryu.controller import handler -from ryu.lib import dpid as lib_dpid -from ryu.lib import hub -from ryu.lib.packet import vrrp -from ryu.services.protocols.vrrp import api as vrrp_api -from ryu.services.protocols.vrrp import event as vrrp_event -from ryu.services.protocols.vrrp import monitor_openflow -from ryu.topology import event as topo_event -from ryu.topology import api as topo_api - -from . import vrrp_common - - -class VRRPConfigApp(vrrp_common.VRRPCommon): - _IFNAME0 = 0 - _IFNAME1 = 1 - - def __init__(self, *args, **kwargs): - super(VRRPConfigApp, self).__init__(*args, **kwargs) - self.start_main = False - - @handler.set_ev_cls(topo_event.EventSwitchEnter) - def _switch_enter_handler(self, ev): - if self.start_main: - return - - switches = topo_api.get_switch(self) - if len(switches) < 2: - return - - self.start_main = True - app_mgr = app_manager.AppManager.get_instance() - self.logger.debug('%s', app_mgr.applications) - self.switches = app_mgr.applications['switches'] - hub.spawn(self._main) - - def _configure_vrrp_router(self, vrrp_version, priority, - ip_addr, switch_index, vrid): - switches = self.switches - self.logger.debug('%s', switches.dps) - dpid = sorted(switches.dps.keys())[switch_index] - self.logger.debug('%s', lib_dpid.dpid_to_str(dpid)) - self.logger.debug('%s', switches.port_state) - # hack: use the smallest port no to avoid picking OVS local port - port_no = sorted(switches.port_state[dpid].keys())[0] - self.logger.debug('%d', port_no) - port = switches.port_state[dpid][port_no] - self.logger.debug('%s', port) - mac = port.hw_addr - self.logger.debug('%s', mac) - - interface = vrrp_event.VRRPInterfaceOpenFlow( - mac, ip_addr, None, dpid, port_no) - self.logger.debug('%s', interface) - - config = vrrp_event.VRRPConfig( - version=vrrp_version, vrid=vrid, priority=priority, - ip_addresses=[ip_addr]) - self.logger.debug('%s', config) - - rep = vrrp_api.vrrp_config(self, interface, config) - self.logger.debug('%s', rep) - return rep diff --git a/ryu/tests/integrated/test_vrrp_multi.sh b/ryu/tests/integrated/test_vrrp_multi.sh deleted file mode 100644 index 5118cf7d..00000000 --- a/ryu/tests/integrated/test_vrrp_multi.sh +++ /dev/null @@ -1,42 +0,0 @@ -#! /bin/sh - -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -if [ -z "$VSCTL" ]; then - VSCTL=ovs-vsctl -fi - -# create two bridges. -# conncect them using patch ports. - -create() { - BR=$1 - LOCAL_PORT=patch$2 - PEER_PORT=patch$3 - CONT=$4 - ${VSCTL} add-br ${BR} -- set bridge ${BR} datapath_type=netdev - ${VSCTL} add-port ${BR} ${LOCAL_PORT} - ${VSCTL} set interface ${LOCAL_PORT} type=patch - ${VSCTL} set interface ${LOCAL_PORT} options:peer=${PEER_PORT} - ${VSCTL} set bridge ${BR} protocols='[OpenFlow12]' - ${VSCTL} set-controller ${BR} ${CONT} -} - -CONT=tcp:127.0.0.1:6633 - -create s0 0 1 ${CONT} -create s1 1 0 ${CONT} diff --git a/ryu/tests/integrated/tester.py b/ryu/tests/integrated/tester.py deleted file mode 100644 index f052c6cc..00000000 --- a/ryu/tests/integrated/tester.py +++ /dev/null @@ -1,214 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import sys -import logging -import itertools - -from ryu import utils -from ryu.lib import mac -from ryu.base import app_manager -from ryu.controller import ofp_event -from ryu.controller import handler -from ryu.controller import dpset -from ryu.controller.handler import MAIN_DISPATCHER -from ryu.controller.handler import CONFIG_DISPATCHER -from ryu.controller.handler import set_ev_cls -from ryu.ofproto import ofproto_v1_0 -from ryu.ofproto import ofproto_v1_2 - - -LOG = logging.getLogger(__name__) - - -LOG_TEST_START = 'TEST_START: %s' -LOG_TEST_RESULTS = 'TEST_RESULTS:' -LOG_TEST_FINISH = 'TEST_FINISHED: Completed=[%s] (OK=%s NG=%s SKIP=%s)' -LOG_TEST_UNSUPPORTED = 'SKIP (unsupported)' - - -class TestFlowBase(app_manager.RyuApp): - """ - To run the tests is required for the following pair of functions. - 1. test_() - To send flows to switch. - - 2. verify_() or _verify_default() - To check flows of switch. - """ - - _CONTEXTS = {'dpset': dpset.DPSet} - - def __init__(self, *args, **kwargs): - super(TestFlowBase, self).__init__(*args, **kwargs) - self.pending = [] - self.results = {} - self.current = None - self.unclear = 0 - - for t in dir(self): - if t.startswith("test_"): - self.pending.append(t) - self.pending.sort(reverse=True) - self.unclear = len(self.pending) - - def delete_all_flows(self, dp): - if dp.ofproto == ofproto_v1_0: - match = dp.ofproto_parser.OFPMatch(dp.ofproto.OFPFW_ALL, - 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0) - m = dp.ofproto_parser.OFPFlowMod(dp, match, 0, - dp.ofproto.OFPFC_DELETE, - 0, 0, 0, 0, - dp.ofproto.OFPP_NONE, 0, None) - elif dp.ofproto == ofproto_v1_2: - match = dp.ofproto_parser.OFPMatch() - m = dp.ofproto_parser.OFPFlowMod(dp, 0, 0, dp.ofproto.OFPTT_ALL, - dp.ofproto.OFPFC_DELETE, - 0, 0, 0, 0xffffffff, - dp.ofproto.OFPP_ANY, - dp.ofproto.OFPG_ANY, - 0, match, []) - - dp.send_msg(m) - - def send_flow_stats(self, dp): - if dp.ofproto == ofproto_v1_0: - match = dp.ofproto_parser.OFPMatch(dp.ofproto.OFPFW_ALL, - 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0) - m = dp.ofproto_parser.OFPFlowStatsRequest(dp, 0, match, - 0, dp.ofproto.OFPP_NONE) - elif dp.ofproto == ofproto_v1_2: - match = dp.ofproto_parser.OFPMatch() - m = dp.ofproto_parser.OFPFlowStatsRequest(dp, dp.ofproto.OFPTT_ALL, - dp.ofproto.OFPP_ANY, - dp.ofproto.OFPG_ANY, - 0, 0, match) - - dp.send_msg(m) - - def verify_default(self, dp, stats): - return 'function %s() is not found.' % ("verify" + self.current[4:], ) - - def start_next_test(self, dp): - self.delete_all_flows(dp) - dp.send_barrier() - if len(self.pending): - t = self.pending.pop() - if self.is_supported(t): - LOG.info(LOG_TEST_START, t) - self.current = t - getattr(self, t)(dp) - dp.send_barrier() - self.send_flow_stats(dp) - else: - self.results[t] = LOG_TEST_UNSUPPORTED - self.unclear -= 1 - self.start_next_test(dp) - else: - self.print_results() - - def print_results(self): - LOG.info("TEST_RESULTS:") - ok = 0 - ng = 0 - skip = 0 - for t in sorted(self.results.keys()): - if self.results[t] is True: - ok += 1 - elif self.results[t] == LOG_TEST_UNSUPPORTED: - skip += 1 - else: - ng += 1 - LOG.info(" %s: %s", t, self.results[t]) - LOG.info(LOG_TEST_FINISH, self.unclear == 0, ok, ng, skip) - - @handler.set_ev_cls(ofp_event.EventOFPFlowStatsReply, - handler.MAIN_DISPATCHER) - def flow_reply_handler(self, ev): - self.run_verify(ev) - - @handler.set_ev_cls(ofp_event.EventOFPStatsReply, - handler.MAIN_DISPATCHER) - def stats_reply_handler(self, ev): - self.run_verify(ev) - - def run_verify(self, ev): - msg = ev.msg - dp = msg.datapath - - verify_func = self.verify_default - v = "verify" + self.current[4:] - if hasattr(self, v): - verify_func = getattr(self, v) - - result = verify_func(dp, msg.body) - if result is True: - self.unclear -= 1 - - self.results[self.current] = result - self.start_next_test(dp) - - @handler.set_ev_cls(dpset.EventDP) - def handler_datapath(self, ev): - if ev.enter: - self.start_next_test(ev.dp) - - @set_ev_cls(ofp_event.EventOFPBarrierReply, MAIN_DISPATCHER) - def barrier_replay_handler(self, ev): - pass - - def haddr_to_str(self, addr): - return mac.haddr_to_str(addr) - - def haddr_to_bin(self, string): - return mac.haddr_to_bin(string) - - def haddr_masked(self, haddr_bin, mask_bin): - return mac.haddr_bitand(haddr_bin, mask_bin) - - def ipv4_to_str(self, integre): - ip_list = [str((integre >> (24 - (n * 8)) & 255)) for n in range(4)] - return '.'.join(ip_list) - - def ipv4_to_int(self, string): - ip = string.split('.') - assert len(ip) == 4 - i = 0 - for b in ip: - b = int(b) - i = (i << 8) | b - return i - - def ipv4_masked(self, ip_int, mask_int): - return ip_int & mask_int - - def ipv6_to_str(self, integres): - return ':'.join(hex(x)[2:] for x in integres) - - def ipv6_to_int(self, string): - ip = string.split(':') - assert len(ip) == 8 - return [int(x, 16) for x in ip] - - def ipv6_masked(self, ipv6_int, mask_int): - return [x & y for (x, y) in - itertools.izip(ipv6_int, mask_int)] - - def is_supported(self, t): - return True diff --git a/ryu/tests/integrated/vrrp_common.py b/ryu/tests/integrated/vrrp_common.py deleted file mode 100644 index 58621f45..00000000 --- a/ryu/tests/integrated/vrrp_common.py +++ /dev/null @@ -1,221 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 Isaku Yamahata -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import time -import random - -from ryu.base import app_manager -from ryu.lib import hub -from ryu.lib import mac as lib_mac -from ryu.lib.packet import vrrp -from ryu.services.protocols.vrrp import api as vrrp_api -from ryu.services.protocols.vrrp import event as vrrp_event - - -_VRID = 7 -_PRIMARY_IP_ADDRESS0 = '10.0.0.2' -_PRIMARY_IP_ADDRESS1 = '10.0.0.3' - - -class VRRPCommon(app_manager.RyuApp): - _IFNAME0 = None - _IFNAME1 = None - - def __init__(self, *args, **kwargs): - super(VRRPCommon, self).__init__(*args, **kwargs) - - def _main(self): - self._main_version(vrrp.VRRP_VERSION_V3) - self._main_version(vrrp.VRRP_VERSION_V2) - print("done!") - - def _main_version(self, vrrp_version): - self._main_version_priority(vrrp_version, - vrrp.VRRP_PRIORITY_ADDRESS_OWNER) - self._main_version_priority(vrrp_version, - vrrp.VRRP_PRIORITY_BACKUP_MAX) - self._main_version_priority(vrrp_version, - vrrp.VRRP_PRIORITY_BACKUP_DEFAULT) - self._main_version_priority(vrrp_version, - vrrp.VRRP_PRIORITY_BACKUP_MIN) - - def _main_version_priority(self, vrrp_version, priority): - self._main_version_priority_sleep(vrrp_version, priority, False) - self._main_version_priority_sleep(vrrp_version, priority, True) - - def _check(self, vrrp_api, instances): - while True: - while True: - rep = vrrp_api.vrrp_list(self) - if len(rep.instance_list) >= len(instances) * 2: - if any(i.state == vrrp_event.VRRP_STATE_INITIALIZE - for i in rep.instance_list): - continue - break - print('%s / %s' % (len(rep.instance_list), len(instances) * 2)) - time.sleep(1) - -# for i in rep.instance_list: -# print('%s %s %s %s %s' % (i.instance_name, -# i.monitor_name, -# i.config, -# i.interface, -# i.state)) - assert len(rep.instance_list) == len(instances) * 2 - num_of_master = 0 - d = dict(((i.instance_name, i) for i in rep.instance_list)) - bad = 0 - for i in rep.instance_list: - assert i.state in (vrrp_event.VRRP_STATE_MASTER, - vrrp_event.VRRP_STATE_BACKUP) - if i.state == vrrp_event.VRRP_STATE_MASTER: - num_of_master += 1 - - vr = instances[i.config.vrid] - if (vr[0].config.priority > vr[1].config.priority and - i.instance_name == vr[1].instance_name) or \ - (vr[0].config.priority < vr[1].config.priority and - i.instance_name == vr[0].instance_name): - if i.state == vrrp_event.VRRP_STATE_MASTER: - print("bad master:") - print('%s %s' % (d[vr[0].instance_name].state, - d[vr[0].instance_name].config.priority)) - print('%s %s' % (d[vr[1].instance_name].state, - d[vr[1].instance_name].config.priority)) - bad += 1 -# assert i.state != vrrp_event.VRRP_STATE_MASTER - if bad > 0: - # this could be a transient state - print("%s bad masters" % bad) - time.sleep(1) - continue - if num_of_master >= len(instances): - assert num_of_master == len(instances) - break - print('%s / %s' % (num_of_master, len(instances))) - time.sleep(1) - continue - - def _main_version_priority_sleep(self, vrrp_version, priority, do_sleep): - app_mgr = app_manager.AppManager.get_instance() - self.logger.debug('%s', app_mgr.applications) - vrrp_mgr = app_mgr.applications['VRRPManager'] - - step = 5 - instances = {} - for vrid in range(1, 256, step): - if vrid == _VRID: - continue - print("vrid %s" % vrid) - l = {} - prio = max(vrrp.VRRP_PRIORITY_BACKUP_MIN, - min(vrrp.VRRP_PRIORITY_BACKUP_MAX, vrid)) - rep0 = self._configure_vrrp_router(vrrp_version, - prio, - _PRIMARY_IP_ADDRESS0, - self._IFNAME0, - vrid) - assert rep0.instance_name is not None - l[0] = rep0 - prio = max(vrrp.VRRP_PRIORITY_BACKUP_MIN, - min(vrrp.VRRP_PRIORITY_BACKUP_MAX, 256 - vrid)) - rep1 = self._configure_vrrp_router(vrrp_version, - prio, - _PRIMARY_IP_ADDRESS1, - self._IFNAME1, - vrid) - assert rep1.instance_name is not None - l[1] = rep1 - instances[vrid] = l - - print("vrid %s" % _VRID) - l = {} - rep0 = self._configure_vrrp_router(vrrp_version, priority, - _PRIMARY_IP_ADDRESS0, - self._IFNAME0, _VRID) - assert rep0.instance_name is not None - l[0] = rep0 - rep1 = self._configure_vrrp_router( - vrrp_version, vrrp.VRRP_PRIORITY_BACKUP_DEFAULT, - _PRIMARY_IP_ADDRESS1, self._IFNAME1, _VRID) - assert rep1.instance_name is not None - l[1] = rep1 - instances[_VRID] = l - - self.logger.debug('%s', vrrp_mgr._instances) - - if do_sleep: - print("priority %s" % priority) - print("waiting for instances starting") - - self._check(vrrp_api, instances) - - for vrid in instances.keys(): - if vrid == _VRID: - continue - which = vrid & 1 - new_priority = int(random.uniform(vrrp.VRRP_PRIORITY_BACKUP_MIN, - vrrp.VRRP_PRIORITY_BACKUP_MAX)) - i = instances[vrid][which] - vrrp_api.vrrp_config_change(self, i.instance_name, - priority=new_priority) - i.config.priority = new_priority - - if do_sleep: - print("priority shuffled") - - self._check(vrrp_api, instances) - - for vrid in instances.keys(): - if vrid == _VRID: - continue - which = vrid & 1 - vrrp_api.vrrp_shutdown(self, instances[vrid][which].instance_name) - vrrp_api.vrrp_shutdown(self, instances[_VRID][0].instance_name) - - if do_sleep: - print("shutting down instances") - while True: - rep = vrrp_api.vrrp_list(self) - if len(rep.instance_list) <= len(instances): - break - print("left %s" % len(rep.instance_list)) - time.sleep(1) - assert len(rep.instance_list) == len(instances) - print("waiting for the rest becoming master") - while True: - rep = vrrp_api.vrrp_list(self) - if all(i.state == vrrp_event.VRRP_STATE_MASTER - for i in rep.instance_list): - break - time.sleep(1) - - vrrp_api.vrrp_shutdown(self, instances[_VRID][1].instance_name) - for vrid in instances.keys(): - if vrid == _VRID: - continue - which = 1 - (vrid & 1) - vrrp_api.vrrp_shutdown(self, instances[vrid][which].instance_name) - - print("waiting for instances shutting down") - while True: - rep = vrrp_api.vrrp_list(self) - if not rep.instance_list: - break - print("left %s" % len(rep.instance_list)) - time.sleep(1) diff --git a/ryu/tests/mininet/l2/mpls/PopMPLS_mpls.mn b/ryu/tests/mininet/l2/mpls/PopMPLS_mpls.mn deleted file mode 100644 index 45fa9f96..00000000 --- a/ryu/tests/mininet/l2/mpls/PopMPLS_mpls.mn +++ /dev/null @@ -1,6 +0,0 @@ -TEST_NAME=MPLS-PopMPLS -DUMP_HOST=h2 -DUMP_IF=h2-eth0 -RYU_APP=test_mpls -PCAP_MZ="-t tcp -M 80 -P $TEST_NAME -c 3 -r" -PCAP_FILTER="! mpls && ip.proto==TCP" diff --git a/ryu/tests/mininet/l2/mpls/PushMPLS_ip.mn b/ryu/tests/mininet/l2/mpls/PushMPLS_ip.mn deleted file mode 100644 index 2634e788..00000000 --- a/ryu/tests/mininet/l2/mpls/PushMPLS_ip.mn +++ /dev/null @@ -1,6 +0,0 @@ -TEST_NAME=IP-PushMPLS -DUMP_HOST=h2 -DUMP_IF=h2-eth0 -RYU_APP=test_mpls -PCAP_MZ="-t tcp -P $TEST_NAME -c 3 -b 00:00:00:00:00:02" -PCAP_FILTER="mpls && ip.proto==TCP" diff --git a/ryu/tests/mininet/l2/mpls/PushMPLS_mpls.mn b/ryu/tests/mininet/l2/mpls/PushMPLS_mpls.mn deleted file mode 100644 index 5ac1702f..00000000 --- a/ryu/tests/mininet/l2/mpls/PushMPLS_mpls.mn +++ /dev/null @@ -1,6 +0,0 @@ -TEST_NAME=MPLS-PushMPLS -DUMP_HOST=h2 -DUMP_IF=h2-eth0 -RYU_APP=test_mpls -PCAP_MZ="-t tcp -M 100 -P $TEST_NAME -c 3 -r" -PCAP_FILTER="mpls.label==100 && mpls.label==200 && ip.proto==TCP" diff --git a/ryu/tests/mininet/l2/mpls/test_mpls.py b/ryu/tests/mininet/l2/mpls/test_mpls.py deleted file mode 100644 index 3090a08c..00000000 --- a/ryu/tests/mininet/l2/mpls/test_mpls.py +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import struct - -from ryu.base import app_manager -from ryu.controller import ofp_event -from ryu.controller import dpset -from ryu.controller.handler import MAIN_DISPATCHER -from ryu.controller.handler import set_ev_cls -from ryu.ofproto import ofproto_v1_2 -from ryu.ofproto import ether -from ryu.lib.mac import haddr_to_str - - -LOG = logging.getLogger(__name__) - - -class RunTestMininet(app_manager.RyuApp): - - _CONTEXTS = {'dpset': dpset.DPSet} - OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] - - def __init__(self, *args, **kwargs): - super(RunTestMininet, self).__init__(*args, **kwargs) - - def _add_flow(self, dp, match, actions): - inst = [dp.ofproto_parser.OFPInstructionActions( - dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] - - mod = dp.ofproto_parser.OFPFlowMod( - dp, cookie=0, cookie_mask=0, table_id=0, - command=dp.ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0, - priority=0xff, buffer_id=0xffffffff, - out_port=dp.ofproto.OFPP_ANY, out_group=dp.ofproto.OFPG_ANY, - flags=0, match=match, instructions=inst) - - dp.send_msg(mod) - - def _define_flow(self, dp): - in_port = 1 - out_port = 2 - - eth_IP = ether.ETH_TYPE_IP - eth_MPLS = ether.ETH_TYPE_MPLS - - # MPLS(80) -> PopMPLS - LOG.debug("--- add_flow PopMPLS") - m_label = 80 - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - match.set_dl_type(eth_MPLS) - match.set_mpls_label(m_label) - actions = [dp.ofproto_parser.OFPActionPopMpls(eth_IP), - dp.ofproto_parser.OFPActionOutput(out_port, 0)] - self._add_flow(dp, match, actions) - - # IP -> PushMPLS(90) - LOG.debug("--- add_flow PushMPLS") - s_label = 90 - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - match.set_dl_type(eth_IP) - f = dp.ofproto_parser.OFPMatchField.make( - dp.ofproto.OXM_OF_MPLS_LABEL, s_label) - actions = [dp.ofproto_parser.OFPActionPushMpls(eth_MPLS), - dp.ofproto_parser.OFPActionSetField(f), - dp.ofproto_parser.OFPActionOutput(out_port, 0)] - self._add_flow(dp, match, actions) - - # MPLS(100) -> PushMPLS(200) - LOG.debug("--- add_flow PushMPLS") - m_label = 100 - s_label = 200 - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - match.set_dl_type(eth_MPLS) - match.set_mpls_label(m_label) - f = dp.ofproto_parser.OFPMatchField.make( - dp.ofproto.OXM_OF_MPLS_LABEL, s_label) - actions = [dp.ofproto_parser.OFPActionPushMpls(eth_MPLS), - dp.ofproto_parser.OFPActionSetField(f), - dp.ofproto_parser.OFPActionOutput(out_port, 0)] - self._add_flow(dp, match, actions) - - # MPLS(1000):MPLS -> PopMPLS - # LOG.debug("--- add_flow PopMPLS") - # SKIP: ovs not supported - m_label = 1000 - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - match.set_dl_type(eth_MPLS) - match.set_mpls_label(m_label) - actions = [dp.ofproto_parser.OFPActionPopMpls(eth_MPLS), - dp.ofproto_parser.OFPActionOutput(out_port, 0)] - # self._add_flow(dp, match, actions) - - @set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) - def handler_datapath(self, ev): - if ev.enter: - self._define_flow(ev.dp) - - @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) - def packet_in_handler(self, ev): - msg = ev.msg - dst, src, eth_type = struct.unpack_from('!6s6sH', buffer(msg.data), 0) - in_port = msg.match.fields[0].value - - LOG.info("----------------------------------------") - LOG.info("* PacketIn") - LOG.info("in_port=%d, eth_type: %s", in_port, hex(eth_type)) - LOG.info("packet reason=%d buffer_id=%d", msg.reason, msg.buffer_id) - LOG.info("packet in datapath_id=%s src=%s dst=%s", - msg.datapath.id, haddr_to_str(src), haddr_to_str(dst)) diff --git a/ryu/tests/mininet/l2/vlan/PopVLAN_vlan.mn b/ryu/tests/mininet/l2/vlan/PopVLAN_vlan.mn deleted file mode 100644 index f1d1c6dd..00000000 --- a/ryu/tests/mininet/l2/vlan/PopVLAN_vlan.mn +++ /dev/null @@ -1,6 +0,0 @@ -TEST_NAME=VLAN-PopVLAN -DUMP_HOST=h2 -DUMP_IF=h2-eth0 -RYU_APP=test_vlan -PCAP_MZ="-t tcp -Q 8 -P $TEST_NAME -c 3 -r" -PCAP_FILTER="! vlan && ip.proto==TCP" diff --git a/ryu/tests/mininet/l2/vlan/PopVLAN_vlanvlan.mn b/ryu/tests/mininet/l2/vlan/PopVLAN_vlanvlan.mn deleted file mode 100644 index 90444a75..00000000 --- a/ryu/tests/mininet/l2/vlan/PopVLAN_vlanvlan.mn +++ /dev/null @@ -1,6 +0,0 @@ -TEST_NAME=VLAN:VLAN-PopVLAN -DUMP_HOST=h2 -DUMP_IF=h2-eth0 -RYU_APP=test_vlan -PCAP_MZ="-t tcp -Q 100,99 -P $TEST_NAME -c 3 -r" -PCAP_FILTER="vlan.id!=100 && vlan.id==99 && ip.proto==TCP" diff --git a/ryu/tests/mininet/l2/vlan/PushVLAN_icmp.mn b/ryu/tests/mininet/l2/vlan/PushVLAN_icmp.mn deleted file mode 100644 index 439ad233..00000000 --- a/ryu/tests/mininet/l2/vlan/PushVLAN_icmp.mn +++ /dev/null @@ -1,6 +0,0 @@ -TEST_NAME=ICMP-PushVLAN -DUMP_HOST=h2 -DUMP_IF=h2-eth0 -RYU_APP=test_vlan -PCAP_MZ="-t icmp ping -P $TEST_NAME -c 3 -r -b 00:00:00:00:00:02" -PCAP_FILTER="vlan && icmp.type==8" diff --git a/ryu/tests/mininet/l2/vlan/test_vlan.py b/ryu/tests/mininet/l2/vlan/test_vlan.py deleted file mode 100644 index 0b1be7fc..00000000 --- a/ryu/tests/mininet/l2/vlan/test_vlan.py +++ /dev/null @@ -1,130 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import struct - -from ryu.base import app_manager -from ryu.controller import ofp_event -from ryu.controller import dpset -from ryu.controller.handler import MAIN_DISPATCHER -from ryu.controller.handler import set_ev_cls -from ryu.ofproto import ofproto_v1_2 -from ryu.ofproto import ether -from ryu.ofproto import inet -from ryu.lib.mac import haddr_to_str - - -LOG = logging.getLogger(__name__) - - -class RunTestMininet(app_manager.RyuApp): - - _CONTEXTS = {'dpset': dpset.DPSet} - OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] - - def __init__(self, *args, **kwargs): - super(RunTestMininet, self).__init__(*args, **kwargs) - - def _add_flow(self, dp, match, actions): - inst = [dp.ofproto_parser.OFPInstructionActions( - dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] - - mod = dp.ofproto_parser.OFPFlowMod( - dp, cookie=0, cookie_mask=0, table_id=0, - command=dp.ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0, - priority=0xff, buffer_id=0xffffffff, - out_port=dp.ofproto.OFPP_ANY, out_group=dp.ofproto.OFPG_ANY, - flags=0, match=match, instructions=inst) - - dp.send_msg(mod) - - def _define_flow(self, dp): - in_port = 1 - out_port = 2 - - eth_IP = ether.ETH_TYPE_IP - eth_VLAN = ether.ETH_TYPE_8021Q - ip_ICMP = inet.IPPROTO_ICMP - - # VLAN(8) -> PopVLAN - LOG.debug("--- add_flow VLAN(8) to PopVLAN") - m_vid = 8 - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - match.set_dl_type(eth_IP) - match.set_vlan_vid(m_vid) - actions = [dp.ofproto_parser.OFPActionPopVlan(), - dp.ofproto_parser.OFPActionOutput(out_port, 0)] - self._add_flow(dp, match, actions) - - # ICMP -> PushVLAN(9) - LOG.debug("--- add_flow ICMP to PushVLAN(9)") - s_vid = 9 - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - match.set_dl_type(eth_IP) - match.set_ip_proto(ip_ICMP) - f = dp.ofproto_parser.OFPMatchField.make( - dp.ofproto.OXM_OF_VLAN_VID, s_vid) - actions = [dp.ofproto_parser.OFPActionPushVlan(eth_VLAN), - dp.ofproto_parser.OFPActionSetField(f), - dp.ofproto_parser.OFPActionOutput(out_port, 0)] - self._add_flow(dp, match, actions) - - # VLAN(10) -> PushVLAN(20) - # LOG.debug("--- add_flow VLAN(10) to PushVLAN(100)") - # SKIP: ovs not supported - m_vid = 10 - s_vid = 20 - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - match.set_dl_type(eth_IP) - match.set_vlan_vid(m_vid) - f = dp.ofproto_parser.OFPMatchField.make( - dp.ofproto.OXM_OF_VLAN_VID, s_vid) - actions = [dp.ofproto_parser.OFPActionPushVlan(eth_VLAN), - dp.ofproto_parser.OFPActionSetField(f), - dp.ofproto_parser.OFPActionOutput(out_port, 0)] - # self._add_flow(dp, match, actions) - - # VLAN(100):VLAN -> PopVLAN - LOG.debug("--- add_flow VLAN(100):VLAN to PopVLAN") - m_vid = 100 - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - match.set_dl_type(eth_VLAN) - match.set_vlan_vid(m_vid) - actions = [dp.ofproto_parser.OFPActionPopVlan(), - dp.ofproto_parser.OFPActionOutput(out_port, 0)] - self._add_flow(dp, match, actions) - - @set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) - def handler_datapath(self, ev): - if ev.enter: - self._define_flow(ev.dp) - - @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) - def packet_in_handler(self, ev): - msg = ev.msg - dst, src, eth_type = struct.unpack_from('!6s6sH', buffer(msg.data), 0) - in_port = msg.match.fields[0].value - - LOG.info("----------------------------------------") - LOG.info("* PacketIn") - LOG.info("in_port=%d, eth_type: %s", in_port, hex(eth_type)) - LOG.info("packet reason=%d buffer_id=%d", msg.reason, msg.buffer_id) - LOG.info("packet in datapath_id=%s src=%s dst=%s", - msg.datapath.id, haddr_to_str(src), haddr_to_str(dst)) diff --git a/ryu/tests/mininet/l3/icmp/ICMP_ping.mn b/ryu/tests/mininet/l3/icmp/ICMP_ping.mn deleted file mode 100644 index f558693d..00000000 --- a/ryu/tests/mininet/l3/icmp/ICMP_ping.mn +++ /dev/null @@ -1,6 +0,0 @@ -TEST_NAME=ICMP-Req -DUMP_HOST=h2 -DUMP_IF=h2-eth0 -RYU_APP=test_icmp -PCAP_MZ="-t icmp ping -c 3 -r -b 00:00:00:00:00:00" -PCAP_FILTER="icmp.type==8" diff --git a/ryu/tests/mininet/l3/icmp/ICMP_reply.mn b/ryu/tests/mininet/l3/icmp/ICMP_reply.mn deleted file mode 100644 index eb6bc8b6..00000000 --- a/ryu/tests/mininet/l3/icmp/ICMP_reply.mn +++ /dev/null @@ -1,6 +0,0 @@ -TEST_NAME=ICMP-Reply -DUMP_HOST=h1 -DUMP_IF=h1-eth0 -RYU_APP=test_icmp -PCAP_MZ="-t icmp ping -c 3 -r -B h2" -PCAP_FILTER="icmp.type==0" diff --git a/ryu/tests/mininet/l3/icmp/test_icmp.py b/ryu/tests/mininet/l3/icmp/test_icmp.py deleted file mode 100644 index 090f83e5..00000000 --- a/ryu/tests/mininet/l3/icmp/test_icmp.py +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import struct - -from ryu.base import app_manager -from ryu.controller import ofp_event -from ryu.controller import dpset -from ryu.controller.handler import MAIN_DISPATCHER -from ryu.controller.handler import set_ev_cls -from ryu.ofproto import ofproto_v1_2 -from ryu.lib.mac import haddr_to_str - - -LOG = logging.getLogger(__name__) - - -class RunTestMininet(app_manager.RyuApp): - - _CONTEXTS = {'dpset': dpset.DPSet} - OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] - - def __init__(self, *args, **kwargs): - super(RunTestMininet, self).__init__(*args, **kwargs) - - def _add_flow(self, dp, match, actions): - inst = [dp.ofproto_parser.OFPInstructionActions( - dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] - - mod = dp.ofproto_parser.OFPFlowMod( - dp, cookie=0, cookie_mask=0, table_id=0, - command=dp.ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0, - priority=0xff, buffer_id=0xffffffff, - out_port=dp.ofproto.OFPP_ANY, out_group=dp.ofproto.OFPG_ANY, - flags=0, match=match, instructions=inst) - - dp.send_msg(mod) - - def _define_flow(self, dp): - in_port = 1 - out_port = 2 - - # port:1 -> port:2 - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - actions = [dp.ofproto_parser.OFPActionOutput(out_port, 0)] - self._add_flow(dp, match, actions) - - # port:1 -> port:2 - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(out_port) - actions = [dp.ofproto_parser.OFPActionOutput(in_port, 0)] - self._add_flow(dp, match, actions) - - @set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) - def handler_datapath(self, ev): - if ev.enter: - self._define_flow(ev.dp) - - @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) - def packet_in_handler(self, ev): - msg = ev.msg - dst, src, eth_type = struct.unpack_from('!6s6sH', buffer(msg.data), 0) - in_port = msg.match.fields[0].value - - LOG.info("----------------------------------------") - LOG.info("* PacketIn") - LOG.info("in_port=%d, eth_type: %s", in_port, hex(eth_type)) - LOG.info("packet reason=%d buffer_id=%d", msg.reason, msg.buffer_id) - LOG.info("packet in datapath_id=%s src=%s dst=%s", - msg.datapath.id, haddr_to_str(src), haddr_to_str(dst)) diff --git a/ryu/tests/mininet/l3/ip_ttl/DecNwTtl.mn b/ryu/tests/mininet/l3/ip_ttl/DecNwTtl.mn deleted file mode 100644 index 60cd4623..00000000 --- a/ryu/tests/mininet/l3/ip_ttl/DecNwTtl.mn +++ /dev/null @@ -1,6 +0,0 @@ -TEST_NAME=DecNwTtl -DUMP_HOST=h2 -DUMP_IF=h2-eth0 -RYU_APP=test_ip_ttl -PCAP_MZ="-t icmp ttl=64 -P $TEST_NAME -c 3 -b 00:00:00:00:00:02" -PCAP_FILTER="icmp && ip.ttl==63" diff --git a/ryu/tests/mininet/l3/ip_ttl/test_ip_ttl.py b/ryu/tests/mininet/l3/ip_ttl/test_ip_ttl.py deleted file mode 100644 index f6f00ab9..00000000 --- a/ryu/tests/mininet/l3/ip_ttl/test_ip_ttl.py +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import struct - -from ryu.base import app_manager -from ryu.controller import ofp_event -from ryu.controller import dpset -from ryu.controller.handler import MAIN_DISPATCHER -from ryu.controller.handler import set_ev_cls -from ryu.ofproto import ofproto_v1_2 -from ryu.ofproto import ether -from ryu.lib.mac import haddr_to_str - - -LOG = logging.getLogger(__name__) - - -class RunTestMininet(app_manager.RyuApp): - - _CONTEXTS = {'dpset': dpset.DPSet} - OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] - - def __init__(self, *args, **kwargs): - super(RunTestMininet, self).__init__(*args, **kwargs) - - def _add_flow(self, dp, match, actions): - inst = [dp.ofproto_parser.OFPInstructionActions( - dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] - - mod = dp.ofproto_parser.OFPFlowMod( - dp, cookie=0, cookie_mask=0, table_id=0, - command=dp.ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0, - priority=0xff, buffer_id=0xffffffff, - out_port=dp.ofproto.OFPP_ANY, out_group=dp.ofproto.OFPG_ANY, - flags=0, match=match, instructions=inst) - - dp.send_msg(mod) - - def _define_flow(self, dp): - in_port = 1 - out_port = 2 - - eth_IP = ether.ETH_TYPE_IP - - # ICMP -> DecNwTtl - LOG.debug("--- add_flow DecNwTtl") - match = dp.ofproto_parser.OFPMatch() - match.set_in_port(in_port) - match.set_dl_type(eth_IP) - actions = [dp.ofproto_parser.OFPActionDecNwTtl(), - dp.ofproto_parser.OFPActionOutput(out_port, 0)] - self._add_flow(dp, match, actions) - - @set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) - def handler_datapath(self, ev): - if ev.enter: - self._define_flow(ev.dp) - - @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) - def packet_in_handler(self, ev): - msg = ev.msg - dst, src, eth_type = struct.unpack_from('!6s6sH', buffer(msg.data), 0) - in_port = msg.match.fields[0].value - - LOG.info("----------------------------------------") - LOG.info("* PacketIn") - LOG.info("in_port=%d, eth_type: %s", in_port, hex(eth_type)) - LOG.info("packet reason=%d buffer_id=%d", msg.reason, msg.buffer_id) - LOG.info("packet in datapath_id=%s src=%s dst=%s", - msg.datapath.id, haddr_to_str(src), haddr_to_str(dst)) diff --git a/ryu/tests/mininet/packet_lib/arp/ARP_gratuitous.mn b/ryu/tests/mininet/packet_lib/arp/ARP_gratuitous.mn deleted file mode 100644 index ca7a30ae..00000000 --- a/ryu/tests/mininet/packet_lib/arp/ARP_gratuitous.mn +++ /dev/null @@ -1,7 +0,0 @@ -# test-GratuitousARP-request -TEST_NAME=GARP-Request -DUMP_HOST=h1 -DUMP_IF=h1-eth0 -RYU_APP=test_arp -PCAP_MZ="-S" -PCAP_FILTER="arp.isgratuitous && arp.src.proto_ipv4==10.0.0.100 && arp.src.hw_mac==fe:ee:ee:ee:ee:ef" diff --git a/ryu/tests/mininet/packet_lib/arp/ARP_reply.mn b/ryu/tests/mininet/packet_lib/arp/ARP_reply.mn deleted file mode 100644 index 3969cba1..00000000 --- a/ryu/tests/mininet/packet_lib/arp/ARP_reply.mn +++ /dev/null @@ -1,7 +0,0 @@ -# test-ARP-reply -TEST_NAME=ARP-Reply -DUMP_HOST=h1 -DUMP_IF=h1-eth0 -RYU_APP=test_arp -PCAP_MZ="-t arp request,targetip=10.0.0.100 -c 3 -r" -PCAP_FILTER="arp.opcode==reply && arp.src.proto_ipv4==10.0.0.100 && arp.src.hw_mac==fe:ee:ee:ee:ee:ef" diff --git a/ryu/tests/mininet/packet_lib/arp/ARP_request.mn b/ryu/tests/mininet/packet_lib/arp/ARP_request.mn deleted file mode 100644 index b44450ef..00000000 --- a/ryu/tests/mininet/packet_lib/arp/ARP_request.mn +++ /dev/null @@ -1,7 +0,0 @@ -# test-ARP-request -TEST_NAME=ARP-Request -DUMP_HOST=h1 -DUMP_IF=h1-eth0 -RYU_APP=test_arp -PCAP_MZ="-t arp request,targetip=10.0.0.1" -PCAP_FILTER="arp.opcode==request && arp.src.proto_ipv4==10.0.0.100 && arp.dst.proto_ipv4==10.0.0.1 && arp.src.hw_mac==fe:ee:ee:ee:ee:ef" diff --git a/ryu/tests/mininet/packet_lib/arp/test_arp.py b/ryu/tests/mininet/packet_lib/arp/test_arp.py deleted file mode 100644 index 39948f54..00000000 --- a/ryu/tests/mininet/packet_lib/arp/test_arp.py +++ /dev/null @@ -1,199 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import logging -import array -import netaddr - -from ryu.base import app_manager -from ryu.controller import dpset -from ryu.controller import ofp_event -from ryu.controller import handler -from ryu.ofproto import ofproto_v1_2 -from ryu.ofproto import ether -from ryu.ofproto import inet -from ryu.lib import mac -from ryu.lib.packet import packet -from ryu.lib.packet import ethernet -from ryu.lib.packet import arp -from ryu.lib.packet import ipv4 -from ryu.lib.packet import icmp - - -LOG = logging.getLogger(__name__) - - -class RunTestMininet(app_manager.RyuApp): - - _CONTEXTS = {'dpset': dpset.DPSet} - OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] - - ZERO_MAC = mac.haddr_to_bin('00:00:00:00:00:00') - BROADCAST_MAC = mac.haddr_to_bin('ff:ff:ff:ff:ff:ff') - RYU_MAC = mac.haddr_to_bin('fe:ee:ee:ee:ee:ef') - HOST_MAC = mac.haddr_to_bin('00:00:00:00:00:01') - RYU_IP = int(netaddr.IPAddress('10.0.0.100')) - HOST_IP = int(netaddr.IPAddress('10.0.0.1')) - - def __init__(self, *args, **kwargs): - super(RunTestMininet, self).__init__(*args, **kwargs) - - def _send_msg(self, dp, data): - buffer_id = 0xffffffff - in_port = dp.ofproto.OFPP_LOCAL - actions = [dp.ofproto_parser.OFPActionOutput(1, 0)] - msg = dp.ofproto_parser.OFPPacketOut( - dp, buffer_id, in_port, actions, data) - dp.send_msg(msg) - - def _add_flow(self, dp, match, actions): - inst = [dp.ofproto_parser.OFPInstructionActions( - dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] - mod = dp.ofproto_parser.OFPFlowMod( - dp, cookie=0, cookie_mask=0, table_id=0, - command=dp.ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0, - priority=0xff, buffer_id=0xffffffff, - out_port=dp.ofproto.OFPP_ANY, out_group=dp.ofproto.OFPG_ANY, - flags=0, match=match, instructions=inst) - dp.send_msg(mod) - - def _find_protocol(self, pkt, name): - for p in pkt.protocols: - if hasattr(p, 'protocol_name'): - if p.protocol_name == name: - return p - - def _get_protocols(self, pkt): - protocols = {} - for p in pkt: - if hasattr(p, 'protocol_name'): - protocols[p.protocol_name] = p - else: - protocols['payload'] = p - return protocols - - def _build_ether(self, ethertype, dst_mac=HOST_MAC): - e = ethernet.ethernet(dst_mac, self.RYU_MAC, ethertype) - return e - - def _build_arp(self, opcode, dst_ip=HOST_IP): - if opcode == arp.ARP_REQUEST: - _eth_dst_mac = self.BROADCAST_MAC - _arp_dst_mac = self.ZERO_MAC - elif opcode == arp.ARP_REPLY: - _eth_dst_mac = self.HOST_MAC - _arp_dst_mac = self.HOST_MAC - - e = self._build_ether(ether.ETH_TYPE_ARP, _eth_dst_mac) - a = arp.arp(hwtype=1, proto=ether.ETH_TYPE_IP, hlen=6, plen=4, - opcode=opcode, src_mac=self.RYU_MAC, src_ip=self.RYU_IP, - dst_mac=_arp_dst_mac, dst_ip=dst_ip) - p = packet.Packet() - p.add_protocol(e) - p.add_protocol(a) - p.serialize() - - return p - - def _build_echo(self, _type, echo): - e = self._build_ether(ether.ETH_TYPE_IP) - ip = ipv4.ipv4(version=4, header_length=5, tos=0, total_length=84, - identification=0, flags=0, offset=0, ttl=64, - proto=inet.IPPROTO_ICMP, csum=0, - src=self.RYU_IP, dst=self.HOST_IP) - ping = icmp.icmp(_type, code=0, csum=0, data=echo) - - p = packet.Packet() - p.add_protocol(e) - p.add_protocol(ip) - p.add_protocol(ping) - p.serialize() - return p - - def _garp(self): - p = self._build_arp(arp.ARP_REQUEST, self.RYU_IP) - return p.data - - def _arp_request(self): - p = self._build_arp(arp.ARP_REQUEST, self.HOST_IP) - return p.data - - def _arp_reply(self): - p = self._build_arp(arp.ARP_REPLY, self.HOST_IP) - return p.data - - def _echo_request(self, echo): - p = self._build_echo(icmp.ICMP_ECHO_REQUEST, echo) - return p.data - - def _echo_reply(self, echo): - p = self._build_echo(icmp.ICMP_ECHO_REPLY, echo) - return p.data - - @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER) - def packet_in_handler(self, ev): - msg = ev.msg - dp = msg.datapath - - pkt = packet.Packet(array.array('B', msg.data)) - p_arp = self._find_protocol(pkt, "arp") - p_icmp = self._find_protocol(pkt, "icmp") - p_ipv4 = self._find_protocol(pkt, "ipv4") - - if p_arp: - src_ip = str(netaddr.IPAddress(p_arp.src_ip)) - dst_ip = str(netaddr.IPAddress(p_arp.dst_ip)) - if p_arp.opcode == arp.ARP_REQUEST: - LOG.debug("--- PacketIn: ARP_Request: %s->%s", src_ip, dst_ip) - if p_arp.dst_ip == self.RYU_IP: - LOG.debug("--- send Pkt: ARP_Reply") - data = self._arp_reply() - self._send_msg(dp, data) - elif p_arp.dst_ip == self.HOST_IP: - LOG.debug(" PacketIn: GARP") - LOG.debug("--- send Pkt: ARP_Request") - data = self._arp_request() - self._send_msg(dp, data) - elif p_arp.opcode == arp.ARP_REPLY: - LOG.debug("--- PacketIn: ARP_Reply: %s->%s", src_ip, dst_ip) - LOG.debug("--- send Pkt: Echo_Request") - echo = icmp.echo(id_=66, seq=1) - data = self._echo_request(echo) - self._send_msg(dp, data) - - if p_icmp: - src = str(netaddr.IPAddress(p_ipv4.src)) - dst = str(netaddr.IPAddress(p_ipv4.dst)) - if p_icmp.type == icmp.ICMP_ECHO_REQUEST: - LOG.debug("--- PacketIn: Echo_Request: %s->%s", src, dst) - if p_ipv4.dst == self.RYU_IP: - LOG.debug("--- send Pkt: Echo_Reply") - echo = p_icmp.data - echo.data = bytearray(echo.data) - data = self._echo_reply(echo) - self._send_msg(dp, data) - elif p_icmp.type == icmp.ICMP_ECHO_REPLY: - LOG.debug("--- PacketIn: Echo_Reply: %s->%s", src, dst) - - @handler.set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) - def handler_datapath(self, ev): - if ev.enter: - dp = ev.dp - - LOG.debug("--- send Pkt: Gratuitous ARP_Request") - data = self._garp() - self._send_msg(dp, data) diff --git a/ryu/tests/mininet/run_mnet-test.sh b/ryu/tests/mininet/run_mnet-test.sh deleted file mode 100755 index c1ecbe23..00000000 --- a/ryu/tests/mininet/run_mnet-test.sh +++ /dev/null @@ -1,274 +0,0 @@ -#!/bin/sh - -RUN_DIR=`dirname $0` -CMD_NAME=`basename $0 .sh` -CMD_PATH=`readlink -f $0` -CMD_DIR=`dirname $CMD_PATH` -DUMP_SEC=10 -DUMP_DELAY=2 -DUMP_DIR=/tmp/test-mn/dump -TEST_LIST= -TEST_SUFFIX=.mn -MN_PRE_FILE=/tmp/test-mn/mn-pre -MN_POST_FILE=/tmp/test-mn/mn-post -PKG_LIST="tshark tcpreplay mz" -RTN=0 - -# usage -usage() { - echo "Usage: $0 [OPTION] [TEST DIR or FILE]..." - echo "" - echo "Run Ryu's test in mininet" - echo "ex.) $ $0 l2 l3/icmp/ICMP_ping.mn" - echo "" - echo "Options:" - echo " -h, --help show this help message and exit" - exit 0 -} - -# set default environment -set_env() { - POST_IF=h1-eth0 - DUMP_HOST=h2 - DUMP_IF=h2-eth0 - TEST_NAME= - DUMP_FILE= - RYU_APP= - RYU_LOG= - PCAP_MZ= - PCAP_FILE= - PCAP_FILTER= - PCAP_COM= - CACHE_HIT= -} - -# making mininet-test-pre-file -mn_pre() { - exec 3>&1 - exec >$MN_PRE_FILE - echo "sh echo '----------------------------------'" - echo "sh echo '(pre) mininet topology dump.'" - echo "sh echo '----------------------------------'" - echo "dump" - echo "net" - echo "sh echo '----------------------------------'" - echo "sh echo '(pre) tshark start.'" - echo "sh echo '----------------------------------'" - echo "$DUMP_HOST tshark -i $DUMP_IF -a duration:$DUMP_SEC -w $DUMP_FILE &" - echo "sh sleep $DUMP_DELAY" - echo "sh echo '----------------------------------'" - exec 1>&3 -} - -# making mininet-test-post-file -mn_post() { - exec 3>&1 - exec >$MN_POST_FILE - echo "sh ovs-vsctl del-controller s1" - echo "sh ovs-vsctl set bridge s1 protocols='[OpenFlow10,OpenFlow12]'" - echo "sh ovs-vsctl set-controller s1 tcp:127.0.0.1" - echo "sh echo '----------------------------------'" - echo "sh echo '(post) packet sending...'" - echo "sh echo '----------------------------------'" - echo $PCAP_COM - echo "sh sleep 1" - echo "sh echo '----------------------------------'" - echo "sh echo '(post) dump flows.'" - echo "sh echo '----------------------------------'" - echo "sh ovs-ofctl dump-flows s1" - echo "sh echo '----------------------------------'" - exec 1>&3 -} - -# ovs cache-hit incremental check -ovs_cache_hit() { - expr `sudo ovs-dpctl show|sed -n 's|lookups: hit:||gp'|awk '{print $1}'` - ${1:-0} -} - -# starting ryu-manager -run_ryu() { - ERRSTAT=0 - ERRTAG="run_ryu() :" - - echo "Inf: RYU_APP=$RYU_APP" - echo "Inf: ryu-manager starting..." - ryu-manager --verbose $RYU_APP 2>$DUMP_DIR/$RYU_LOG & - PID_RYU=$! - sleep 1 - [ -d /proc/$PID_RYU ] || err $ERRTAG "failed to start ryu-manager." - - return $ERRSTAT -} - -# starting mininet and test-script -run_mn() { - echo "Info: mininet starting..." - sudo mn --mac --test none --pre $MN_PRE_FILE --post $MN_POST_FILE \ - --controller remote 127.0.0.1 -} - -# cleaning after mininet -clean_mn() { - wait_ryu - rm -f $MN_PRE_FILE $MN_POST_FILE -} - -# check packet and chache-hit -check() { - PACKET=`tshark -r $DUMP_FILE -R "$PCAP_FILTER" 2>/dev/null` - if [ ! "$PACKET" ]; then - RESULT=NG - REASON="(unmatched packet. please check $DUMP_FILE)" - elif [ "$CACHE_HIT" ] && [ `ovs_cache_hit $CACHE_HIT` -eq 0 ]; then - RESULT=NG - REASON="(ovs cache hit miss.)" - else - RESULT=OK; REASON= - fi - echo - echo "TEST ${TEST_NAME} : $RESULT $REASON" -} - -# stoping ryu-manager -wait_ryu() { - kill -2 $PID_RYU - wait $PID_RYU -} - -# test-main -test_mn() { - DUMP_FILE=$DUMP_DIR/$DUMP_FILE - touch $DUMP_FILE - sudo chmod o+w $DUMP_FILE - [ "$CACHE_HIT" ] && CACHE_HIT=`ovs_cache_hit 0` - mn_pre - mn_post - run_ryu; [ $? -ne 0 ] && return 1 - run_mn; [ $? -ne 0 ] && return 1 - check - - return 0 -} - -err() { - echo Error: $* - ERRSTAT=1 -} - -mnfile_check() { - test=`basename $1 $TEST_SUFFIX` - file=`readlink -f $1` - TEST_DIR=`dirname $file` - ERRSTAT=0 - ERRTAG="mnfile_check() :" - - # test-file check - if [ ! -r $file ]; then - err $ERRTAG "cannot open the file: $file" - return $ERRSTAT - fi - - . $file || err $ERRTAG "failed to include $file" - - # parameter check - [ "$RYU_APP" ] || err $ERRTAG: "RYU_APP is not defined" - [ "$PCAP_FILE" -o "$PCAP_MZ" ] || err $ERRTAG: "PCAP_FILE or PCAP_MZ is not defined" - [ "$PCAP_FILTER" ] || err $ERRTAG "PCAP_FILTER is not defined" - [ "$TEST_NAME" ] || TEST_NAME=$test - [ "$DUMP_FILE" ] || DUMP_FILE=$test.dump - [ "$RYU_LOG" ] || RYU_LOG=ryu-manager.$test.log - [ $ERRSTAT -ne 0 ] && return $ERRSTAT - - # pcap check (pcap-file or mz-option) - if [ "$PCAP_FILE" ]; then - PCAP_FILE=$TEST_DIR/$PCAP_FILE - [ -r $PCAP_FILE ] || err $ERRTAG "PCAP_FILE[$PCAP_FILE] cannot read" - PCAP_COM="h1 tcpreplay -l 3 -i $POST_IF $PCAP_FILE" - elif [ "$PCAP_MZ" ]; then - PCAP_COM="h1 mz $POST_IF $PCAP_MZ" - fi - [ $ERRSTAT -ne 0 ] && return $ERRSTAT - - # ryu-app check - [ -r $TEST_DIR/$RYU_APP -o -r $TEST_DIR/${RYU_APP}.py ] && RYU_APP=$TEST_DIR/$RYU_APP - - return $ERRSTAT -} - -arg_check() { - ARGLIST= - ERRTAG="argcheck() :" - - case "$1" in - -h|--help) usage;; - esac - - if [ $# -ne 0 ]; then - ARGLIST=$* - else - ARGLIST=`find . -type f -name "*$TEST_SUFFIX"` - fi - - for arg in $ARGLIST; do - if [ -d $arg ]; then - file=`find $arg -type f -name "*$TEST_SUFFIX"` - elif [ -f $arg ]; then - file=$arg - else - err $ERRTAG "$arg is not found" - file= - fi - - TEST_LIST="$TEST_LIST $file" - done -} - -pkg_check() { - no_pkg= - for pkg in $PKG_LIST; do - [ ! `which $pkg` ] && no_pkg="$no_pkg $pkg" - done - for pkg in $no_pkg; do - echo "Error: Package [ $pkg ] is not found. Please install." - done - [ "$no_pkg" ] && exit 1 -} - -### main -[ -d $DUMP_DIR ] || mkdir -p $DUMP_DIR - -pkg_check -arg_check $* -echo "\n---------- test target ----------" -for testfile in $TEST_LIST; do echo $testfile; done - -count=0 -for testfile in $TEST_LIST; do - echo "\n---------- test [$testfile] start ----------" - set_env - mnfile_check $testfile && test_mn - case $? in - 0) msg="finished : $RESULT" ;; - *) msg="skipped with error"; RESULT="skip" ;; - esac - eval RESULT_${count}=\$RESULT - eval REASON_${count}=\$REASON - count=`expr $count + 1` - num=`eval echo \\${num_$RESULT:-0}` - eval num_${RESULT}=`expr $num + 1` - [ "$RESULT" != "OK" ] && RTN=1 - clean_mn - echo "\n---------- test [$testfile] $msg ----------" -done - -# output summary results -echo "\n---------- test results ----------" -count=0 -for testfile in $TEST_LIST; do - eval echo \$testfile : \$RESULT_${count} \$REASON_${count} - count=`expr $count + 1` -done -echo "----------------------------------" -echo "Ran $count tests. Result: ${num_OK:+OK=}$num_OK ${num_NG:+NG=}$num_NG ${num_skip:+skip=}$num_skip" - -exit $RTN diff --git a/ryu/tests/packet_data/bgp4/bgp4-keepalive.pcap b/ryu/tests/packet_data/bgp4/bgp4-keepalive.pcap deleted file mode 100644 index 355e9dab..00000000 Binary files a/ryu/tests/packet_data/bgp4/bgp4-keepalive.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/bgp4-open.pcap b/ryu/tests/packet_data/bgp4/bgp4-open.pcap deleted file mode 100644 index 1ef507bb..00000000 Binary files a/ryu/tests/packet_data/bgp4/bgp4-open.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/bgp4-update.pcap b/ryu/tests/packet_data/bgp4/bgp4-update.pcap deleted file mode 100644 index 37354938..00000000 Binary files a/ryu/tests/packet_data/bgp4/bgp4-update.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/bgp4-update_ipv6.pcap b/ryu/tests/packet_data/bgp4/bgp4-update_ipv6.pcap deleted file mode 100644 index 49ed4d9e..00000000 Binary files a/ryu/tests/packet_data/bgp4/bgp4-update_ipv6.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/bgp4-update_vpnv6.pcap b/ryu/tests/packet_data/bgp4/bgp4-update_vpnv6.pcap deleted file mode 100644 index 07e5ebb3..00000000 Binary files a/ryu/tests/packet_data/bgp4/bgp4-update_vpnv6.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/evpn_esi_arbitrary.pcap b/ryu/tests/packet_data/bgp4/evpn_esi_arbitrary.pcap deleted file mode 100644 index 490ee839..00000000 Binary files a/ryu/tests/packet_data/bgp4/evpn_esi_arbitrary.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/evpn_esi_as_based.pcap b/ryu/tests/packet_data/bgp4/evpn_esi_as_based.pcap deleted file mode 100644 index d17183a7..00000000 Binary files a/ryu/tests/packet_data/bgp4/evpn_esi_as_based.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/evpn_esi_l2_bridge.pcap b/ryu/tests/packet_data/bgp4/evpn_esi_l2_bridge.pcap deleted file mode 100644 index 0f8d3f95..00000000 Binary files a/ryu/tests/packet_data/bgp4/evpn_esi_l2_bridge.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/evpn_esi_lacp.pcap b/ryu/tests/packet_data/bgp4/evpn_esi_lacp.pcap deleted file mode 100644 index 833109b5..00000000 Binary files a/ryu/tests/packet_data/bgp4/evpn_esi_lacp.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/evpn_esi_mac_base.pcap b/ryu/tests/packet_data/bgp4/evpn_esi_mac_base.pcap deleted file mode 100644 index 3b6fa798..00000000 Binary files a/ryu/tests/packet_data/bgp4/evpn_esi_mac_base.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/evpn_esi_router_id.pcap b/ryu/tests/packet_data/bgp4/evpn_esi_router_id.pcap deleted file mode 100644 index b69ce620..00000000 Binary files a/ryu/tests/packet_data/bgp4/evpn_esi_router_id.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/evpn_nlri_eth_a-d.pcap b/ryu/tests/packet_data/bgp4/evpn_nlri_eth_a-d.pcap deleted file mode 100644 index 434c898a..00000000 Binary files a/ryu/tests/packet_data/bgp4/evpn_nlri_eth_a-d.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/evpn_nlri_eth_seg.pcap b/ryu/tests/packet_data/bgp4/evpn_nlri_eth_seg.pcap deleted file mode 100644 index a99804b3..00000000 Binary files a/ryu/tests/packet_data/bgp4/evpn_nlri_eth_seg.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/evpn_nlri_inc_multi_eth_tag.pcap b/ryu/tests/packet_data/bgp4/evpn_nlri_inc_multi_eth_tag.pcap deleted file mode 100644 index 293722db..00000000 Binary files a/ryu/tests/packet_data/bgp4/evpn_nlri_inc_multi_eth_tag.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/evpn_nlri_ip_prefix.pcap b/ryu/tests/packet_data/bgp4/evpn_nlri_ip_prefix.pcap deleted file mode 100644 index f1598ee8..00000000 Binary files a/ryu/tests/packet_data/bgp4/evpn_nlri_ip_prefix.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/evpn_nlri_mac_ip_ad.pcap b/ryu/tests/packet_data/bgp4/evpn_nlri_mac_ip_ad.pcap deleted file mode 100644 index f9152e80..00000000 Binary files a/ryu/tests/packet_data/bgp4/evpn_nlri_mac_ip_ad.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/flowspec_action_redirect.pcap b/ryu/tests/packet_data/bgp4/flowspec_action_redirect.pcap deleted file mode 100644 index 70d65ee4..00000000 Binary files a/ryu/tests/packet_data/bgp4/flowspec_action_redirect.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/flowspec_action_traffic_action.pcap b/ryu/tests/packet_data/bgp4/flowspec_action_traffic_action.pcap deleted file mode 100644 index 952723ea..00000000 Binary files a/ryu/tests/packet_data/bgp4/flowspec_action_traffic_action.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/flowspec_action_traffic_marking.pcap b/ryu/tests/packet_data/bgp4/flowspec_action_traffic_marking.pcap deleted file mode 100644 index 8f00c0f9..00000000 Binary files a/ryu/tests/packet_data/bgp4/flowspec_action_traffic_marking.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/flowspec_action_traffic_rate.pcap b/ryu/tests/packet_data/bgp4/flowspec_action_traffic_rate.pcap deleted file mode 100644 index 9f20f5e6..00000000 Binary files a/ryu/tests/packet_data/bgp4/flowspec_action_traffic_rate.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/flowspec_nlri_ipv4.pcap b/ryu/tests/packet_data/bgp4/flowspec_nlri_ipv4.pcap deleted file mode 100644 index 885a106a..00000000 Binary files a/ryu/tests/packet_data/bgp4/flowspec_nlri_ipv4.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/flowspec_nlri_ipv6.pcap b/ryu/tests/packet_data/bgp4/flowspec_nlri_ipv6.pcap deleted file mode 100644 index 82534a61..00000000 Binary files a/ryu/tests/packet_data/bgp4/flowspec_nlri_ipv6.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/flowspec_nlri_l2vpn.pcap b/ryu/tests/packet_data/bgp4/flowspec_nlri_l2vpn.pcap deleted file mode 100644 index 5236c831..00000000 Binary files a/ryu/tests/packet_data/bgp4/flowspec_nlri_l2vpn.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/flowspec_nlri_vpn4.pcap b/ryu/tests/packet_data/bgp4/flowspec_nlri_vpn4.pcap deleted file mode 100644 index 236110db..00000000 Binary files a/ryu/tests/packet_data/bgp4/flowspec_nlri_vpn4.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/bgp4/flowspec_nlri_vpn6.pcap b/ryu/tests/packet_data/bgp4/flowspec_nlri_vpn6.pcap deleted file mode 100644 index cdf4c1c0..00000000 Binary files a/ryu/tests/packet_data/bgp4/flowspec_nlri_vpn6.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/mrt/rib.20161101.0000_pick.bz2 b/ryu/tests/packet_data/mrt/rib.20161101.0000_pick.bz2 deleted file mode 100644 index 0e02ef2d..00000000 Binary files a/ryu/tests/packet_data/mrt/rib.20161101.0000_pick.bz2 and /dev/null differ diff --git a/ryu/tests/packet_data/mrt/updates.20161101.0000.bz2 b/ryu/tests/packet_data/mrt/updates.20161101.0000.bz2 deleted file mode 100644 index 6caefe23..00000000 Binary files a/ryu/tests/packet_data/mrt/updates.20161101.0000.bz2 and /dev/null differ diff --git a/ryu/tests/packet_data/of10/1-1-ofp_packet_out.packet b/ryu/tests/packet_data/of10/1-1-ofp_packet_out.packet deleted file mode 100644 index 8093e84c..00000000 Binary files a/ryu/tests/packet_data/of10/1-1-ofp_packet_out.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/1-2-ofp_flow_mod.packet b/ryu/tests/packet_data/of10/1-2-ofp_flow_mod.packet deleted file mode 100644 index 881f4946..00000000 Binary files a/ryu/tests/packet_data/of10/1-2-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/1-4-ofp_packet_in.packet b/ryu/tests/packet_data/of10/1-4-ofp_packet_in.packet deleted file mode 100644 index 9321feb6..00000000 Binary files a/ryu/tests/packet_data/of10/1-4-ofp_packet_in.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/1-5-features_request.packet b/ryu/tests/packet_data/of10/1-5-features_request.packet deleted file mode 100644 index 2faaf406..00000000 Binary files a/ryu/tests/packet_data/of10/1-5-features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/1-6-ofp_switch_features.packet b/ryu/tests/packet_data/of10/1-6-ofp_switch_features.packet deleted file mode 100644 index 31f17df3..00000000 Binary files a/ryu/tests/packet_data/of10/1-6-ofp_switch_features.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet b/ryu/tests/packet_data/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet deleted file mode 100644 index 8093e84c..00000000 Binary files a/ryu/tests/packet_data/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet b/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet deleted file mode 100644 index f2f6c279..00000000 Binary files a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet b/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet deleted file mode 100644 index 38e0a2a2..00000000 Binary files a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_pop_mpls.packet b/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_pop_mpls.packet deleted file mode 100644 index 49c4a862..00000000 Binary files a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_pop_mpls.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_push_mpls.packet b/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_push_mpls.packet deleted file mode 100644 index fc478e1f..00000000 Binary files a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_push_mpls.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_label.packet b/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_label.packet deleted file mode 100644 index 4c529139..00000000 Binary files a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_label.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_tc.packet b/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_tc.packet deleted file mode 100644 index 0b6dc347..00000000 Binary files a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_tc.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet b/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet deleted file mode 100644 index 424f9a74..00000000 Binary files a/ryu/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-0-ofp_desc_stats_reply.packet b/ryu/tests/packet_data/of12/3-0-ofp_desc_stats_reply.packet deleted file mode 100644 index 17cfd664..00000000 Binary files a/ryu/tests/packet_data/of12/3-0-ofp_desc_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-1-ofp_packet_out.packet b/ryu/tests/packet_data/of12/3-1-ofp_packet_out.packet deleted file mode 100644 index a9ebe1ef..00000000 Binary files a/ryu/tests/packet_data/of12/3-1-ofp_packet_out.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-10-ofp_hello.packet b/ryu/tests/packet_data/of12/3-10-ofp_hello.packet deleted file mode 100644 index 8894b8ce..00000000 Binary files a/ryu/tests/packet_data/of12/3-10-ofp_hello.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-11-ofp_flow_stats_request.packet b/ryu/tests/packet_data/of12/3-11-ofp_flow_stats_request.packet deleted file mode 100644 index 4c825f93..00000000 Binary files a/ryu/tests/packet_data/of12/3-11-ofp_flow_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-12-ofp_flow_stats_reply.packet b/ryu/tests/packet_data/of12/3-12-ofp_flow_stats_reply.packet deleted file mode 100644 index 73f7221e..00000000 Binary files a/ryu/tests/packet_data/of12/3-12-ofp_flow_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-13-ofp_echo_request.packet b/ryu/tests/packet_data/of12/3-13-ofp_echo_request.packet deleted file mode 100644 index f67baba2..00000000 Binary files a/ryu/tests/packet_data/of12/3-13-ofp_echo_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-14-ofp_echo_reply.packet b/ryu/tests/packet_data/of12/3-14-ofp_echo_reply.packet deleted file mode 100644 index f227be12..00000000 Binary files a/ryu/tests/packet_data/of12/3-14-ofp_echo_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-15-ofp_error_msg.packet b/ryu/tests/packet_data/of12/3-15-ofp_error_msg.packet deleted file mode 100644 index 21111bd3..00000000 Binary files a/ryu/tests/packet_data/of12/3-15-ofp_error_msg.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-16-ofp_experimenter.packet b/ryu/tests/packet_data/of12/3-16-ofp_experimenter.packet deleted file mode 100644 index f9524ca5..00000000 Binary files a/ryu/tests/packet_data/of12/3-16-ofp_experimenter.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-17-ofp_barrier_request.packet b/ryu/tests/packet_data/of12/3-17-ofp_barrier_request.packet deleted file mode 100644 index 17a6f76a..00000000 Binary files a/ryu/tests/packet_data/of12/3-17-ofp_barrier_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-18-ofp_barrier_reply.packet b/ryu/tests/packet_data/of12/3-18-ofp_barrier_reply.packet deleted file mode 100644 index 8cd2f9e7..00000000 Binary files a/ryu/tests/packet_data/of12/3-18-ofp_barrier_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-19-ofp_role_request.packet b/ryu/tests/packet_data/of12/3-19-ofp_role_request.packet deleted file mode 100644 index db2f24f5..00000000 Binary files a/ryu/tests/packet_data/of12/3-19-ofp_role_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-2-ofp_flow_mod.packet b/ryu/tests/packet_data/of12/3-2-ofp_flow_mod.packet deleted file mode 100644 index f54ec6da..00000000 Binary files a/ryu/tests/packet_data/of12/3-2-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-20-ofp_role_reply.packet b/ryu/tests/packet_data/of12/3-20-ofp_role_reply.packet deleted file mode 100644 index 3e850878..00000000 Binary files a/ryu/tests/packet_data/of12/3-20-ofp_role_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-21-ofp_group_mod.packet b/ryu/tests/packet_data/of12/3-21-ofp_group_mod.packet deleted file mode 100644 index 0b45c318..00000000 Binary files a/ryu/tests/packet_data/of12/3-21-ofp_group_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-22-ofp_port_mod.packet b/ryu/tests/packet_data/of12/3-22-ofp_port_mod.packet deleted file mode 100644 index 7bbbb6a5..00000000 Binary files a/ryu/tests/packet_data/of12/3-22-ofp_port_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-23-ofp_table_mod.packet b/ryu/tests/packet_data/of12/3-23-ofp_table_mod.packet deleted file mode 100644 index b6d68a30..00000000 Binary files a/ryu/tests/packet_data/of12/3-23-ofp_table_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-24-ofp_desc_stats_request.packet b/ryu/tests/packet_data/of12/3-24-ofp_desc_stats_request.packet deleted file mode 100644 index c59f6366..00000000 Binary files a/ryu/tests/packet_data/of12/3-24-ofp_desc_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-25-ofp_aggregate_stats_request.packet b/ryu/tests/packet_data/of12/3-25-ofp_aggregate_stats_request.packet deleted file mode 100644 index 05416ffd..00000000 Binary files a/ryu/tests/packet_data/of12/3-25-ofp_aggregate_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-26-ofp_aggregate_stats_reply.packet b/ryu/tests/packet_data/of12/3-26-ofp_aggregate_stats_reply.packet deleted file mode 100644 index 43c89051..00000000 Binary files a/ryu/tests/packet_data/of12/3-26-ofp_aggregate_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-27-ofp_table_stats_request.packet b/ryu/tests/packet_data/of12/3-27-ofp_table_stats_request.packet deleted file mode 100644 index 0d426129..00000000 Binary files a/ryu/tests/packet_data/of12/3-27-ofp_table_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-28-ofp_table_stats_reply.packet b/ryu/tests/packet_data/of12/3-28-ofp_table_stats_reply.packet deleted file mode 100644 index 60e76442..00000000 Binary files a/ryu/tests/packet_data/of12/3-28-ofp_table_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-29-ofp_port_stats_request.packet b/ryu/tests/packet_data/of12/3-29-ofp_port_stats_request.packet deleted file mode 100644 index cebaac69..00000000 Binary files a/ryu/tests/packet_data/of12/3-29-ofp_port_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-3-ofp_flow_mod.packet b/ryu/tests/packet_data/of12/3-3-ofp_flow_mod.packet deleted file mode 100644 index a3541cc4..00000000 Binary files a/ryu/tests/packet_data/of12/3-3-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-30-ofp_port_stats_reply.packet b/ryu/tests/packet_data/of12/3-30-ofp_port_stats_reply.packet deleted file mode 100644 index 77d9369f..00000000 Binary files a/ryu/tests/packet_data/of12/3-30-ofp_port_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-31-ofp_group_features_stats_request.packet b/ryu/tests/packet_data/of12/3-31-ofp_group_features_stats_request.packet deleted file mode 100644 index 9d11b936..00000000 Binary files a/ryu/tests/packet_data/of12/3-31-ofp_group_features_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-32-ofp_group_features_stats_reply.packet b/ryu/tests/packet_data/of12/3-32-ofp_group_features_stats_reply.packet deleted file mode 100644 index d1f41595..00000000 Binary files a/ryu/tests/packet_data/of12/3-32-ofp_group_features_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-33-ofp_group_desc_stats_request.packet b/ryu/tests/packet_data/of12/3-33-ofp_group_desc_stats_request.packet deleted file mode 100644 index 1eef2113..00000000 Binary files a/ryu/tests/packet_data/of12/3-33-ofp_group_desc_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-34-ofp_group_desc_stats_reply.packet b/ryu/tests/packet_data/of12/3-34-ofp_group_desc_stats_reply.packet deleted file mode 100644 index e17a933a..00000000 Binary files a/ryu/tests/packet_data/of12/3-34-ofp_group_desc_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-35-ofp_queue_get_config_request.packet b/ryu/tests/packet_data/of12/3-35-ofp_queue_get_config_request.packet deleted file mode 100644 index 66e380d6..00000000 Binary files a/ryu/tests/packet_data/of12/3-35-ofp_queue_get_config_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-36-ofp_queue_get_config_reply.packet b/ryu/tests/packet_data/of12/3-36-ofp_queue_get_config_reply.packet deleted file mode 100644 index 757308ee..00000000 Binary files a/ryu/tests/packet_data/of12/3-36-ofp_queue_get_config_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-37-ofp_queue_stats_request.packet b/ryu/tests/packet_data/of12/3-37-ofp_queue_stats_request.packet deleted file mode 100644 index 0d274478..00000000 Binary files a/ryu/tests/packet_data/of12/3-37-ofp_queue_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-38-ofp_queue_stats_reply.packet b/ryu/tests/packet_data/of12/3-38-ofp_queue_stats_reply.packet deleted file mode 100644 index 72a8af36..00000000 Binary files a/ryu/tests/packet_data/of12/3-38-ofp_queue_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-39-ofp_port_status.packet b/ryu/tests/packet_data/of12/3-39-ofp_port_status.packet deleted file mode 100644 index 7e3689ac..00000000 Binary files a/ryu/tests/packet_data/of12/3-39-ofp_port_status.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-4-ofp_packet_in.packet b/ryu/tests/packet_data/of12/3-4-ofp_packet_in.packet deleted file mode 100644 index 295e4d45..00000000 Binary files a/ryu/tests/packet_data/of12/3-4-ofp_packet_in.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-40-ofp_flow_removed.packet b/ryu/tests/packet_data/of12/3-40-ofp_flow_removed.packet deleted file mode 100644 index 330e429b..00000000 Binary files a/ryu/tests/packet_data/of12/3-40-ofp_flow_removed.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-41-ofp_error_msg_experimenter.packet b/ryu/tests/packet_data/of12/3-41-ofp_error_msg_experimenter.packet deleted file mode 100644 index 4b7c9bf4..00000000 Binary files a/ryu/tests/packet_data/of12/3-41-ofp_error_msg_experimenter.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-5-ofp_features_request.packet b/ryu/tests/packet_data/of12/3-5-ofp_features_request.packet deleted file mode 100644 index 6a81e9b5..00000000 Binary files a/ryu/tests/packet_data/of12/3-5-ofp_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-59-ofp_packet_in.packet b/ryu/tests/packet_data/of12/3-59-ofp_packet_in.packet deleted file mode 100644 index e4a92b2a..00000000 Binary files a/ryu/tests/packet_data/of12/3-59-ofp_packet_in.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-6-ofp_features_reply.packet b/ryu/tests/packet_data/of12/3-6-ofp_features_reply.packet deleted file mode 100644 index 9e6128dc..00000000 Binary files a/ryu/tests/packet_data/of12/3-6-ofp_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-60-ofp_flow_mod.packet b/ryu/tests/packet_data/of12/3-60-ofp_flow_mod.packet deleted file mode 100644 index 13566ebe..00000000 Binary files a/ryu/tests/packet_data/of12/3-60-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-61-ofp_group_stats_request.packet b/ryu/tests/packet_data/of12/3-61-ofp_group_stats_request.packet deleted file mode 100644 index 523f4f13..00000000 Binary files a/ryu/tests/packet_data/of12/3-61-ofp_group_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-62-ofp_group_stats_reply.packet b/ryu/tests/packet_data/of12/3-62-ofp_group_stats_reply.packet deleted file mode 100644 index 33a5c52c..00000000 Binary files a/ryu/tests/packet_data/of12/3-62-ofp_group_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-7-ofp_set_config.packet b/ryu/tests/packet_data/of12/3-7-ofp_set_config.packet deleted file mode 100644 index 77e2d785..00000000 Binary files a/ryu/tests/packet_data/of12/3-7-ofp_set_config.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-8-ofp_get_config_request.packet b/ryu/tests/packet_data/of12/3-8-ofp_get_config_request.packet deleted file mode 100644 index ba897a54..00000000 Binary files a/ryu/tests/packet_data/of12/3-8-ofp_get_config_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/3-9-ofp_get_config_reply.packet b/ryu/tests/packet_data/of12/3-9-ofp_get_config_reply.packet deleted file mode 100644 index ebaf895b..00000000 Binary files a/ryu/tests/packet_data/of12/3-9-ofp_get_config_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet b/ryu/tests/packet_data/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet deleted file mode 100644 index a9ebe1ef..00000000 Binary files a/ryu/tests/packet_data/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-0-ofp_desc_reply.packet b/ryu/tests/packet_data/of13/4-0-ofp_desc_reply.packet deleted file mode 100644 index edfaa375..00000000 Binary files a/ryu/tests/packet_data/of13/4-0-ofp_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-1-ofp_packet_out.packet b/ryu/tests/packet_data/of13/4-1-ofp_packet_out.packet deleted file mode 100644 index cf6689f8..00000000 Binary files a/ryu/tests/packet_data/of13/4-1-ofp_packet_out.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-10-ofp_hello.packet b/ryu/tests/packet_data/of13/4-10-ofp_hello.packet deleted file mode 100644 index 644b4130..00000000 Binary files a/ryu/tests/packet_data/of13/4-10-ofp_hello.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-11-ofp_flow_stats_request.packet b/ryu/tests/packet_data/of13/4-11-ofp_flow_stats_request.packet deleted file mode 100644 index 6b9e0a90..00000000 Binary files a/ryu/tests/packet_data/of13/4-11-ofp_flow_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-12-ofp_flow_stats_reply.packet b/ryu/tests/packet_data/of13/4-12-ofp_flow_stats_reply.packet deleted file mode 100644 index c7c1ac88..00000000 Binary files a/ryu/tests/packet_data/of13/4-12-ofp_flow_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-13-ofp_echo_request.packet b/ryu/tests/packet_data/of13/4-13-ofp_echo_request.packet deleted file mode 100644 index d8d8bc42..00000000 Binary files a/ryu/tests/packet_data/of13/4-13-ofp_echo_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-14-ofp_echo_reply.packet b/ryu/tests/packet_data/of13/4-14-ofp_echo_reply.packet deleted file mode 100644 index 2ac9c0d5..00000000 Binary files a/ryu/tests/packet_data/of13/4-14-ofp_echo_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-15-ofp_error_msg.packet b/ryu/tests/packet_data/of13/4-15-ofp_error_msg.packet deleted file mode 100644 index 196dad1e..00000000 Binary files a/ryu/tests/packet_data/of13/4-15-ofp_error_msg.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-16-ofp_experimenter.packet b/ryu/tests/packet_data/of13/4-16-ofp_experimenter.packet deleted file mode 100644 index 0b6e2dd2..00000000 Binary files a/ryu/tests/packet_data/of13/4-16-ofp_experimenter.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-17-ofp_barrier_request.packet b/ryu/tests/packet_data/of13/4-17-ofp_barrier_request.packet deleted file mode 100644 index 4acb2096..00000000 Binary files a/ryu/tests/packet_data/of13/4-17-ofp_barrier_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-18-ofp_barrier_reply.packet b/ryu/tests/packet_data/of13/4-18-ofp_barrier_reply.packet deleted file mode 100644 index 04376c07..00000000 Binary files a/ryu/tests/packet_data/of13/4-18-ofp_barrier_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-19-ofp_role_request.packet b/ryu/tests/packet_data/of13/4-19-ofp_role_request.packet deleted file mode 100644 index e2f3b381..00000000 Binary files a/ryu/tests/packet_data/of13/4-19-ofp_role_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-2-ofp_flow_mod.packet b/ryu/tests/packet_data/of13/4-2-ofp_flow_mod.packet deleted file mode 100644 index 0c2029bd..00000000 Binary files a/ryu/tests/packet_data/of13/4-2-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-20-ofp_role_reply.packet b/ryu/tests/packet_data/of13/4-20-ofp_role_reply.packet deleted file mode 100644 index 3f5ba399..00000000 Binary files a/ryu/tests/packet_data/of13/4-20-ofp_role_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-21-ofp_group_mod.packet b/ryu/tests/packet_data/of13/4-21-ofp_group_mod.packet deleted file mode 100644 index 39554777..00000000 Binary files a/ryu/tests/packet_data/of13/4-21-ofp_group_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-22-ofp_port_mod.packet b/ryu/tests/packet_data/of13/4-22-ofp_port_mod.packet deleted file mode 100644 index be7044e1..00000000 Binary files a/ryu/tests/packet_data/of13/4-22-ofp_port_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-23-ofp_table_mod.packet b/ryu/tests/packet_data/of13/4-23-ofp_table_mod.packet deleted file mode 100644 index 02b8b020..00000000 Binary files a/ryu/tests/packet_data/of13/4-23-ofp_table_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-24-ofp_desc_request.packet b/ryu/tests/packet_data/of13/4-24-ofp_desc_request.packet deleted file mode 100644 index b6de0577..00000000 Binary files a/ryu/tests/packet_data/of13/4-24-ofp_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-25-ofp_aggregate_stats_request.packet b/ryu/tests/packet_data/of13/4-25-ofp_aggregate_stats_request.packet deleted file mode 100644 index 645ddacf..00000000 Binary files a/ryu/tests/packet_data/of13/4-25-ofp_aggregate_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-26-ofp_aggregate_stats_reply.packet b/ryu/tests/packet_data/of13/4-26-ofp_aggregate_stats_reply.packet deleted file mode 100644 index 3d5cd801..00000000 Binary files a/ryu/tests/packet_data/of13/4-26-ofp_aggregate_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-27-ofp_table_stats_request.packet b/ryu/tests/packet_data/of13/4-27-ofp_table_stats_request.packet deleted file mode 100644 index 6fec06a4..00000000 Binary files a/ryu/tests/packet_data/of13/4-27-ofp_table_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-28-ofp_table_stats_reply.packet b/ryu/tests/packet_data/of13/4-28-ofp_table_stats_reply.packet deleted file mode 100644 index 1da72ab0..00000000 Binary files a/ryu/tests/packet_data/of13/4-28-ofp_table_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-29-ofp_port_stats_request.packet b/ryu/tests/packet_data/of13/4-29-ofp_port_stats_request.packet deleted file mode 100644 index d1116401..00000000 Binary files a/ryu/tests/packet_data/of13/4-29-ofp_port_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-3-ofp_flow_mod.packet b/ryu/tests/packet_data/of13/4-3-ofp_flow_mod.packet deleted file mode 100644 index 8952a5be..00000000 Binary files a/ryu/tests/packet_data/of13/4-3-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-30-ofp_port_stats_reply.packet b/ryu/tests/packet_data/of13/4-30-ofp_port_stats_reply.packet deleted file mode 100644 index 8b8c182c..00000000 Binary files a/ryu/tests/packet_data/of13/4-30-ofp_port_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-31-ofp_group_features_request.packet b/ryu/tests/packet_data/of13/4-31-ofp_group_features_request.packet deleted file mode 100644 index 2175bb52..00000000 Binary files a/ryu/tests/packet_data/of13/4-31-ofp_group_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-32-ofp_group_features_reply.packet b/ryu/tests/packet_data/of13/4-32-ofp_group_features_reply.packet deleted file mode 100644 index 6f7715cd..00000000 Binary files a/ryu/tests/packet_data/of13/4-32-ofp_group_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-33-ofp_group_desc_request.packet b/ryu/tests/packet_data/of13/4-33-ofp_group_desc_request.packet deleted file mode 100644 index 35add41d..00000000 Binary files a/ryu/tests/packet_data/of13/4-33-ofp_group_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-34-ofp_group_desc_reply.packet b/ryu/tests/packet_data/of13/4-34-ofp_group_desc_reply.packet deleted file mode 100644 index f3796cc1..00000000 Binary files a/ryu/tests/packet_data/of13/4-34-ofp_group_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-35-ofp_queue_get_config_request.packet b/ryu/tests/packet_data/of13/4-35-ofp_queue_get_config_request.packet deleted file mode 100644 index 13072c85..00000000 Binary files a/ryu/tests/packet_data/of13/4-35-ofp_queue_get_config_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-36-ofp_queue_get_config_reply.packet b/ryu/tests/packet_data/of13/4-36-ofp_queue_get_config_reply.packet deleted file mode 100644 index 898f0b3f..00000000 Binary files a/ryu/tests/packet_data/of13/4-36-ofp_queue_get_config_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-37-ofp_queue_stats_request.packet b/ryu/tests/packet_data/of13/4-37-ofp_queue_stats_request.packet deleted file mode 100644 index 4baf6d70..00000000 Binary files a/ryu/tests/packet_data/of13/4-37-ofp_queue_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-38-ofp_queue_stats_reply.packet b/ryu/tests/packet_data/of13/4-38-ofp_queue_stats_reply.packet deleted file mode 100644 index ad6d1971..00000000 Binary files a/ryu/tests/packet_data/of13/4-38-ofp_queue_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-39-ofp_port_status.packet b/ryu/tests/packet_data/of13/4-39-ofp_port_status.packet deleted file mode 100644 index 63280c7d..00000000 Binary files a/ryu/tests/packet_data/of13/4-39-ofp_port_status.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-4-ofp_packet_in.packet b/ryu/tests/packet_data/of13/4-4-ofp_packet_in.packet deleted file mode 100644 index ebd12b51..00000000 Binary files a/ryu/tests/packet_data/of13/4-4-ofp_packet_in.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-40-ofp_flow_removed.packet b/ryu/tests/packet_data/of13/4-40-ofp_flow_removed.packet deleted file mode 100644 index 677c2c4a..00000000 Binary files a/ryu/tests/packet_data/of13/4-40-ofp_flow_removed.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-41-ofp_error_msg_experimenter.packet b/ryu/tests/packet_data/of13/4-41-ofp_error_msg_experimenter.packet deleted file mode 100644 index 6d866b9a..00000000 Binary files a/ryu/tests/packet_data/of13/4-41-ofp_error_msg_experimenter.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-42-ofp_get_async_request.packet b/ryu/tests/packet_data/of13/4-42-ofp_get_async_request.packet deleted file mode 100644 index 4bffb26f..00000000 Binary files a/ryu/tests/packet_data/of13/4-42-ofp_get_async_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-43-ofp_get_async_reply.packet b/ryu/tests/packet_data/of13/4-43-ofp_get_async_reply.packet deleted file mode 100644 index 39897a94..00000000 Binary files a/ryu/tests/packet_data/of13/4-43-ofp_get_async_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-44-ofp_set_async.packet b/ryu/tests/packet_data/of13/4-44-ofp_set_async.packet deleted file mode 100644 index de0aa1a4..00000000 Binary files a/ryu/tests/packet_data/of13/4-44-ofp_set_async.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-45-ofp_meter_mod.packet b/ryu/tests/packet_data/of13/4-45-ofp_meter_mod.packet deleted file mode 100644 index 1ffbcf7e..00000000 Binary files a/ryu/tests/packet_data/of13/4-45-ofp_meter_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-46-ofp_flow_mod.packet b/ryu/tests/packet_data/of13/4-46-ofp_flow_mod.packet deleted file mode 100644 index 496f1da0..00000000 Binary files a/ryu/tests/packet_data/of13/4-46-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-47-ofp_meter_config_request.packet b/ryu/tests/packet_data/of13/4-47-ofp_meter_config_request.packet deleted file mode 100644 index 21a11e10..00000000 Binary files a/ryu/tests/packet_data/of13/4-47-ofp_meter_config_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-48-ofp_meter_config_reply.packet b/ryu/tests/packet_data/of13/4-48-ofp_meter_config_reply.packet deleted file mode 100644 index 3f443269..00000000 Binary files a/ryu/tests/packet_data/of13/4-48-ofp_meter_config_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-49-ofp_meter_stats_request.packet b/ryu/tests/packet_data/of13/4-49-ofp_meter_stats_request.packet deleted file mode 100644 index 3b321aff..00000000 Binary files a/ryu/tests/packet_data/of13/4-49-ofp_meter_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-5-ofp_features_request.packet b/ryu/tests/packet_data/of13/4-5-ofp_features_request.packet deleted file mode 100644 index 7bb2775a..00000000 Binary files a/ryu/tests/packet_data/of13/4-5-ofp_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-50-ofp_meter_stats_reply.packet b/ryu/tests/packet_data/of13/4-50-ofp_meter_stats_reply.packet deleted file mode 100644 index 2317fc55..00000000 Binary files a/ryu/tests/packet_data/of13/4-50-ofp_meter_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-51-ofp_meter_features_request.packet b/ryu/tests/packet_data/of13/4-51-ofp_meter_features_request.packet deleted file mode 100644 index c4007bfb..00000000 Binary files a/ryu/tests/packet_data/of13/4-51-ofp_meter_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-52-ofp_meter_features_reply.packet b/ryu/tests/packet_data/of13/4-52-ofp_meter_features_reply.packet deleted file mode 100644 index fd9e3808..00000000 Binary files a/ryu/tests/packet_data/of13/4-52-ofp_meter_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-53-ofp_port_desc_request.packet b/ryu/tests/packet_data/of13/4-53-ofp_port_desc_request.packet deleted file mode 100644 index 0d859f1d..00000000 Binary files a/ryu/tests/packet_data/of13/4-53-ofp_port_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-54-ofp_port_desc_reply.packet b/ryu/tests/packet_data/of13/4-54-ofp_port_desc_reply.packet deleted file mode 100644 index e30e9ae1..00000000 Binary files a/ryu/tests/packet_data/of13/4-54-ofp_port_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-55-ofp_table_features_request.packet b/ryu/tests/packet_data/of13/4-55-ofp_table_features_request.packet deleted file mode 100644 index 52b9d3b1..00000000 Binary files a/ryu/tests/packet_data/of13/4-55-ofp_table_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-56-ofp_table_features_reply.packet b/ryu/tests/packet_data/of13/4-56-ofp_table_features_reply.packet deleted file mode 100644 index 3a467f42..00000000 Binary files a/ryu/tests/packet_data/of13/4-56-ofp_table_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-57-ofp_group_stats_request.packet b/ryu/tests/packet_data/of13/4-57-ofp_group_stats_request.packet deleted file mode 100644 index f59329e0..00000000 Binary files a/ryu/tests/packet_data/of13/4-57-ofp_group_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-58-ofp_group_stats_reply.packet b/ryu/tests/packet_data/of13/4-58-ofp_group_stats_reply.packet deleted file mode 100644 index fe5a549a..00000000 Binary files a/ryu/tests/packet_data/of13/4-58-ofp_group_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-59-ofp_packet_in.packet b/ryu/tests/packet_data/of13/4-59-ofp_packet_in.packet deleted file mode 100644 index f0879a37..00000000 Binary files a/ryu/tests/packet_data/of13/4-59-ofp_packet_in.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-6-ofp_features_reply.packet b/ryu/tests/packet_data/of13/4-6-ofp_features_reply.packet deleted file mode 100644 index a9536330..00000000 Binary files a/ryu/tests/packet_data/of13/4-6-ofp_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-60-ofp_flow_mod.packet b/ryu/tests/packet_data/of13/4-60-ofp_flow_mod.packet deleted file mode 100644 index 0ca98351..00000000 Binary files a/ryu/tests/packet_data/of13/4-60-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-61-ofp_experimenter_request.packet b/ryu/tests/packet_data/of13/4-61-ofp_experimenter_request.packet deleted file mode 100644 index 2ee17648..00000000 Binary files a/ryu/tests/packet_data/of13/4-61-ofp_experimenter_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-62-ofp_experimenter_reply.packet b/ryu/tests/packet_data/of13/4-62-ofp_experimenter_reply.packet deleted file mode 100644 index 1f826829..00000000 Binary files a/ryu/tests/packet_data/of13/4-62-ofp_experimenter_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-63-onf_flow_monitor_request.packet b/ryu/tests/packet_data/of13/4-63-onf_flow_monitor_request.packet deleted file mode 100644 index bf6d50e1..00000000 Binary files a/ryu/tests/packet_data/of13/4-63-onf_flow_monitor_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-7-ofp_set_config.packet b/ryu/tests/packet_data/of13/4-7-ofp_set_config.packet deleted file mode 100644 index 43602b3e..00000000 Binary files a/ryu/tests/packet_data/of13/4-7-ofp_set_config.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-8-ofp_get_config_request.packet b/ryu/tests/packet_data/of13/4-8-ofp_get_config_request.packet deleted file mode 100644 index 78ad5019..00000000 Binary files a/ryu/tests/packet_data/of13/4-8-ofp_get_config_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/4-9-ofp_get_config_reply.packet b/ryu/tests/packet_data/of13/4-9-ofp_get_config_reply.packet deleted file mode 100644 index b23f7bf3..00000000 Binary files a/ryu/tests/packet_data/of13/4-9-ofp_get_config_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-echo_reply.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-echo_reply.packet deleted file mode 100644 index e54d3802..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-echo_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-echo_request.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-echo_request.packet deleted file mode 100644 index a13c95dd..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-echo_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-error_msg.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-error_msg.packet deleted file mode 100644 index 33b43ca1..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-error_msg.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-features_reply.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-features_reply.packet deleted file mode 100644 index 1e5dee82..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod.packet deleted file mode 100644 index 8c86982f..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod.truncated64 b/ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod.truncated64 deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod_conjunction.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod_conjunction.packet deleted file mode 100644 index e7e0154b..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod_conjunction.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod_match_conj.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod_match_conj.packet deleted file mode 100644 index c377092d..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-flow_mod_match_conj.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-flow_removed.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-flow_removed.packet deleted file mode 100644 index c98a8f2b..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-flow_removed.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-get_config_reply.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-get_config_reply.packet deleted file mode 100644 index b23f7bf3..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-get_config_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-hello.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-hello.packet deleted file mode 100644 index 60b3118a..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-hello.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-meter_mod.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-meter_mod.packet deleted file mode 100644 index 60870dda..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-meter_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet deleted file mode 100644 index cf6689f8..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-packet_in.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-packet_in.packet deleted file mode 100644 index 817b51c0..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-packet_in.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-port_mod.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-port_mod.packet deleted file mode 100644 index 105a27ee..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-port_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-port_status.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-port_status.packet deleted file mode 100644 index 7a2c14c4..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-port_status.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-set_config.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-set_config.packet deleted file mode 100644 index 43602b3e..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-set_config.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/libofproto-OFP13-table_mod.packet b/ryu/tests/packet_data/of13/libofproto-OFP13-table_mod.packet deleted file mode 100644 index 02b8b020..00000000 Binary files a/ryu/tests/packet_data/of13/libofproto-OFP13-table_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_conjunction.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_conjunction.packet deleted file mode 100644 index ba029b2c..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_conjunction.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_controller.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_controller.packet deleted file mode 100644 index 8fba9040..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_controller.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_controller2.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_controller2.packet deleted file mode 100644 index 7e6b046f..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_controller2.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct.packet deleted file mode 100644 index 5eb733f9..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_exec.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_exec.packet deleted file mode 100644 index 3f0b3431..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_exec.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat.packet deleted file mode 100644 index e210a38c..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat_v6.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat_v6.packet deleted file mode 100644 index 94b2aaa9..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat_v6.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet deleted file mode 100644 index c4308ccb..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_fintimeout.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_fintimeout.packet deleted file mode 100644 index 78c3eab4..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_fintimeout.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_learn.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_learn.packet deleted file mode 100644 index 39c71e20..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_learn.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_note.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_note.packet deleted file mode 100644 index 9a1491c9..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_note.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_output_trunc.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_output_trunc.packet deleted file mode 100644 index 491cf4c3..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_output_trunc.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_resubmit.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_resubmit.packet deleted file mode 100644 index 690b978b..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_resubmit.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_sample.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_sample.packet deleted file mode 100644 index c5167ba2..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_sample.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_sample2.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_sample2.packet deleted file mode 100644 index 444f094b..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_sample2.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_stack_pop.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_stack_pop.packet deleted file mode 100644 index d6f99e2c..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_stack_pop.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_stack_push.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_stack_push.packet deleted file mode 100644 index e5d38a32..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-action_stack_push.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_conj.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_conj.packet deleted file mode 100644 index 1f9c57cd..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_conj.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_load_nx_register.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_load_nx_register.packet deleted file mode 100644 index 03ce7374..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_load_nx_register.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_move_nx_register.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_move_nx_register.packet deleted file mode 100644 index eb9cf8a6..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_move_nx_register.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark.packet deleted file mode 100644 index 46ea0dc9..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet b/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet deleted file mode 100644 index 26db6b92..00000000 Binary files a/ryu/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-0-ofp_desc_reply.packet b/ryu/tests/packet_data/of14/5-0-ofp_desc_reply.packet deleted file mode 100644 index 8d676ce4..00000000 Binary files a/ryu/tests/packet_data/of14/5-0-ofp_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-1-ofp_packet_out.packet b/ryu/tests/packet_data/of14/5-1-ofp_packet_out.packet deleted file mode 100644 index 207712f1..00000000 Binary files a/ryu/tests/packet_data/of14/5-1-ofp_packet_out.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-10-ofp_hello.packet b/ryu/tests/packet_data/of14/5-10-ofp_hello.packet deleted file mode 100644 index a91b5871..00000000 Binary files a/ryu/tests/packet_data/of14/5-10-ofp_hello.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-11-ofp_flow_stats_request.packet b/ryu/tests/packet_data/of14/5-11-ofp_flow_stats_request.packet deleted file mode 100644 index f3ddcb7e..00000000 Binary files a/ryu/tests/packet_data/of14/5-11-ofp_flow_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-12-ofp_flow_stats_reply.packet b/ryu/tests/packet_data/of14/5-12-ofp_flow_stats_reply.packet deleted file mode 100644 index aa6462c5..00000000 Binary files a/ryu/tests/packet_data/of14/5-12-ofp_flow_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-13-ofp_echo_request.packet b/ryu/tests/packet_data/of14/5-13-ofp_echo_request.packet deleted file mode 100644 index b3f04d75..00000000 Binary files a/ryu/tests/packet_data/of14/5-13-ofp_echo_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-14-ofp_echo_reply.packet b/ryu/tests/packet_data/of14/5-14-ofp_echo_reply.packet deleted file mode 100644 index 74dcf540..00000000 Binary files a/ryu/tests/packet_data/of14/5-14-ofp_echo_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-15-ofp_error_msg.packet b/ryu/tests/packet_data/of14/5-15-ofp_error_msg.packet deleted file mode 100644 index a7888dbd..00000000 Binary files a/ryu/tests/packet_data/of14/5-15-ofp_error_msg.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-16-ofp_experimenter.packet b/ryu/tests/packet_data/of14/5-16-ofp_experimenter.packet deleted file mode 100644 index 3ccc04a9..00000000 Binary files a/ryu/tests/packet_data/of14/5-16-ofp_experimenter.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-17-ofp_barrier_request.packet b/ryu/tests/packet_data/of14/5-17-ofp_barrier_request.packet deleted file mode 100644 index 7cbd74b9..00000000 Binary files a/ryu/tests/packet_data/of14/5-17-ofp_barrier_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-18-ofp_barrier_reply.packet b/ryu/tests/packet_data/of14/5-18-ofp_barrier_reply.packet deleted file mode 100644 index 16d7a23a..00000000 Binary files a/ryu/tests/packet_data/of14/5-18-ofp_barrier_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-19-ofp_role_request.packet b/ryu/tests/packet_data/of14/5-19-ofp_role_request.packet deleted file mode 100644 index b6d780be..00000000 Binary files a/ryu/tests/packet_data/of14/5-19-ofp_role_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-2-ofp_flow_mod.packet b/ryu/tests/packet_data/of14/5-2-ofp_flow_mod.packet deleted file mode 100644 index f07e8e53..00000000 Binary files a/ryu/tests/packet_data/of14/5-2-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-20-ofp_role_reply.packet b/ryu/tests/packet_data/of14/5-20-ofp_role_reply.packet deleted file mode 100644 index 3c7f5f74..00000000 Binary files a/ryu/tests/packet_data/of14/5-20-ofp_role_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-21-ofp_group_mod.packet b/ryu/tests/packet_data/of14/5-21-ofp_group_mod.packet deleted file mode 100644 index 63f6efbb..00000000 Binary files a/ryu/tests/packet_data/of14/5-21-ofp_group_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-22-ofp_port_mod.packet b/ryu/tests/packet_data/of14/5-22-ofp_port_mod.packet deleted file mode 100644 index 2f733044..00000000 Binary files a/ryu/tests/packet_data/of14/5-22-ofp_port_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-23-ofp_table_mod.packet b/ryu/tests/packet_data/of14/5-23-ofp_table_mod.packet deleted file mode 100644 index 8df2590c..00000000 Binary files a/ryu/tests/packet_data/of14/5-23-ofp_table_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-24-ofp_desc_request.packet b/ryu/tests/packet_data/of14/5-24-ofp_desc_request.packet deleted file mode 100644 index b6440fba..00000000 Binary files a/ryu/tests/packet_data/of14/5-24-ofp_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-25-ofp_aggregate_stats_request.packet b/ryu/tests/packet_data/of14/5-25-ofp_aggregate_stats_request.packet deleted file mode 100644 index 1adfc206..00000000 Binary files a/ryu/tests/packet_data/of14/5-25-ofp_aggregate_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-26-ofp_aggregate_stats_reply.packet b/ryu/tests/packet_data/of14/5-26-ofp_aggregate_stats_reply.packet deleted file mode 100644 index 6e1dcff5..00000000 Binary files a/ryu/tests/packet_data/of14/5-26-ofp_aggregate_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-27-ofp_table_stats_request.packet b/ryu/tests/packet_data/of14/5-27-ofp_table_stats_request.packet deleted file mode 100644 index 909fd9e9..00000000 Binary files a/ryu/tests/packet_data/of14/5-27-ofp_table_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-28-ofp_table_stats_reply.packet b/ryu/tests/packet_data/of14/5-28-ofp_table_stats_reply.packet deleted file mode 100644 index 66234198..00000000 Binary files a/ryu/tests/packet_data/of14/5-28-ofp_table_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-29-ofp_port_stats_request.packet b/ryu/tests/packet_data/of14/5-29-ofp_port_stats_request.packet deleted file mode 100644 index 86c828f3..00000000 Binary files a/ryu/tests/packet_data/of14/5-29-ofp_port_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-3-ofp_flow_mod.packet b/ryu/tests/packet_data/of14/5-3-ofp_flow_mod.packet deleted file mode 100644 index 130f8d14..00000000 Binary files a/ryu/tests/packet_data/of14/5-3-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-30-ofp_port_stats_reply.packet b/ryu/tests/packet_data/of14/5-30-ofp_port_stats_reply.packet deleted file mode 100644 index 0fd4fea9..00000000 Binary files a/ryu/tests/packet_data/of14/5-30-ofp_port_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-31-ofp_group_features_request.packet b/ryu/tests/packet_data/of14/5-31-ofp_group_features_request.packet deleted file mode 100644 index 8bd123d0..00000000 Binary files a/ryu/tests/packet_data/of14/5-31-ofp_group_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-32-ofp_group_features_reply.packet b/ryu/tests/packet_data/of14/5-32-ofp_group_features_reply.packet deleted file mode 100644 index 909b7fa4..00000000 Binary files a/ryu/tests/packet_data/of14/5-32-ofp_group_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-33-ofp_group_desc_request.packet b/ryu/tests/packet_data/of14/5-33-ofp_group_desc_request.packet deleted file mode 100644 index 2a86948f..00000000 Binary files a/ryu/tests/packet_data/of14/5-33-ofp_group_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-34-ofp_group_desc_reply.packet b/ryu/tests/packet_data/of14/5-34-ofp_group_desc_reply.packet deleted file mode 100644 index 9b00061a..00000000 Binary files a/ryu/tests/packet_data/of14/5-34-ofp_group_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-35-ofp_queue_stats_request.packet b/ryu/tests/packet_data/of14/5-35-ofp_queue_stats_request.packet deleted file mode 100644 index 7c52c9b4..00000000 Binary files a/ryu/tests/packet_data/of14/5-35-ofp_queue_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-36-ofp_queue_stats_reply.packet b/ryu/tests/packet_data/of14/5-36-ofp_queue_stats_reply.packet deleted file mode 100644 index c0a5dd8c..00000000 Binary files a/ryu/tests/packet_data/of14/5-36-ofp_queue_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-37-ofp_port_status.packet b/ryu/tests/packet_data/of14/5-37-ofp_port_status.packet deleted file mode 100644 index e8c67823..00000000 Binary files a/ryu/tests/packet_data/of14/5-37-ofp_port_status.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-38-ofp_flow_removed.packet b/ryu/tests/packet_data/of14/5-38-ofp_flow_removed.packet deleted file mode 100644 index b8e35600..00000000 Binary files a/ryu/tests/packet_data/of14/5-38-ofp_flow_removed.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-39-ofp_error_msg_experimenter.packet b/ryu/tests/packet_data/of14/5-39-ofp_error_msg_experimenter.packet deleted file mode 100644 index fed58222..00000000 Binary files a/ryu/tests/packet_data/of14/5-39-ofp_error_msg_experimenter.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-4-ofp_packet_in.packet b/ryu/tests/packet_data/of14/5-4-ofp_packet_in.packet deleted file mode 100644 index 35a91000..00000000 Binary files a/ryu/tests/packet_data/of14/5-4-ofp_packet_in.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-40-ofp_get_async_request.packet b/ryu/tests/packet_data/of14/5-40-ofp_get_async_request.packet deleted file mode 100644 index b6e2c616..00000000 Binary files a/ryu/tests/packet_data/of14/5-40-ofp_get_async_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-41-ofp_get_async_reply.packet b/ryu/tests/packet_data/of14/5-41-ofp_get_async_reply.packet deleted file mode 100644 index 01ad90f6..00000000 Binary files a/ryu/tests/packet_data/of14/5-41-ofp_get_async_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-42-ofp_set_async.packet b/ryu/tests/packet_data/of14/5-42-ofp_set_async.packet deleted file mode 100644 index 0b3facf7..00000000 Binary files a/ryu/tests/packet_data/of14/5-42-ofp_set_async.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-43-ofp_meter_mod.packet b/ryu/tests/packet_data/of14/5-43-ofp_meter_mod.packet deleted file mode 100644 index 1e488764..00000000 Binary files a/ryu/tests/packet_data/of14/5-43-ofp_meter_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-44-ofp_flow_mod.packet b/ryu/tests/packet_data/of14/5-44-ofp_flow_mod.packet deleted file mode 100644 index 6f66406d..00000000 Binary files a/ryu/tests/packet_data/of14/5-44-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-45-ofp_meter_config_request.packet b/ryu/tests/packet_data/of14/5-45-ofp_meter_config_request.packet deleted file mode 100644 index af96b87e..00000000 Binary files a/ryu/tests/packet_data/of14/5-45-ofp_meter_config_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-46-ofp_meter_config_reply.packet b/ryu/tests/packet_data/of14/5-46-ofp_meter_config_reply.packet deleted file mode 100644 index 9611e8c4..00000000 Binary files a/ryu/tests/packet_data/of14/5-46-ofp_meter_config_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-47-ofp_meter_stats_request.packet b/ryu/tests/packet_data/of14/5-47-ofp_meter_stats_request.packet deleted file mode 100644 index 68145074..00000000 Binary files a/ryu/tests/packet_data/of14/5-47-ofp_meter_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-48-ofp_meter_stats_reply.packet b/ryu/tests/packet_data/of14/5-48-ofp_meter_stats_reply.packet deleted file mode 100644 index b20f1784..00000000 Binary files a/ryu/tests/packet_data/of14/5-48-ofp_meter_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-49-ofp_meter_features_request.packet b/ryu/tests/packet_data/of14/5-49-ofp_meter_features_request.packet deleted file mode 100644 index 72b79cf1..00000000 Binary files a/ryu/tests/packet_data/of14/5-49-ofp_meter_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-5-ofp_features_request.packet b/ryu/tests/packet_data/of14/5-5-ofp_features_request.packet deleted file mode 100644 index bc360d55..00000000 Binary files a/ryu/tests/packet_data/of14/5-5-ofp_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-50-ofp_meter_features_reply.packet b/ryu/tests/packet_data/of14/5-50-ofp_meter_features_reply.packet deleted file mode 100644 index 9d138430..00000000 Binary files a/ryu/tests/packet_data/of14/5-50-ofp_meter_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-51-ofp_port_desc_request.packet b/ryu/tests/packet_data/of14/5-51-ofp_port_desc_request.packet deleted file mode 100644 index 5aaa40d1..00000000 Binary files a/ryu/tests/packet_data/of14/5-51-ofp_port_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-52-ofp_port_desc_reply.packet b/ryu/tests/packet_data/of14/5-52-ofp_port_desc_reply.packet deleted file mode 100644 index c844eef3..00000000 Binary files a/ryu/tests/packet_data/of14/5-52-ofp_port_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-53-ofp_table_features_request.packet b/ryu/tests/packet_data/of14/5-53-ofp_table_features_request.packet deleted file mode 100644 index 7a7317aa..00000000 Binary files a/ryu/tests/packet_data/of14/5-53-ofp_table_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-54-ofp_table_features_reply.packet b/ryu/tests/packet_data/of14/5-54-ofp_table_features_reply.packet deleted file mode 100644 index 6b622a36..00000000 Binary files a/ryu/tests/packet_data/of14/5-54-ofp_table_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-55-ofp_group_stats_request.packet b/ryu/tests/packet_data/of14/5-55-ofp_group_stats_request.packet deleted file mode 100644 index a3ab88c1..00000000 Binary files a/ryu/tests/packet_data/of14/5-55-ofp_group_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-56-ofp_group_stats_reply.packet b/ryu/tests/packet_data/of14/5-56-ofp_group_stats_reply.packet deleted file mode 100644 index 2a19c4b6..00000000 Binary files a/ryu/tests/packet_data/of14/5-56-ofp_group_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-57-ofp_packet_in.packet b/ryu/tests/packet_data/of14/5-57-ofp_packet_in.packet deleted file mode 100644 index f313389d..00000000 Binary files a/ryu/tests/packet_data/of14/5-57-ofp_packet_in.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-58-ofp_flow_mod.packet b/ryu/tests/packet_data/of14/5-58-ofp_flow_mod.packet deleted file mode 100644 index 456e89ad..00000000 Binary files a/ryu/tests/packet_data/of14/5-58-ofp_flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-59-ofp_experimenter_request.packet b/ryu/tests/packet_data/of14/5-59-ofp_experimenter_request.packet deleted file mode 100644 index c41652e2..00000000 Binary files a/ryu/tests/packet_data/of14/5-59-ofp_experimenter_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-6-ofp_features_reply.packet b/ryu/tests/packet_data/of14/5-6-ofp_features_reply.packet deleted file mode 100644 index 1236be2d..00000000 Binary files a/ryu/tests/packet_data/of14/5-6-ofp_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-60-ofp_experimenter_reply.packet b/ryu/tests/packet_data/of14/5-60-ofp_experimenter_reply.packet deleted file mode 100644 index 4f2bdc6b..00000000 Binary files a/ryu/tests/packet_data/of14/5-60-ofp_experimenter_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-61-ofp_table_desc_request.packet b/ryu/tests/packet_data/of14/5-61-ofp_table_desc_request.packet deleted file mode 100644 index 5e728623..00000000 Binary files a/ryu/tests/packet_data/of14/5-61-ofp_table_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-62-ofp_table_desc_reply.packet b/ryu/tests/packet_data/of14/5-62-ofp_table_desc_reply.packet deleted file mode 100644 index 2f7b6e2e..00000000 Binary files a/ryu/tests/packet_data/of14/5-62-ofp_table_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-63-ofp_queue_desc_request.packet b/ryu/tests/packet_data/of14/5-63-ofp_queue_desc_request.packet deleted file mode 100644 index 78e584d8..00000000 Binary files a/ryu/tests/packet_data/of14/5-63-ofp_queue_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-64-ofp_queue_desc_reply.packet b/ryu/tests/packet_data/of14/5-64-ofp_queue_desc_reply.packet deleted file mode 100644 index d9f6f11b..00000000 Binary files a/ryu/tests/packet_data/of14/5-64-ofp_queue_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-65-ofp_role_status.packet b/ryu/tests/packet_data/of14/5-65-ofp_role_status.packet deleted file mode 100644 index cd753a30..00000000 Binary files a/ryu/tests/packet_data/of14/5-65-ofp_role_status.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-66-ofp_flow_monitor_request.packet b/ryu/tests/packet_data/of14/5-66-ofp_flow_monitor_request.packet deleted file mode 100644 index 1f8d8598..00000000 Binary files a/ryu/tests/packet_data/of14/5-66-ofp_flow_monitor_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-67-ofp_flow_monitor_reply.packet b/ryu/tests/packet_data/of14/5-67-ofp_flow_monitor_reply.packet deleted file mode 100644 index b50fe8f5..00000000 Binary files a/ryu/tests/packet_data/of14/5-67-ofp_flow_monitor_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-68-ofp_table_status.packet b/ryu/tests/packet_data/of14/5-68-ofp_table_status.packet deleted file mode 100644 index f630ccc2..00000000 Binary files a/ryu/tests/packet_data/of14/5-68-ofp_table_status.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-69-ofp_bundle_ctrl_msg.packet b/ryu/tests/packet_data/of14/5-69-ofp_bundle_ctrl_msg.packet deleted file mode 100644 index 8df1e6f8..00000000 Binary files a/ryu/tests/packet_data/of14/5-69-ofp_bundle_ctrl_msg.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-7-ofp_set_config.packet b/ryu/tests/packet_data/of14/5-7-ofp_set_config.packet deleted file mode 100644 index 0d22cd5a..00000000 Binary files a/ryu/tests/packet_data/of14/5-7-ofp_set_config.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-70-ofp_bundle_add_msg.packet b/ryu/tests/packet_data/of14/5-70-ofp_bundle_add_msg.packet deleted file mode 100644 index 5565f8d3..00000000 Binary files a/ryu/tests/packet_data/of14/5-70-ofp_bundle_add_msg.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-71-ofp_requestforward.packet b/ryu/tests/packet_data/of14/5-71-ofp_requestforward.packet deleted file mode 100644 index d06e8b4a..00000000 Binary files a/ryu/tests/packet_data/of14/5-71-ofp_requestforward.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-8-ofp_get_config_request.packet b/ryu/tests/packet_data/of14/5-8-ofp_get_config_request.packet deleted file mode 100644 index 9e930df3..00000000 Binary files a/ryu/tests/packet_data/of14/5-8-ofp_get_config_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/5-9-ofp_get_config_reply.packet b/ryu/tests/packet_data/of14/5-9-ofp_get_config_reply.packet deleted file mode 100644 index f63f6c29..00000000 Binary files a/ryu/tests/packet_data/of14/5-9-ofp_get_config_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet b/ryu/tests/packet_data/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet deleted file mode 100644 index 207712f1..00000000 Binary files a/ryu/tests/packet_data/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_reply.packet deleted file mode 100644 index bbb51918..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_request.packet deleted file mode 100644 index 5abee5b4..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-barrier_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-barrier_reply.packet deleted file mode 100644 index fc15112c..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-barrier_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-barrier_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-barrier_request.packet deleted file mode 100644 index cda0a443..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-barrier_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_add.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_add.packet deleted file mode 100644 index 744af0fd..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_add.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_ctrl.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_ctrl.packet deleted file mode 100644 index 34b2f3bf..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_ctrl.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_features_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_features_reply.packet deleted file mode 100644 index 450081e6..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_features_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_features_request.packet deleted file mode 100644 index 8d078ef2..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-bundle_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-controller_status.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-controller_status.packet deleted file mode 100644 index 9b63794e..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-controller_status.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-controller_status_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-controller_status_reply.packet deleted file mode 100644 index e859f9b0..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-controller_status_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-controller_status_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-controller_status_request.packet deleted file mode 100644 index 4c741757..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-controller_status_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-desc_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-desc_reply.packet deleted file mode 100644 index 261333c4..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-desc_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-desc_request.packet deleted file mode 100644 index 11b39877..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-echo_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-echo_reply.packet deleted file mode 100644 index 70d03566..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-echo_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-echo_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-echo_request.packet deleted file mode 100644 index a72ee3aa..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-echo_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-error_msg.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-error_msg.packet deleted file mode 100644 index 596762d8..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-error_msg.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-error_msg_experimenter.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-error_msg_experimenter.packet deleted file mode 100644 index 3fba70c2..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-error_msg_experimenter.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-experimenter.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-experimenter.packet deleted file mode 100644 index c96393aa..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-experimenter.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-experimenter_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-experimenter_reply.packet deleted file mode 100644 index 9575ae9b..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-experimenter_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-experimenter_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-experimenter_request.packet deleted file mode 100644 index 739437cb..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-experimenter_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-features_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-features_reply.packet deleted file mode 100644 index 6893fd57..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-features_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-features_request.packet deleted file mode 100644 index 8d7159e5..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_desc_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-flow_desc_reply.packet deleted file mode 100644 index 4bf534cf..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_desc_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-flow_desc_request.packet deleted file mode 100644 index a5a5bc11..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod.packet deleted file mode 100644 index d70a062c..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod_conjunction.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod_conjunction.packet deleted file mode 100644 index 6fee113a..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod_conjunction.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod_match_conj.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod_match_conj.packet deleted file mode 100644 index 4bc17eef..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_mod_match_conj.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_monitor_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-flow_monitor_reply.packet deleted file mode 100644 index 94129c1c..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_monitor_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_monitor_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-flow_monitor_request.packet deleted file mode 100644 index 203af31f..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_monitor_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_removed.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-flow_removed.packet deleted file mode 100644 index 1df2b2ed..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_removed.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_stats_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-flow_stats_reply.packet deleted file mode 100644 index 5ca44bbd..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_stats_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-flow_stats_request.packet deleted file mode 100644 index 8481a1bb..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-flow_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-get_async_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-get_async_reply.packet deleted file mode 100644 index aa14b1e2..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-get_async_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-get_async_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-get_async_request.packet deleted file mode 100644 index b8672b82..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-get_async_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-get_config_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-get_config_reply.packet deleted file mode 100644 index 6e7b6191..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-get_config_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-get_config_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-get_config_request.packet deleted file mode 100644 index 15fc95f0..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-get_config_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-group_desc_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-group_desc_reply.packet deleted file mode 100644 index 6420c149..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-group_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-group_desc_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-group_desc_request.packet deleted file mode 100644 index ee6ee7ce..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-group_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-group_features_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-group_features_reply.packet deleted file mode 100644 index 14ddc120..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-group_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-group_features_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-group_features_request.packet deleted file mode 100644 index 90805651..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-group_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-group_mod.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-group_mod.packet deleted file mode 100644 index 65761562..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-group_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-group_stats_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-group_stats_reply.packet deleted file mode 100644 index 4853628d..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-group_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-group_stats_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-group_stats_request.packet deleted file mode 100644 index 3c8dd862..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-group_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-hello.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-hello.packet deleted file mode 100644 index 3afdec41..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-hello.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_desc_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-meter_desc_reply.packet deleted file mode 100644 index 026199ae..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_desc_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-meter_desc_request.packet deleted file mode 100644 index 3a008900..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_features_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-meter_features_reply.packet deleted file mode 100644 index b7e5a935..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_features_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-meter_features_request.packet deleted file mode 100644 index d85918df..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_mod.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-meter_mod.packet deleted file mode 100644 index 2f25474f..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_stats_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-meter_stats_reply.packet deleted file mode 100644 index 2db08d65..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_stats_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-meter_stats_request.packet deleted file mode 100644 index 6cec3f59..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-meter_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-packet_in.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-packet_in.packet deleted file mode 100644 index 7a6aab01..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-packet_in.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-packet_out.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-packet_out.packet deleted file mode 100644 index b3569026..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-packet_out.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-port_desc_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-port_desc_reply.packet deleted file mode 100644 index c687e5cd..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-port_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-port_desc_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-port_desc_request.packet deleted file mode 100644 index cf9ecc6e..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-port_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-port_mod.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-port_mod.packet deleted file mode 100644 index 1aab2c48..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-port_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-port_stats_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-port_stats_reply.packet deleted file mode 100644 index 9d190d01..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-port_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-port_stats_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-port_stats_request.packet deleted file mode 100644 index af7d6892..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-port_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-port_status.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-port_status.packet deleted file mode 100644 index 1d2d5305..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-port_status.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-queue_desc_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-queue_desc_reply.packet deleted file mode 100644 index d8f8e318..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-queue_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-queue_desc_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-queue_desc_request.packet deleted file mode 100644 index 960dbeff..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-queue_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-queue_stats_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-queue_stats_reply.packet deleted file mode 100644 index 11744f90..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-queue_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-queue_stats_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-queue_stats_request.packet deleted file mode 100644 index 416a6185..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-queue_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-requestforward.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-requestforward.packet deleted file mode 100644 index 153a99f2..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-requestforward.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-role_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-role_reply.packet deleted file mode 100644 index c92ba974..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-role_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-role_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-role_request.packet deleted file mode 100644 index 82c99197..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-role_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-role_status.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-role_status.packet deleted file mode 100644 index de85d1f8..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-role_status.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-set_async.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-set_async.packet deleted file mode 100644 index 9fbfd415..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-set_async.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-set_config.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-set_config.packet deleted file mode 100644 index eb3ed3dd..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-set_config.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-table_desc_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-table_desc_reply.packet deleted file mode 100644 index 4177a743..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-table_desc_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-table_desc_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-table_desc_request.packet deleted file mode 100644 index c2a47776..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-table_desc_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-table_features_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-table_features_reply.packet deleted file mode 100644 index ce826483..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-table_features_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-table_features_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-table_features_request.packet deleted file mode 100644 index 706d8756..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-table_features_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-table_mod.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-table_mod.packet deleted file mode 100644 index 884fc42b..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-table_mod.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-table_stats_reply.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-table_stats_reply.packet deleted file mode 100644 index 6693467f..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-table_stats_reply.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-table_stats_request.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-table_stats_request.packet deleted file mode 100644 index aae25d76..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-table_stats_request.packet and /dev/null differ diff --git a/ryu/tests/packet_data/of15/libofproto-OFP15-table_status.packet b/ryu/tests/packet_data/of15/libofproto-OFP15-table_status.packet deleted file mode 100644 index 3410d23c..00000000 Binary files a/ryu/tests/packet_data/of15/libofproto-OFP15-table_status.packet and /dev/null differ diff --git a/ryu/tests/packet_data/pcap/big_endian.pcap b/ryu/tests/packet_data/pcap/big_endian.pcap deleted file mode 100644 index 1387f5dd..00000000 Binary files a/ryu/tests/packet_data/pcap/big_endian.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/pcap/geneve_unknown.pcap b/ryu/tests/packet_data/pcap/geneve_unknown.pcap deleted file mode 100644 index dc65d944..00000000 Binary files a/ryu/tests/packet_data/pcap/geneve_unknown.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/pcap/gre_full_options.pcap b/ryu/tests/packet_data/pcap/gre_full_options.pcap deleted file mode 100644 index cabf5199..00000000 Binary files a/ryu/tests/packet_data/pcap/gre_full_options.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/pcap/gre_no_option.pcap b/ryu/tests/packet_data/pcap/gre_no_option.pcap deleted file mode 100644 index 258126ba..00000000 Binary files a/ryu/tests/packet_data/pcap/gre_no_option.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/pcap/gre_nvgre_option.pcap b/ryu/tests/packet_data/pcap/gre_nvgre_option.pcap deleted file mode 100644 index fb1b2980..00000000 Binary files a/ryu/tests/packet_data/pcap/gre_nvgre_option.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/pcap/little_endian.pcap b/ryu/tests/packet_data/pcap/little_endian.pcap deleted file mode 100644 index 11072bdd..00000000 Binary files a/ryu/tests/packet_data/pcap/little_endian.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/pcap/openflow_flowmod.pcap b/ryu/tests/packet_data/pcap/openflow_flowmod.pcap deleted file mode 100644 index e72a0425..00000000 Binary files a/ryu/tests/packet_data/pcap/openflow_flowmod.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/pcap/openflow_flowstats_req.pcap b/ryu/tests/packet_data/pcap/openflow_flowstats_req.pcap deleted file mode 100644 index 7ce270d5..00000000 Binary files a/ryu/tests/packet_data/pcap/openflow_flowstats_req.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/pcap/openflow_invalid_version.pcap b/ryu/tests/packet_data/pcap/openflow_invalid_version.pcap deleted file mode 100644 index 2c22675b..00000000 Binary files a/ryu/tests/packet_data/pcap/openflow_invalid_version.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/pcap/zebra_v2.pcap b/ryu/tests/packet_data/pcap/zebra_v2.pcap deleted file mode 100644 index b5ca677b..00000000 Binary files a/ryu/tests/packet_data/pcap/zebra_v2.pcap and /dev/null differ diff --git a/ryu/tests/packet_data/pcap/zebra_v3.pcap b/ryu/tests/packet_data/pcap/zebra_v3.pcap deleted file mode 100644 index f2e01a91..00000000 Binary files a/ryu/tests/packet_data/pcap/zebra_v3.pcap and /dev/null differ diff --git a/ryu/tests/packet_data_generator/Makefile b/ryu/tests/packet_data_generator/Makefile deleted file mode 100644 index be1e8d85..00000000 --- a/ryu/tests/packet_data_generator/Makefile +++ /dev/null @@ -1,5 +0,0 @@ - -generate: - rebar get-deps - rebar compile - erl -pa ebin deps/*/ebin -s x x -s init stop diff --git a/ryu/tests/packet_data_generator/rebar.config b/ryu/tests/packet_data_generator/rebar.config deleted file mode 100644 index e060319c..00000000 --- a/ryu/tests/packet_data_generator/rebar.config +++ /dev/null @@ -1,29 +0,0 @@ -%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -%% Copyright (C) 2013 YAMAMOTO Takashi -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -%% implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. - -{deps, - [{of_protocol, ".*", -% {git, "https://github.com/FlowForwarding/of_protocol.git", -% "5d6a938bcac91d03e4542845bc014a271bab363a"}}, -% use local branch for merge of upstream v5 branch with pull 66 and 71 -% https://github.com/FlowForwarding/of_protocol/tree/v5 -% https://github.com/FlowForwarding/of_protocol/pull/66 -% https://github.com/FlowForwarding/of_protocol/pull/71 - {git, "https://github.com/horms/of_protocol.git", - "6764e8f0ed5c4dee913310bf2bd908ab1768603e"}}, - {flower, ".*", - {git, "http://github.com/travelping/flower.git", - "d783d8f722cb1eb2fa598d4521b309cfcc703fdb"}}]}. diff --git a/ryu/tests/packet_data_generator/src/er.app.src b/ryu/tests/packet_data_generator/src/er.app.src deleted file mode 100644 index 5252b564..00000000 --- a/ryu/tests/packet_data_generator/src/er.app.src +++ /dev/null @@ -1,24 +0,0 @@ -%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -%% Copyright (C) 2013 YAMAMOTO Takashi -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -%% implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. - -{application, er, - [{description, "generate test data"}, - {vsn, "1.0"}, - {applications, - [kernel, - stdlib, - of_protocol]}]}. - diff --git a/ryu/tests/packet_data_generator/src/x.erl b/ryu/tests/packet_data_generator/src/x.erl deleted file mode 100644 index 1b624e8f..00000000 --- a/ryu/tests/packet_data_generator/src/x.erl +++ /dev/null @@ -1,63 +0,0 @@ -%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -%% Copyright (C) 2013 YAMAMOTO Takashi -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -%% implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. - --module(x). --export([do/2, x/0]). - -% eg. 1 -> of10 -ofp_version_string(Vers) -> - ["of", integer_to_list(9 + Vers)]. - -do(skip, {OFPVersion, N}) -> - {OFPVersion, N + 1}; -do(Body, {OFPVersion, N}) -> - Mod = case OFPVersion of - 1 -> x_flower_packet; - _ -> x_of_protocol - end, - Name = case Body of - B when is_tuple(B) -> - atom_to_list(element(1, B)); - _ -> - atom_to_list(Body) - end, - io:format("processing ~B ~B ~s~n", [OFPVersion, N, Name]), - Msg = Mod:message(OFPVersion, 0, Body), - case Mod:encode(Msg) of - {ok, BinMsg} -> ok; - {error, Error} -> io:format("~p ~p~n", [Error, Msg]), BinMsg = hoge - end, - {ok, F} = file:open(["../packet_data/", - ofp_version_string(OFPVersion), "/", integer_to_list(OFPVersion), "-", - integer_to_list(N), "-", Name, ".packet"], [write, binary]), - - % sanity check - % this is fragile because of order of flags. - % ofp flags are unorderd but of_protocol keeps them in a list. - {ok, Msg2, <<>>} = Mod:decode(BinMsg), - {OFPVersion, 0, Body2} = Mod:message_extract(Msg2), - case Body == Body2 of - false -> io:format("~p~n", [Body]), io:format("~p~n", [Body2]); - _ -> hoge - end, - Body = Body2, - - ok = file:write(F, BinMsg), - ok = file:close(F), - {OFPVersion, N + 1}. - -x() -> - lists:map(fun(Mod) -> Mod:x() end, [x1, x3, x4, x5]). diff --git a/ryu/tests/packet_data_generator/src/x1.erl b/ryu/tests/packet_data_generator/src/x1.erl deleted file mode 100644 index 6935e021..00000000 --- a/ryu/tests/packet_data_generator/src/x1.erl +++ /dev/null @@ -1,90 +0,0 @@ -%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -%% Copyright (C) 2013 YAMAMOTO Takashi -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -%% implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. - --module(x1). --export([x/0]). - --include_lib("flower/include/flower_packet.hrl"). - -cookie(Bin) -> - <> = Bin, - Int. - -x() -> - List = [ - skip, - #ofp_packet_out{ - buffer_id = ?OFP_NO_BUFFER,in_port = controller, - actions = - [#ofp_action_output{port = all,max_len = 65535}], - data = - <<242,11,164,208,63,112,242,11,164,125,248,234,8,0,69,0, - 0,84,248,26,0,0,255,1,175,139,10,0,0,1,10,0,0,2,8,0,2, - 8,247,96,0,0,49,214,2,0,0,0,0,0,171,141,45,49,0,0,0,0, - 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33, - 34,35,36,37,38,39,40,41,42,43,44,45,46,47,0,0,0,0,0,0, - 0,0>>}, - #ofp_flow_mod{ - cookie = cookie(<<0,0,0,0,0,0,0,0>>), - command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = all,flags = [], - match = - #ofp_match{ - wildcards = 16#3ffff7, - dl_dst = <<"\362\v\244}\370\352">>, - % XXX ryu and flower have different defaults for the - % followin fields. - in_port = 0, - dl_src = <<0:6/unit:8>> - }, - actions = [#ofp_action_output{port = 6,max_len = 65535}]}, - skip, - #ofp_packet_in{ - buffer_id = 2,total_len=42,reason = action,in_port = 99, - data = - <<255,255,255,255,255,255,242,11,164,125,248,234,8,6,0, - 1,8,0,6,4,0,1,242,11,164,125,248,234,10,0,0,1,0,0,0,0, - 0,0,10,0,0,3>>}, - - features_request, - #ofp_switch_features{ % features_reply - datapath_id = 16#ff12345678,n_buffers = 0,n_tables = 255, - capabilities = - [arp_match_ip,ip_reasm,stp,flow_stats], - actions = - [enqueue,set_nw_src,set_vlan_vid,output], - ports = - [#ofp_phy_port{ - port_no = 7,hw_addr = <<"\362\v\244\320?p">>, - name = <<"Port7">>, - config = [], - state = [stp_block], - curr = [autoneg,copper,'100mb_fd'], - advertised = [autoneg,copper], - supported = [autoneg,copper,'100mb_fd'], - peer = [autoneg,copper,'100mb_fd']}, - #ofp_phy_port{ - port_no = 6,hw_addr = <<"\362\v\244}\370\352">>, - name = <<"Port6">>, - config = [], - state = [stp_listen], - curr = [autoneg,copper,'100mb_fd'], - advertised = [autoneg,copper], - supported = [autoneg,copper,'100mb_fd'], - peer = [autoneg,copper,'100mb_fd']}]} - ], - lists:foldl(fun x:do/2, {1, 0}, List). diff --git a/ryu/tests/packet_data_generator/src/x3.erl b/ryu/tests/packet_data_generator/src/x3.erl deleted file mode 100644 index 7098fd8d..00000000 --- a/ryu/tests/packet_data_generator/src/x3.erl +++ /dev/null @@ -1,8749 +0,0 @@ -%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -%% Copyright (C) 2013 YAMAMOTO Takashi -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -%% implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. - --module(x3). --export([x/0]). - --include_lib("of_protocol/include/of_protocol.hrl"). --include_lib("of_protocol/include/ofp_v3.hrl"). - -x() -> - AllFields = [ - #ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<5,6,7,8>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = in_phy_port, - has_mask = false, - value = <<1,2,3,4>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = metadata, - has_mask = false, - value = <<0,1,2,3,4,5,6,7>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_type, - has_mask = false, - value = <<8,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false,value = <<"\377\377\377\377\377\377">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = vlan_vid, - has_mask = false,value = <<999:13>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ip_dscp, - has_mask = false,value = <<9:6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ip_ecn, - has_mask = false,value = <<3:2>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ip_proto, - has_mask = false,value = <<99>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv4_src, - has_mask = false,value = <<1,2,3,4>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv4_dst, - has_mask = false,value = <<1,2,3,4>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = tcp_src, - has_mask = false,value = <<8080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = tcp_dst, - has_mask = false,value = <<18080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = udp_src, - has_mask = false,value = <<28080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = udp_dst, - has_mask = false,value = <<318080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = sctp_src, - has_mask = false,value = <<48080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = sctp_dst, - has_mask = false,value = <<518080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv4_type, - has_mask = false,value = <<100>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv4_code, - has_mask = false,value = <<101>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_op, - has_mask = false, - value = <<0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_spa, - has_mask = false, - value = <<10,0,0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tpa, - has_mask = false, - value = <<10,0,0,3>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_sha, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tha, - has_mask = false, - value = <<0,0,0,0,0,0>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_src, - has_mask = false, - % fe80::f00b:a4ff:fe48:28a5 - value = <<16#fe80000000000000f00ba4fffe4828a5:128>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_dst, - has_mask = false, - % fe80::f00b:a4ff:fe05:b7dc - value = <<16#fe80000000000000f00ba4fffe05b7dc:128>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_flabel, - has_mask = false, - value = <<16#84321:20>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv6_type, - has_mask = false, - value = <<200>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv6_code, - has_mask = false, - value = <<201>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_nd_target, - has_mask = false, - % fe80::a60:6eff:fe7f:74e7 - value = <<16#fe800000000000000a606efffe7f74e7:128>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_nd_sll, - has_mask = false, - value = <<666:48>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_nd_tll, - has_mask = false, - value = <<555:48>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = mpls_label, - has_mask = false, - value = <<16#98765:20>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = mpls_tc, - has_mask = false, - value = <<5:3>>, - mask = undefined} - ], - List = [ - #ofp_desc_stats_reply{flags = [], mfr_desc = <<"mfr">>, - hw_desc = <<"hw">>, sw_desc = <<"sw">>, - serial_num = <<"serial">>, - dp_desc = <<"dp">>}, - #ofp_packet_out{ - buffer_id = no_buffer,in_port = controller, - actions = - [#ofp_action_output{port = all,max_len = no_buffer}], - data = - <<242,11,164,208,63,112,242,11,164,125,248,234,8,0,69,0, - 0,84,248,26,0,0,255,1,175,139,10,0,0,1,10,0,0,2,8,0,2, - 8,247,96,0,0,49,214,2,0,0,0,0,0,171,141,45,49,0,0,0,0, - 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33, - 34,35,36,37,38,39,40,41,42,43,44,45,46,47,0,0,0,0,0,0, - 0,0>>}, - #ofp_flow_mod{ - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - table_id = 1,command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = any,out_group = any,flags = [], - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}, - instructions = - [#ofp_instruction_write_actions{ - actions = - [#ofp_action_set_field{ - field = #ofp_field{name = vlan_vid, - value = <<258:13>> }}, - #ofp_action_output{port = 6,max_len = no_buffer}]}, - #ofp_instruction_apply_actions{ - actions = - [#ofp_action_set_field{ - field = #ofp_field{name = eth_src, - value = <<1,2,3,4,5,6>> }}]}]}, - #ofp_flow_mod{ - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - table_id = 0,command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = any,out_group = any,flags = [], - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<0,0,0,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}, - instructions = - [#ofp_instruction_goto_table{table_id = 1}]}, - #ofp_packet_in{ - buffer_id = 2,reason = action,table_id = 1, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<0,0,0,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_type, - has_mask = false, - value = <<8,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false,value = <<"\377\377\377\377\377\377">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_op, - has_mask = false, - value = <<0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_spa, - has_mask = false, - value = <<10,0,0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tpa, - has_mask = false, - value = <<10,0,0,3>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_sha, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tha, - has_mask = false, - value = <<0,0,0,0,0,0>>, - mask = undefined}]}, - data = - <<255,255,255,255,255,255,242,11,164,125,248,234,8,6,0, - 1,8,0,6,4,0,1,242,11,164,125,248,234,10,0,0,1,0,0,0,0, - 0,0,10,0,0,3>>}, - #ofp_features_request{}, - #ofp_features_reply{ - datapath_mac = <<8,96,110,127,116,231>>, - datapath_id = 0,n_buffers = 0,n_tables = 255, - capabilities = - [flow_stats,table_stats,port_stats,group_stats,queue_stats], - ports = - [#ofp_port{ - port_no = 7,hw_addr = <<"\362\v\244\320?p">>, - name = <<"Port7">>, - config = [], - state = [live], - curr = ['100mb_fd',copper,autoneg], - advertised = [copper,autoneg], - supported = ['100mb_fd',copper,autoneg], - peer = ['100mb_fd',copper,autoneg], - curr_speed = 5000,max_speed = 5000}, - #ofp_port{ - port_no = 6,hw_addr = <<"\362\v\244}\370\352">>, - name = <<"Port6">>, - config = [], - state = [live], - curr = ['100mb_fd',copper,autoneg], - advertised = [copper,autoneg], - supported = ['100mb_fd',copper,autoneg], - peer = ['100mb_fd',copper,autoneg], - curr_speed = 5000,max_speed = 5000}]}, - #ofp_set_config{flags = [],miss_send_len = 128}, - #ofp_get_config_request{}, - #ofp_get_config_reply{flags = [],miss_send_len = 128}, - #ofp_hello{}, - #ofp_flow_stats_request{ - flags = [],table_id = 0,out_port = any,out_group = any, - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - match = #ofp_match{fields = []}}, - #ofp_flow_stats_reply{ - flags = [], - stats = - [#ofp_flow_stats{ - table_id = 0,duration_sec = 358, - duration_nsec = 115277000,priority = 65535, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 0,byte_count = 0, - match = #ofp_match{fields = []}, - instructions = []}, - #ofp_flow_stats{ - table_id = 0,duration_sec = 358, - duration_nsec = 115055000,priority = 65534, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 0,byte_count = 0, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_type, - has_mask = false, - value = <<8,6>>, - mask = undefined}]}, - instructions = - [#ofp_instruction_apply_actions{ - actions = - [#ofp_action_output{ - port = normal,max_len = 0}]}]}, - #ofp_flow_stats{ - table_id = 0,duration_sec = 316220, - duration_nsec = 511582000,priority = 123, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 3,byte_count = 238, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<0,0,0,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}, - instructions = - [#ofp_instruction_goto_table{table_id = 1}]}, - #ofp_flow_stats{ - table_id = 0,duration_sec = 313499, - duration_nsec = 980901000,priority = 0, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 1,byte_count = 98, - match = #ofp_match{fields = []}, - instructions = - [#ofp_instruction_write_actions{ - actions = - [#ofp_action_output{ - port = controller, - max_len = no_buffer}]}]}]}, - #ofp_echo_request{ - data = <<"hoge">> - }, - #ofp_echo_reply{ - data = <<"hoge">> - }, - #ofp_error_msg{ - type = bad_action, - code = unsupported_order, - data = <<"fugafuga">> - }, - #ofp_experimenter{ - experimenter = 98765432, - exp_type = 123456789, - data = <<"nazo">> - }, - #ofp_barrier_request{}, - #ofp_barrier_reply{}, - #ofp_role_request{ - role = master, - generation_id = 16#f000f000f000f000}, - #ofp_role_reply{ - role = slave, - generation_id = 16#f000f000f000f000}, - - #ofp_group_mod{ - command = add,type = all,group_id = 1, - buckets = - [#ofp_bucket{ - weight = 1,watch_port = 1,watch_group = 1, - actions = - [#ofp_action_output{port = 2,max_len = no_buffer}]}]}, - #ofp_port_mod{port_no = 1, hw_addr = <<0,17,0,0,17,17>>, - config = [],mask = [], advertise = [fiber]}, - #ofp_table_mod{table_id = all,config = controller}, - #ofp_desc_stats_request{}, - #ofp_aggregate_stats_request{ - flags = [],table_id = all,out_port = any,out_group = any, - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - match = #ofp_match{fields = []}}, - #ofp_aggregate_stats_reply{flags = [],packet_count = 7, - byte_count = 574,flow_count = 6}, - #ofp_table_stats_request{}, - -#ofp_table_stats_reply{ - flags = [], - stats = - [#ofp_table_stats{ - table_id = 0,name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x86\xe3\x83\xbc\xe3\x83\x96\xe3\x83\xab">>, % "my table" in japanese, utf-8 - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 4, - lookup_count = 4,matched_count = 4}, - #ofp_table_stats{ - table_id = 1,name = <<"Flow Table 0x01">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 2, - lookup_count = 3,matched_count = 3}, - #ofp_table_stats{ - table_id = 2,name = <<"Flow Table 0x02">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 3,name = <<"Flow Table 0x03">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 4,name = <<"Flow Table 0x04">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 5,name = <<"Flow Table 0x05">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 6,name = <<"Flow Table 0x06">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 7,name = <<"Flow Table 0x07">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 8,name = <<"Flow Table 0x08">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 9,name = <<"Flow Table 0x09">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 10,name = <<"Flow Table 0x0a">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 11,name = <<"Flow Table 0x0b">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 12,name = <<"Flow Table 0x0c">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 13,name = <<"Flow Table 0x0d">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 14,name = <<"Flow Table 0x0e">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 15,name = <<"Flow Table 0x0f">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 16,name = <<"Flow Table 0x10">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 17,name = <<"Flow Table 0x11">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 18,name = <<"Flow Table 0x12">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 19,name = <<"Flow Table 0x13">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 20,name = <<"Flow Table 0x14">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 21,name = <<"Flow Table 0x15">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 22,name = <<"Flow Table 0x16">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 23,name = <<"Flow Table 0x17">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 24,name = <<"Flow Table 0x18">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 25,name = <<"Flow Table 0x19">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 26,name = <<"Flow Table 0x1a">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 27,name = <<"Flow Table 0x1b">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 28,name = <<"Flow Table 0x1c">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 29,name = <<"Flow Table 0x1d">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 30,name = <<"Flow Table 0x1e">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 31,name = <<"Flow Table 0x1f">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 32,name = <<"Flow Table 0x20">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 33,name = <<"Flow Table 0x21">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 34,name = <<"Flow Table 0x22">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 35,name = <<"Flow Table 0x23">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 36,name = <<"Flow Table 0x24">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 37,name = <<"Flow Table 0x25">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 38,name = <<"Flow Table 0x26">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 39,name = <<"Flow Table 0x27">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 40,name = <<"Flow Table 0x28">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 41,name = <<"Flow Table 0x29">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 42,name = <<"Flow Table 0x2a">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 43,name = <<"Flow Table 0x2b">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 44,name = <<"Flow Table 0x2c">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 45,name = <<"Flow Table 0x2d">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 46,name = <<"Flow Table 0x2e">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 47,name = <<"Flow Table 0x2f">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 48,name = <<"Flow Table 0x30">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 49,name = <<"Flow Table 0x31">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 50,name = <<"Flow Table 0x32">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 51,name = <<"Flow Table 0x33">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 52,name = <<"Flow Table 0x34">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 53,name = <<"Flow Table 0x35">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 54,name = <<"Flow Table 0x36">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 55,name = <<"Flow Table 0x37">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 56,name = <<"Flow Table 0x38">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 57,name = <<"Flow Table 0x39">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 58,name = <<"Flow Table 0x3a">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 59,name = <<"Flow Table 0x3b">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 60,name = <<"Flow Table 0x3c">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 61,name = <<"Flow Table 0x3d">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 62,name = <<"Flow Table 0x3e">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 63,name = <<"Flow Table 0x3f">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 64,name = <<"Flow Table 0x40">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 65,name = <<"Flow Table 0x41">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 66,name = <<"Flow Table 0x42">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 67,name = <<"Flow Table 0x43">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 68,name = <<"Flow Table 0x44">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 69,name = <<"Flow Table 0x45">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 70,name = <<"Flow Table 0x46">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 71,name = <<"Flow Table 0x47">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 72,name = <<"Flow Table 0x48">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 73,name = <<"Flow Table 0x49">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 74,name = <<"Flow Table 0x4a">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 75,name = <<"Flow Table 0x4b">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 76,name = <<"Flow Table 0x4c">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 77,name = <<"Flow Table 0x4d">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 78,name = <<"Flow Table 0x4e">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 79,name = <<"Flow Table 0x4f">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 80,name = <<"Flow Table 0x50">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 81,name = <<"Flow Table 0x51">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 82,name = <<"Flow Table 0x52">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 83,name = <<"Flow Table 0x53">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 84,name = <<"Flow Table 0x54">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 85,name = <<"Flow Table 0x55">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 86,name = <<"Flow Table 0x56">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 87,name = <<"Flow Table 0x57">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 88,name = <<"Flow Table 0x58">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 89,name = <<"Flow Table 0x59">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 90,name = <<"Flow Table 0x5a">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 91,name = <<"Flow Table 0x5b">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 92,name = <<"Flow Table 0x5c">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 93,name = <<"Flow Table 0x5d">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 94,name = <<"Flow Table 0x5e">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 95,name = <<"Flow Table 0x5f">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 96,name = <<"Flow Table 0x60">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 97,name = <<"Flow Table 0x61">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 98,name = <<"Flow Table 0x62">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 99,name = <<"Flow Table 0x63">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 100,name = <<"Flow Table 0x64">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 101,name = <<"Flow Table 0x65">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 102,name = <<"Flow Table 0x66">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 103,name = <<"Flow Table 0x67">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 104,name = <<"Flow Table 0x68">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 105,name = <<"Flow Table 0x69">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 106,name = <<"Flow Table 0x6a">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 107,name = <<"Flow Table 0x6b">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 108,name = <<"Flow Table 0x6c">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 109,name = <<"Flow Table 0x6d">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 110,name = <<"Flow Table 0x6e">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 111,name = <<"Flow Table 0x6f">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 112,name = <<"Flow Table 0x70">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 113,name = <<"Flow Table 0x71">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 114,name = <<"Flow Table 0x72">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 115,name = <<"Flow Table 0x73">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 116,name = <<"Flow Table 0x74">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 117,name = <<"Flow Table 0x75">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 118,name = <<"Flow Table 0x76">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 119,name = <<"Flow Table 0x77">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 120,name = <<"Flow Table 0x78">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 121,name = <<"Flow Table 0x79">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 122,name = <<"Flow Table 0x7a">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 123,name = <<"Flow Table 0x7b">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 124,name = <<"Flow Table 0x7c">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 125,name = <<"Flow Table 0x7d">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 126,name = <<"Flow Table 0x7e">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 127,name = <<"Flow Table 0x7f">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 128,name = <<"Flow Table 0x80">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 129,name = <<"Flow Table 0x81">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 130,name = <<"Flow Table 0x82">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 131,name = <<"Flow Table 0x83">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 132,name = <<"Flow Table 0x84">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 133,name = <<"Flow Table 0x85">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 134,name = <<"Flow Table 0x86">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 135,name = <<"Flow Table 0x87">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 136,name = <<"Flow Table 0x88">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 137,name = <<"Flow Table 0x89">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 138,name = <<"Flow Table 0x8a">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 139,name = <<"Flow Table 0x8b">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 140,name = <<"Flow Table 0x8c">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 141,name = <<"Flow Table 0x8d">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 142,name = <<"Flow Table 0x8e">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 143,name = <<"Flow Table 0x8f">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 144,name = <<"Flow Table 0x90">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 145,name = <<"Flow Table 0x91">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 146,name = <<"Flow Table 0x92">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 147,name = <<"Flow Table 0x93">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 148,name = <<"Flow Table 0x94">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 149,name = <<"Flow Table 0x95">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 150,name = <<"Flow Table 0x96">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 151,name = <<"Flow Table 0x97">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 152,name = <<"Flow Table 0x98">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 153,name = <<"Flow Table 0x99">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 154,name = <<"Flow Table 0x9a">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 155,name = <<"Flow Table 0x9b">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 156,name = <<"Flow Table 0x9c">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 157,name = <<"Flow Table 0x9d">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 158,name = <<"Flow Table 0x9e">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 159,name = <<"Flow Table 0x9f">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 160,name = <<"Flow Table 0xa0">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 161,name = <<"Flow Table 0xa1">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 162,name = <<"Flow Table 0xa2">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 163,name = <<"Flow Table 0xa3">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 164,name = <<"Flow Table 0xa4">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 165,name = <<"Flow Table 0xa5">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 166,name = <<"Flow Table 0xa6">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 167,name = <<"Flow Table 0xa7">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 168,name = <<"Flow Table 0xa8">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 169,name = <<"Flow Table 0xa9">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 170,name = <<"Flow Table 0xaa">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 171,name = <<"Flow Table 0xab">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 172,name = <<"Flow Table 0xac">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 173,name = <<"Flow Table 0xad">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 174,name = <<"Flow Table 0xae">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 175,name = <<"Flow Table 0xaf">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 176,name = <<"Flow Table 0xb0">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 177,name = <<"Flow Table 0xb1">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 178,name = <<"Flow Table 0xb2">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 179,name = <<"Flow Table 0xb3">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 180,name = <<"Flow Table 0xb4">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 181,name = <<"Flow Table 0xb5">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 182,name = <<"Flow Table 0xb6">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 183,name = <<"Flow Table 0xb7">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 184,name = <<"Flow Table 0xb8">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 185,name = <<"Flow Table 0xb9">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 186,name = <<"Flow Table 0xba">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 187,name = <<"Flow Table 0xbb">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 188,name = <<"Flow Table 0xbc">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 189,name = <<"Flow Table 0xbd">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 190,name = <<"Flow Table 0xbe">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 191,name = <<"Flow Table 0xbf">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 192,name = <<"Flow Table 0xc0">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 193,name = <<"Flow Table 0xc1">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 194,name = <<"Flow Table 0xc2">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 195,name = <<"Flow Table 0xc3">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 196,name = <<"Flow Table 0xc4">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 197,name = <<"Flow Table 0xc5">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 198,name = <<"Flow Table 0xc6">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 199,name = <<"Flow Table 0xc7">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 200,name = <<"Flow Table 0xc8">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 201,name = <<"Flow Table 0xc9">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 202,name = <<"Flow Table 0xca">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 203,name = <<"Flow Table 0xcb">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 204,name = <<"Flow Table 0xcc">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 205,name = <<"Flow Table 0xcd">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 206,name = <<"Flow Table 0xce">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 207,name = <<"Flow Table 0xcf">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 208,name = <<"Flow Table 0xd0">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 209,name = <<"Flow Table 0xd1">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 210,name = <<"Flow Table 0xd2">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 211,name = <<"Flow Table 0xd3">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 212,name = <<"Flow Table 0xd4">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 213,name = <<"Flow Table 0xd5">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 214,name = <<"Flow Table 0xd6">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 215,name = <<"Flow Table 0xd7">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 216,name = <<"Flow Table 0xd8">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 217,name = <<"Flow Table 0xd9">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 218,name = <<"Flow Table 0xda">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 219,name = <<"Flow Table 0xdb">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 220,name = <<"Flow Table 0xdc">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 221,name = <<"Flow Table 0xdd">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 222,name = <<"Flow Table 0xde">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 223,name = <<"Flow Table 0xdf">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 224,name = <<"Flow Table 0xe0">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 225,name = <<"Flow Table 0xe1">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 226,name = <<"Flow Table 0xe2">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 227,name = <<"Flow Table 0xe3">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 228,name = <<"Flow Table 0xe4">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 229,name = <<"Flow Table 0xe5">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 230,name = <<"Flow Table 0xe6">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 231,name = <<"Flow Table 0xe7">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 232,name = <<"Flow Table 0xe8">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 233,name = <<"Flow Table 0xe9">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 234,name = <<"Flow Table 0xea">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 235,name = <<"Flow Table 0xeb">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 236,name = <<"Flow Table 0xec">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 237,name = <<"Flow Table 0xed">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 238,name = <<"Flow Table 0xee">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 239,name = <<"Flow Table 0xef">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 240,name = <<"Flow Table 0xf0">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 241,name = <<"Flow Table 0xf1">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 242,name = <<"Flow Table 0xf2">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 243,name = <<"Flow Table 0xf3">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 244,name = <<"Flow Table 0xf4">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 245,name = <<"Flow Table 0xf5">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 246,name = <<"Flow Table 0xf6">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 247,name = <<"Flow Table 0xf7">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 248,name = <<"Flow Table 0xf8">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 249,name = <<"Flow Table 0xf9">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 250,name = <<"Flow Table 0xfa">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 251,name = <<"Flow Table 0xfb">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 252,name = <<"Flow Table 0xfc">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 253,name = <<"Flow Table 0xfd">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}, - #ofp_table_stats{ - table_id = 254,name = <<"Flow Table 0xfe">>, - match = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - wildcards = - [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, - vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, - tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, - ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], - write_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - apply_actions = - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, - push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, - set_nw_ttl,dec_nw_ttl,set_field], - write_setfields = [],apply_setfields = [], - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>, - instructions = - [goto_table,write_metadata,write_actions,apply_actions, - clear_actions], - config = controller,max_entries = 16777216,active_count = 0, - lookup_count = 0,matched_count = 0}]}, - - #ofp_port_stats_request{flags = [],port_no = any}, - #ofp_port_stats_reply{ - flags = [], - stats = - [#ofp_port_stats{ - port_no = 7,rx_packets = 0,tx_packets = 4,rx_bytes = 0, - tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, - rx_errors = 0, - tx_errors = 0,rx_frame_err = 0,rx_over_err = 0, - rx_crc_err = 0,collisions = 0}, - #ofp_port_stats{ - port_no = 6,rx_packets = 4,tx_packets = 4,rx_bytes = 336, - tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, - rx_errors = 0, - tx_errors = 0,rx_frame_err = 0,rx_over_err = 0, - rx_crc_err = 0,collisions = 0}]}, - #ofp_group_features_stats_request{flags = []}, - #ofp_group_features_stats_reply{ - flags = [], - types = [all,select,indirect,ff], - capabilities = [select_weight,chaining], - max_groups = {16777216,16777216,16777216,16777216}, - actions = - {[output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field]}}, - #ofp_group_desc_stats_request{}, - #ofp_group_desc_stats_reply{ - flags = [], - stats = - [#ofp_group_desc_stats{ - type = all,group_id = 1, - buckets = - [#ofp_bucket{ - weight = 1,watch_port = 1,watch_group = 1, - actions = - [#ofp_action_output{ - port = 2, max_len = no_buffer}]}]}]}, - #ofp_queue_get_config_request{port = any}, - #ofp_queue_get_config_reply{port = any,queues = [ - #ofp_packet_queue{queue_id = 99, port_no = 77, - properties = [ - #ofp_queue_prop_min_rate{rate = 10}, - #ofp_queue_prop_max_rate{rate = 900} - ] - }, - #ofp_packet_queue{queue_id = 88, port_no = 77, - properties = [ - #ofp_queue_prop_min_rate{rate = 100}, - #ofp_queue_prop_max_rate{rate = 200} - ] - } - ]}, - #ofp_queue_stats_request{flags = [],port_no = any, - queue_id = all}, - #ofp_queue_stats_reply{ - flags = [], - stats = - [#ofp_queue_stats{ - port_no = 7,queue_id = 1,tx_bytes = 0,tx_packets = 0, - tx_errors = 0}, - #ofp_queue_stats{ - port_no = 6,queue_id = 1,tx_bytes = 0,tx_packets = 0, - tx_errors = 0}, - #ofp_queue_stats{ - port_no = 7,queue_id = 2,tx_bytes = 0,tx_packets = 0, - tx_errors = 0}]}, - #ofp_port_status{ - reason = add, - desc = #ofp_port{ - port_no = 7,hw_addr = <<"\362\v\244\320?p">>, - name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x9d\xe3\x83\xbc\xe3\x83\x88">>, % "my port" in japanese, utf-8 - config = [], - state = [live], - curr = ['100mb_fd',copper,autoneg], - advertised = [copper,autoneg], - supported = ['100mb_fd',copper,autoneg], - peer = ['100mb_fd',copper,autoneg], - curr_speed = 5000,max_speed = 5000} - }, - #ofp_flow_removed{ - cookie = <<0,0,0,0,0,0,0,0>>, - priority = 65535,reason = idle_timeout,table_id = 0, - duration_sec = 3,duration_nsec = 48825000,idle_timeout = 3, - hard_timeout = 0,packet_count = 1,byte_count = 86, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}}, - #ofp_error_msg_experimenter{ - exp_type = 60000, - experimenter = 999999, - data = <<"jikken data">> - }, - skip, - skip, - skip, - skip, - skip, - skip, - skip, - skip, - skip, - skip, - skip, - skip, - skip, - skip, - skip, - skip, - skip, - #ofp_packet_in{ - buffer_id = 16#f0000000,reason = no_match,table_id = 200, - match = #ofp_match{fields = AllFields}, - data = <<>>}, - #ofp_flow_mod{ - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - table_id = 1,command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = any,out_group = any,flags = [], - match = #ofp_match{fields = AllFields}, - instructions = []}, - #ofp_group_stats_request{flags = [],group_id = all}, - #ofp_group_stats_reply{ - flags = [], - stats = - [#ofp_group_stats{ - group_id = 1,ref_count = 2,packet_count = 123, - byte_count = 12345, - bucket_stats = - [#ofp_bucket_counter{ - packet_count = 234,byte_count = 2345}]}]} - ], - lists:foldl(fun x:do/2, {3, 0}, List). diff --git a/ryu/tests/packet_data_generator/src/x4.erl b/ryu/tests/packet_data_generator/src/x4.erl deleted file mode 100644 index a749fbc8..00000000 --- a/ryu/tests/packet_data_generator/src/x4.erl +++ /dev/null @@ -1,2657 +0,0 @@ -%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -%% Copyright (C) 2013 YAMAMOTO Takashi -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -%% implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. - --module(x4). --export([x/0]). - --include_lib("of_protocol/include/of_protocol.hrl"). --include_lib("of_protocol/include/ofp_v4.hrl"). - -x() -> - AllFields = [ - #ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<5,6,7,8>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = in_phy_port, - has_mask = false, - value = <<1,2,3,4>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = metadata, - has_mask = false, - value = <<0,1,2,3,4,5,6,7>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_type, - has_mask = false, - value = <<8,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false,value = <<"\377\377\377\377\377\377">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = vlan_vid, - has_mask = false,value = <<999:13>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ip_dscp, - has_mask = false,value = <<9:6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ip_ecn, - has_mask = false,value = <<3:2>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ip_proto, - has_mask = false,value = <<99>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv4_src, - has_mask = false,value = <<1,2,3,4>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv4_dst, - has_mask = false,value = <<1,2,3,4>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = tcp_src, - has_mask = false,value = <<8080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = tcp_dst, - has_mask = false,value = <<18080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = udp_src, - has_mask = false,value = <<28080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = udp_dst, - has_mask = false,value = <<318080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = sctp_src, - has_mask = false,value = <<48080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = sctp_dst, - has_mask = false,value = <<518080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv4_type, - has_mask = false,value = <<100>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv4_code, - has_mask = false,value = <<101>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_op, - has_mask = false, - value = <<0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_spa, - has_mask = false, - value = <<10,0,0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tpa, - has_mask = false, - value = <<10,0,0,3>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_sha, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tha, - has_mask = false, - value = <<0,0,0,0,0,0>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_src, - has_mask = false, - % fe80::f00b:a4ff:fe48:28a5 - value = <<16#fe80000000000000f00ba4fffe4828a5:128>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_dst, - has_mask = false, - % fe80::f00b:a4ff:fe05:b7dc - value = <<16#fe80000000000000f00ba4fffe05b7dc:128>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_flabel, - has_mask = false, - value = <<16#84321:20>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv6_type, - has_mask = false, - value = <<200>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv6_code, - has_mask = false, - value = <<201>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_nd_target, - has_mask = false, - % fe80::a60:6eff:fe7f:74e7 - value = <<16#fe800000000000000a606efffe7f74e7:128>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_nd_sll, - has_mask = false, - value = <<666:48>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_nd_tll, - has_mask = false, - value = <<555:48>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = mpls_label, - has_mask = false, - value = <<16#98765:20>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = mpls_tc, - has_mask = false, - value = <<5:3>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = mpls_bos, - has_mask = false, - value = <<1:1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = pbb_isid, - has_mask = false, - value = <<16#abcdef:24>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = tunnel_id, - has_mask = false, - value = <<9,9,9,9,9,9,9,9>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_exthdr, - has_mask = false, - value = <<500:9>>, - mask = undefined}, - #ofp_field{ - class = {experimenter, onf},name = pbb_uca, - has_mask = false, - value = <<1:1>>, - mask = undefined}, - #ofp_field{ - class = nxm_1,name = 31, % tun_ipv4_src - has_mask = false, - value = <<1,2,3,4>>, - mask = undefined}, - #ofp_field{ - class = nxm_1,name = 32, % tun_ipv4_dst - has_mask = false, - value = <<1,2,3,4>>, - mask = undefined} - ], - List = [ - #ofp_desc_reply{flags = [], mfr_desc = <<"mfr">>, - hw_desc = <<"hw">>, sw_desc = <<"sw">>, - serial_num = <<"serial">>, - dp_desc = <<"dp">>}, - #ofp_packet_out{ - buffer_id = no_buffer,in_port = controller, - actions = - [#ofp_action_output{port = all,max_len = no_buffer}], - data = - <<242,11,164,208,63,112,242,11,164,125,248,234,8,0,69,0, - 0,84,248,26,0,0,255,1,175,139,10,0,0,1,10,0,0,2,8,0,2, - 8,247,96,0,0,49,214,2,0,0,0,0,0,171,141,45,49,0,0,0,0, - 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33, - 34,35,36,37,38,39,40,41,42,43,44,45,46,47,0,0,0,0,0,0, - 0,0>>}, - #ofp_flow_mod{ - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - table_id = 1,command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = any,out_group = any,flags = [], - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}, - instructions = - [#ofp_instruction_write_actions{ - actions = - [#ofp_action_set_field{ - field = #ofp_field{name = vlan_vid, - value = <<258:13>> }}, - #ofp_action_copy_ttl_out{}, - #ofp_action_copy_ttl_in{}, - #ofp_action_copy_ttl_in{}, - #ofp_action_pop_pbb{}, - #ofp_action_push_pbb{ethertype = 16#1234}, - #ofp_action_pop_mpls{ethertype= 16#9876}, - #ofp_action_push_mpls{ethertype = 16#8847}, - #ofp_action_pop_vlan{}, - #ofp_action_push_vlan{ethertype = 16#8100}, - #ofp_action_dec_mpls_ttl{}, - #ofp_action_set_mpls_ttl{mpls_ttl = 10}, - #ofp_action_dec_nw_ttl{}, - #ofp_action_set_nw_ttl{nw_ttl = 10}, - #ofp_action_experimenter{ - experimenter = 101, - data = <<0,1,2,3,4,5,6,7>>}, - #ofp_action_set_queue{queue_id = 3}, - #ofp_action_group{group_id = 99}, - #ofp_action_output{port = 6,max_len = no_buffer}]}, - #ofp_instruction_apply_actions{ - actions = - [#ofp_action_set_field{ - field = #ofp_field{name = eth_src, - value = <<1,2,3,4,5,6>> }}, - #ofp_action_set_field{ - field = #ofp_field{class = {experimenter, onf}, - name = pbb_uca, - value = <<1:1>> }}]}]}, - #ofp_flow_mod{ - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - table_id = 0,command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = any,out_group = any,flags = [], - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<0,0,0,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}, - instructions = - [#ofp_instruction_goto_table{table_id = 1}]}, - #ofp_packet_in{ - buffer_id = 2,reason = action,table_id = 1, - cookie = <<0,1,2,3,0,0,0,0>>, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<0,0,0,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_type, - has_mask = false, - value = <<8,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false,value = <<"\377\377\377\377\377\377">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_op, - has_mask = false, - value = <<0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_spa, - has_mask = false, - value = <<10,0,0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tpa, - has_mask = false, - value = <<10,0,0,3>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_sha, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tha, - has_mask = false, - value = <<0,0,0,0,0,0>>, - mask = undefined}]}, - data = - <<255,255,255,255,255,255,242,11,164,125,248,234,8,6,0, - 1,8,0,6,4,0,1,242,11,164,125,248,234,10,0,0,1,0,0,0,0, - 0,0,10,0,0,3>>}, - #ofp_features_request{}, - #ofp_features_reply{ - datapath_mac = <<8,96,110,127,116,231>>, - datapath_id = 0,n_buffers = 0,n_tables = 255, - auxiliary_id = 99, - capabilities = - [flow_stats,table_stats,port_stats,group_stats,queue_stats]}, - #ofp_set_config{flags = [],miss_send_len = 128}, - #ofp_get_config_request{}, - #ofp_get_config_reply{flags = [],miss_send_len = 128}, - #ofp_hello{elements = [{versionbitmap, [30, 10, 9, 3, 2, 1]}]}, - #ofp_flow_stats_request{ - flags = [],table_id = 0,out_port = any,out_group = any, - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - match = #ofp_match{fields = []}}, - #ofp_flow_stats_reply{ - flags = [], - body = - [#ofp_flow_stats{ - table_id = 0,duration_sec = 358, - duration_nsec = 115277000,priority = 65535, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 0,byte_count = 0, - match = #ofp_match{fields = []}, - instructions = []}, - #ofp_flow_stats{ - table_id = 0,duration_sec = 358, - duration_nsec = 115055000,priority = 65534, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 0,byte_count = 0, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_type, - has_mask = false, - value = <<8,6>>, - mask = undefined}]}, - instructions = - [#ofp_instruction_apply_actions{ - actions = - [#ofp_action_output{ - port = normal,max_len = 0}]}]}, - #ofp_flow_stats{ - table_id = 0,duration_sec = 316220, - duration_nsec = 511582000,priority = 123, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 3,byte_count = 238, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<0,0,0,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}, - instructions = - [#ofp_instruction_goto_table{table_id = 1}]}, - #ofp_flow_stats{ - table_id = 0,duration_sec = 313499, - duration_nsec = 980901000,priority = 0, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 1,byte_count = 98, - match = #ofp_match{fields = []}, - instructions = - [#ofp_instruction_write_actions{ - actions = - [#ofp_action_set_field{ - field = #ofp_field{name = vlan_vid, - value = <<258:13>> }}, - #ofp_action_copy_ttl_out{}, - #ofp_action_copy_ttl_in{}, - #ofp_action_copy_ttl_in{}, - #ofp_action_pop_pbb{}, - #ofp_action_push_pbb{ethertype = 16#1234}, - #ofp_action_pop_mpls{ethertype= 16#9876}, - #ofp_action_push_mpls{ethertype = 16#8847}, - #ofp_action_pop_vlan{}, - #ofp_action_push_vlan{ethertype = 16#8100}, - #ofp_action_dec_mpls_ttl{}, - #ofp_action_set_mpls_ttl{mpls_ttl = 10}, - #ofp_action_dec_nw_ttl{}, - #ofp_action_set_nw_ttl{nw_ttl = 10}, - #ofp_action_set_queue{queue_id = 3}, - #ofp_action_group{group_id = 99}, - #ofp_action_output{port = 6, - max_len = no_buffer}, - #ofp_action_experimenter{experimenter = 98765432, - data = <<"exp_data">>}, - #ofp_action_experimenter{experimenter = 8992, - data = <<"exp_data">>} - ]}, - #ofp_instruction_apply_actions{ - actions = - [#ofp_action_set_field{ - field = #ofp_field{name = eth_src, - value = <<1,2,3,4, - 5,6>> }}, - #ofp_action_set_field{ - field = #ofp_field{class = {experimenter, - onf}, - name = pbb_uca, - value = <<1:1>> }}]}, - #ofp_instruction_write_actions{ - actions = - [#ofp_action_output{ - port = controller, - max_len = no_buffer}]}]}]}, - #ofp_echo_request{ - data = <<"hoge">> - }, - #ofp_echo_reply{ - data = <<"hoge">> - }, - #ofp_error_msg{ - type = bad_action, - code = unsupported_order, - data = <<"fugafuga">> - }, - #ofp_experimenter{ - experimenter = 98765432, - exp_type = 123456789, - data = <<"nazo">> - }, - #ofp_barrier_request{}, - #ofp_barrier_reply{}, - #ofp_role_request{ - role = master, - generation_id = 16#f000f000f000f000}, - #ofp_role_reply{ - role = slave, - generation_id = 16#f000f000f000f000}, - - #ofp_group_mod{ - command = add,type = all,group_id = 1, - buckets = - [#ofp_bucket{ - weight = 1,watch_port = 1,watch_group = 1, - actions = - [#ofp_action_output{port = 2,max_len = no_buffer}]}]}, - #ofp_port_mod{port_no = 1, hw_addr = <<0,17,0,0,17,17>>, - config = [],mask = [], advertise = [fiber]}, - #ofp_table_mod{table_id = all}, - #ofp_desc_request{}, - #ofp_aggregate_stats_request{ - flags = [],table_id = all,out_port = any,out_group = any, - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - match = #ofp_match{fields = []}}, - #ofp_aggregate_stats_reply{flags = [],packet_count = 7, - byte_count = 574,flow_count = 6}, - #ofp_table_stats_request{}, - -#ofp_table_stats_reply{ - flags = [], - body = - [#ofp_table_stats{ - table_id = 0, - active_count = 4, lookup_count = 4,matched_count = 4}, - #ofp_table_stats{ - table_id = 1, - active_count = 4, lookup_count = 4,matched_count = 4}]}, - - #ofp_port_stats_request{flags = [],port_no = any}, - #ofp_port_stats_reply{ - flags = [], - body = - [#ofp_port_stats{ - port_no = 7,rx_packets = 0,tx_packets = 4,rx_bytes = 0, - tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, - rx_errors = 0, - tx_errors = 0,rx_frame_err = 0,rx_over_err = 0, - rx_crc_err = 0,collisions = 0}, - #ofp_port_stats{ - port_no = 6,rx_packets = 4,tx_packets = 4,rx_bytes = 336, - tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, - rx_errors = 0, - tx_errors = 0,rx_frame_err = 0,rx_over_err = 0, - rx_crc_err = 0,collisions = 0}]}, - #ofp_group_features_request{flags = []}, - #ofp_group_features_reply{ - flags = [], - types = [all,select,indirect,ff], - capabilities = [select_weight,chaining], - max_groups = {16777216,16777216,16777216,16777216}, - actions = - {[output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field]}}, - #ofp_group_desc_request{}, - #ofp_group_desc_reply{ - flags = [], - body = - [#ofp_group_desc_stats{ - type = all,group_id = 1, - buckets = - [#ofp_bucket{ - weight = 1,watch_port = 1,watch_group = 1, - actions = - [#ofp_action_output{ - port = 2, max_len = no_buffer}]}]}]}, - #ofp_queue_get_config_request{port = any}, - #ofp_queue_get_config_reply{port = any,queues = [ - #ofp_packet_queue{queue_id = 99, port_no = 77, - properties = [ - #ofp_queue_prop_min_rate{rate = 10}, - #ofp_queue_prop_max_rate{rate = 900}, - #ofp_queue_prop_experimenter{experimenter = 999, - data = <<>>} - ] - }, - #ofp_packet_queue{queue_id = 88, port_no = 77, - properties = [ - #ofp_queue_prop_min_rate{rate = 100}, - #ofp_queue_prop_max_rate{rate = 200}, - #ofp_queue_prop_experimenter{experimenter = 999, - data = <<1:8>>} - ] - }, - #ofp_packet_queue{queue_id = 77, port_no = 77, - properties = [ - #ofp_queue_prop_min_rate{rate = 200}, - #ofp_queue_prop_max_rate{rate = 400}, - #ofp_queue_prop_experimenter{experimenter = 999, - data = <<1:8,2:8>>} - ] - } - ]}, - #ofp_queue_stats_request{flags = [],port_no = any, - queue_id = all}, - #ofp_queue_stats_reply{ - flags = [], - body = - [#ofp_queue_stats{ - port_no = 7,queue_id = 1,tx_bytes = 0,tx_packets = 0, - tx_errors = 0}, - #ofp_queue_stats{ - port_no = 6,queue_id = 1,tx_bytes = 0,tx_packets = 0, - tx_errors = 0}, - #ofp_queue_stats{ - port_no = 7,queue_id = 2,tx_bytes = 0,tx_packets = 0, - tx_errors = 0}]}, - #ofp_port_status{ - reason = add, - desc = #ofp_port{ - port_no = 7,hw_addr = <<"\362\v\244\320?p">>, - name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x9d\xe3\x83\xbc\xe3\x83\x88">>, % "my port" in japanese, utf-8 - config = [], - state = [live], - curr = ['100mb_fd',copper,autoneg], - advertised = [copper,autoneg], - supported = ['100mb_fd',copper,autoneg], - peer = ['100mb_fd',copper,autoneg], - curr_speed = 5000,max_speed = 5000} - }, - #ofp_flow_removed{ - cookie = <<0,0,0,0,0,0,0,0>>, - priority = 65535,reason = idle_timeout,table_id = 0, - duration_sec = 3,duration_nsec = 48825000,idle_timeout = 3, - hard_timeout = 0,packet_count = 1,byte_count = 86, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}}, - #ofp_error_msg_experimenter{ - exp_type = 60000, - experimenter = 999999, - data = <<"jikken data">> - }, - #ofp_get_async_request{}, - #ofp_get_async_reply{ - packet_in_mask = {[no_match, invalid_ttl], [no_match]}, - port_status_mask = {[add, delete, modify], [add, delete]}, - flow_removed_mask = { - [idle_timeout, hard_timeout, delete, group_delete], - [idle_timeout, hard_timeout] - } - }, - #ofp_set_async{ - packet_in_mask = {[no_match, invalid_ttl], [no_match]}, - port_status_mask = {[add, delete, modify], [add, delete]}, - flow_removed_mask = { - [idle_timeout, hard_timeout, delete, group_delete], - [idle_timeout, hard_timeout] - } - }, - - #ofp_meter_mod{ - command = add, - flags = [pktps, burst, stats], - meter_id = 100, - bands = [ - #ofp_meter_band_drop{rate = 1000, burst_size = 10}, - #ofp_meter_band_dscp_remark{rate = 1000, burst_size = 10, - prec_level = 1}, - #ofp_meter_band_experimenter{rate = 1000, burst_size = 10, - experimenter = 999} - ] - }, - - #ofp_flow_mod{ - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - table_id = 1,command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = any,out_group = any,flags = [], - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}, - instructions = - [#ofp_instruction_meter{meter_id = 1}, - #ofp_instruction_write_actions{ - actions = - [#ofp_action_output{port = 6,max_len = no_buffer}]}]}, - - #ofp_meter_config_request{meter_id = all}, - #ofp_meter_config_reply{ - body = - [#ofp_meter_config{ - flags = [pktps,burst,stats], - meter_id = 100, - bands = - [#ofp_meter_band_drop{ - type = drop,rate = 1000,burst_size = 10}]}]}, - - #ofp_meter_stats_request{meter_id = all}, - #ofp_meter_stats_reply{ - body = - [#ofp_meter_stats{ - meter_id = 100,flow_count = 0,packet_in_count = 0, - byte_in_count = 0,duration_sec = 0,duration_nsec = 480000, - band_stats = - [#ofp_meter_band_stats{ - packet_band_count = 0,byte_band_count = 0}]}]}, - - #ofp_meter_features_request{}, - #ofp_meter_features_reply{max_meter = 16777216, - band_types = [drop,dscp_remark,experimenter], - capabilities = [kbps,pktps,burst,stats], - max_bands = 255,max_color = 0}, - #ofp_port_desc_request{flags = []}, - #ofp_port_desc_reply{flags = [], - body = [#ofp_port{port_no = 7,hw_addr = <<"\362\v\244\320?p">>, - name = <<"Port7">>,config = [], - state = [live], - curr = ['100mb_fd',copper,autoneg], - advertised = [copper,autoneg], - supported = ['100mb_fd',copper,autoneg], - peer = ['100mb_fd',copper,autoneg], - curr_speed = 5000,max_speed = 5000}, - #ofp_port{port_no = 6,hw_addr = <<"\362\v\244}\370\352">>, - name = <<"Port6">>,config = [], - state = [live], - curr = ['100mb_fd',copper,autoneg], - advertised = [copper,autoneg], - supported = ['100mb_fd',copper,autoneg], - peer = ['100mb_fd',copper,autoneg], - curr_speed = 5000,max_speed = 5000}]}, - - - #ofp_table_features_request{ - flags = [more], - body = - [#ofp_table_features{ - table_id = 0,name = <<"Flow Table 0x00">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, - 18,19,20,21,22,23,24,25,26,27,28,29,30,31, - 32,33,34,35,36,37,38,39,40,41,42,43,44,45, - 46,47,48,49,50,51,52,53,54,55,56,57,58,59, - 60,61,62,63,64,65,66,67,68,69,70,71,72,73, - 74,75,76,77,78,79,80,81,82,83,84,85,86,87, - 88,89,90,91,92,93,94,95,96,97,98,99,100, - 101,102,103,104,105,106,107,108,109,110, - 111,112,113,114,115,116,117,118,119,120, - 121,122,123,124,125,126,127,128,129,130, - 131,132,133,134,135,136,137,138,139,140, - 141,142,143,144,145,146,147,148,149,150, - 151,152,153,154,155,156,157,158,159,160, - 161,162,163,164,165,166,167,168,169,170, - 171,172,173,174,175,176,177,178,179,180, - 181,182,183,184,185,186,187,188,189,190, - 191,192,193,194,195,196,197,198,199,200, - 201,202,203,204,205,206,207,208,209,210, - 211,212,213,214,215,216,217,218,219,220, - 221,222,223,224,225,226,227,228,229,230, - 231,232,233,234,235,236,237,238,239,240, - 241,242,243,244,245,246,247,248,249,250, - 251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}, - #ofp_table_features{ - table_id = 1,name = <<"Flow Table 0x01">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, - 19,20,21,22,23,24,25,26,27,28,29,30,31,32, - 33,34,35,36,37,38,39,40,41,42,43,44,45,46, - 47,48,49,50,51,52,53,54,55,56,57,58,59,60, - 61,62,63,64,65,66,67,68,69,70,71,72,73,74, - 75,76,77,78,79,80,81,82,83,84,85,86,87,88, - 89,90,91,92,93,94,95,96,97,98,99,100,101, - 102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121, - 122,123,124,125,126,127,128,129,130,131, - 132,133,134,135,136,137,138,139,140,141, - 142,143,144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159,160,161, - 162,163,164,165,166,167,168,169,170,171, - 172,173,174,175,176,177,178,179,180,181, - 182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201, - 202,203,204,205,206,207,208,209,210,211, - 212,213,214,215,216,217,218,219,220,221, - 222,223,224,225,226,227,228,229,230,231, - 232,233,234,235,236,237,238,239,240,241, - 242,243,244,245,246,247,248,249,250,251, - 252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 2,name = <<"Flow Table 0x02">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, - 19,20,21,22,23,24,25,26,27,28,29,30,31,32, - 33,34,35,36,37,38,39,40,41,42,43,44,45,46, - 47,48,49,50,51,52,53,54,55,56,57,58,59,60, - 61,62,63,64,65,66,67,68,69,70,71,72,73,74, - 75,76,77,78,79,80,81,82,83,84,85,86,87,88, - 89,90,91,92,93,94,95,96,97,98,99,100,101, - 102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121, - 122,123,124,125,126,127,128,129,130,131, - 132,133,134,135,136,137,138,139,140,141, - 142,143,144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159,160,161, - 162,163,164,165,166,167,168,169,170,171, - 172,173,174,175,176,177,178,179,180,181, - 182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201, - 202,203,204,205,206,207,208,209,210,211, - 212,213,214,215,216,217,218,219,220,221, - 222,223,224,225,226,227,228,229,230,231, - 232,233,234,235,236,237,238,239,240,241, - 242,243,244,245,246,247,248,249,250,251, - 252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 3,name = <<"Flow Table 0x03">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, - 20,21,22,23,24,25,26,27,28,29,30,31,32,33, - 34,35,36,37,38,39,40,41,42,43,44,45,46,47, - 48,49,50,51,52,53,54,55,56,57,58,59,60,61, - 62,63,64,65,66,67,68,69,70,71,72,73,74,75, - 76,77,78,79,80,81,82,83,84,85,86,87,88,89, - 90,91,92,93,94,95,96,97,98,99,100,101,102, - 103,104,105,106,107,108,109,110,111,112, - 113,114,115,116,117,118,119,120,121,122, - 123,124,125,126,127,128,129,130,131,132, - 133,134,135,136,137,138,139,140,141,142, - 143,144,145,146,147,148,149,150,151,152, - 153,154,155,156,157,158,159,160,161,162, - 163,164,165,166,167,168,169,170,171,172, - 173,174,175,176,177,178,179,180,181,182, - 183,184,185,186,187,188,189,190,191,192, - 193,194,195,196,197,198,199,200,201,202, - 203,204,205,206,207,208,209,210,211,212, - 213,214,215,216,217,218,219,220,221,222, - 223,224,225,226,227,228,229,230,231,232, - 233,234,235,236,237,238,239,240,241,242, - 243,244,245,246,247,248,249,250,251,252, - 253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 4,name = <<"Flow Table 0x04">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, - 21,22,23,24,25,26,27,28,29,30,31,32,33,34, - 35,36,37,38,39,40,41,42,43,44,45,46,47,48, - 49,50,51,52,53,54,55,56,57,58,59,60,61,62, - 63,64,65,66,67,68,69,70,71,72,73,74,75,76, - 77,78,79,80,81,82,83,84,85,86,87,88,89,90, - 91,92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 5,name = <<"Flow Table 0x05">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, - 21,22,23,24,25,26,27,28,29,30,31,32,33,34, - 35,36,37,38,39,40,41,42,43,44,45,46,47,48, - 49,50,51,52,53,54,55,56,57,58,59,60,61,62, - 63,64,65,66,67,68,69,70,71,72,73,74,75,76, - 77,78,79,80,81,82,83,84,85,86,87,88,89,90, - 91,92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 6,name = <<"Flow Table 0x06">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, - 22,23,24,25,26,27,28,29,30,31,32,33,34,35, - 36,37,38,39,40,41,42,43,44,45,46,47,48,49, - 50,51,52,53,54,55,56,57,58,59,60,61,62,63, - 64,65,66,67,68,69,70,71,72,73,74,75,76,77, - 78,79,80,81,82,83,84,85,86,87,88,89,90,91, - 92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 7,name = <<"Flow Table 0x07">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, - 23,24,25,26,27,28,29,30,31,32,33,34,35,36, - 37,38,39,40,41,42,43,44,45,46,47,48,49,50, - 51,52,53,54,55,56,57,58,59,60,61,62,63,64, - 65,66,67,68,69,70,71,72,73,74,75,76,77,78, - 79,80,81,82,83,84,85,86,87,88,89,90,91,92, - 93,94,95,96,97,98,99,100,101,102,103,104, - 105,106,107,108,109,110,111,112,113,114, - 115,116,117,118,119,120,121,122,123,124, - 125,126,127,128,129,130,131,132,133,134, - 135,136,137,138,139,140,141,142,143,144, - 145,146,147,148,149,150,151,152,153,154, - 155,156,157,158,159,160,161,162,163,164, - 165,166,167,168,169,170,171,172,173,174, - 175,176,177,178,179,180,181,182,183,184, - 185,186,187,188,189,190,191,192,193,194, - 195,196,197,198,199,200,201,202,203,204, - 205,206,207,208,209,210,211,212,213,214, - 215,216,217,218,219,220,221,222,223,224, - 225,226,227,228,229,230,231,232,233,234, - 235,236,237,238,239,240,241,242,243,244, - 245,246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 8,name = <<"Flow Table 0x08">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [9,10,11,12,13,14,15,16,17,18,19,20,21,22, - 23,24,25,26,27,28,29,30,31,32,33,34,35,36, - 37,38,39,40,41,42,43,44,45,46,47,48,49,50, - 51,52,53,54,55,56,57,58,59,60,61,62,63,64, - 65,66,67,68,69,70,71,72,73,74,75,76,77,78, - 79,80,81,82,83,84,85,86,87,88,89,90,91,92, - 93,94,95,96,97,98,99,100,101,102,103,104, - 105,106,107,108,109,110,111,112,113,114, - 115,116,117,118,119,120,121,122,123,124, - 125,126,127,128,129,130,131,132,133,134, - 135,136,137,138,139,140,141,142,143,144, - 145,146,147,148,149,150,151,152,153,154, - 155,156,157,158,159,160,161,162,163,164, - 165,166,167,168,169,170,171,172,173,174, - 175,176,177,178,179,180,181,182,183,184, - 185,186,187,188,189,190,191,192,193,194, - 195,196,197,198,199,200,201,202,203,204, - 205,206,207,208,209,210,211,212,213,214, - 215,216,217,218,219,220,221,222,223,224, - 225,226,227,228,229,230,231,232,233,234, - 235,236,237,238,239,240,241,242,243,244, - 245,246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 9,name = <<"Flow Table 0x09">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [10,11,12,13,14,15,16,17,18,19,20,21,22,23, - 24,25,26,27,28,29,30,31,32,33,34,35,36,37, - 38,39,40,41,42,43,44,45,46,47,48,49,50,51, - 52,53,54,55,56,57,58,59,60,61,62,63,64,65, - 66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 80,81,82,83,84,85,86,87,88,89,90,91,92,93, - 94,95,96,97,98,99,100,101,102,103,104,105, - 106,107,108,109,110,111,112,113,114,115, - 116,117,118,119,120,121,122,123,124,125, - 126,127,128,129,130,131,132,133,134,135, - 136,137,138,139,140,141,142,143,144,145, - 146,147,148,149,150,151,152,153,154,155, - 156,157,158,159,160,161,162,163,164,165, - 166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185, - 186,187,188,189,190,191,192,193,194,195, - 196,197,198,199,200,201,202,203,204,205, - 206,207,208,209,210,211,212,213,214,215, - 216,217,218,219,220,221,222,223,224,225, - 226,227,228,229,230,231,232,233,234,235, - 236,237,238,239,240,241,242,243,244,245, - 246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}]}, - #ofp_table_features_reply{ - flags = [more], - body = - [#ofp_table_features{ - table_id = 0,name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x86\xe3\x83\xbc\xe3\x83\x96\xe3\x83\xab">>, % "my table" in japanese, utf-8 - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, - 18,19,20,21,22,23,24,25,26,27,28,29,30,31, - 32,33,34,35,36,37,38,39,40,41,42,43,44,45, - 46,47,48,49,50,51,52,53,54,55,56,57,58,59, - 60,61,62,63,64,65,66,67,68,69,70,71,72,73, - 74,75,76,77,78,79,80,81,82,83,84,85,86,87, - 88,89,90,91,92,93,94,95,96,97,98,99,100, - 101,102,103,104,105,106,107,108,109,110, - 111,112,113,114,115,116,117,118,119,120, - 121,122,123,124,125,126,127,128,129,130, - 131,132,133,134,135,136,137,138,139,140, - 141,142,143,144,145,146,147,148,149,150, - 151,152,153,154,155,156,157,158,159,160, - 161,162,163,164,165,166,167,168,169,170, - 171,172,173,174,175,176,177,178,179,180, - 181,182,183,184,185,186,187,188,189,190, - 191,192,193,194,195,196,197,198,199,200, - 201,202,203,204,205,206,207,208,209,210, - 211,212,213,214,215,216,217,218,219,220, - 221,222,223,224,225,226,227,228,229,230, - 231,232,233,234,235,236,237,238,239,240, - 241,242,243,244,245,246,247,248,249,250, - 251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}, - #ofp_table_features{ - table_id = 1,name = <<"Flow Table 0x01">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, - 19,20,21,22,23,24,25,26,27,28,29,30,31,32, - 33,34,35,36,37,38,39,40,41,42,43,44,45,46, - 47,48,49,50,51,52,53,54,55,56,57,58,59,60, - 61,62,63,64,65,66,67,68,69,70,71,72,73,74, - 75,76,77,78,79,80,81,82,83,84,85,86,87,88, - 89,90,91,92,93,94,95,96,97,98,99,100,101, - 102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121, - 122,123,124,125,126,127,128,129,130,131, - 132,133,134,135,136,137,138,139,140,141, - 142,143,144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159,160,161, - 162,163,164,165,166,167,168,169,170,171, - 172,173,174,175,176,177,178,179,180,181, - 182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201, - 202,203,204,205,206,207,208,209,210,211, - 212,213,214,215,216,217,218,219,220,221, - 222,223,224,225,226,227,228,229,230,231, - 232,233,234,235,236,237,238,239,240,241, - 242,243,244,245,246,247,248,249,250,251, - 252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 2,name = <<"Flow Table 0x02">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, - 19,20,21,22,23,24,25,26,27,28,29,30,31,32, - 33,34,35,36,37,38,39,40,41,42,43,44,45,46, - 47,48,49,50,51,52,53,54,55,56,57,58,59,60, - 61,62,63,64,65,66,67,68,69,70,71,72,73,74, - 75,76,77,78,79,80,81,82,83,84,85,86,87,88, - 89,90,91,92,93,94,95,96,97,98,99,100,101, - 102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121, - 122,123,124,125,126,127,128,129,130,131, - 132,133,134,135,136,137,138,139,140,141, - 142,143,144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159,160,161, - 162,163,164,165,166,167,168,169,170,171, - 172,173,174,175,176,177,178,179,180,181, - 182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201, - 202,203,204,205,206,207,208,209,210,211, - 212,213,214,215,216,217,218,219,220,221, - 222,223,224,225,226,227,228,229,230,231, - 232,233,234,235,236,237,238,239,240,241, - 242,243,244,245,246,247,248,249,250,251, - 252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 3,name = <<"Flow Table 0x03">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, - 20,21,22,23,24,25,26,27,28,29,30,31,32,33, - 34,35,36,37,38,39,40,41,42,43,44,45,46,47, - 48,49,50,51,52,53,54,55,56,57,58,59,60,61, - 62,63,64,65,66,67,68,69,70,71,72,73,74,75, - 76,77,78,79,80,81,82,83,84,85,86,87,88,89, - 90,91,92,93,94,95,96,97,98,99,100,101,102, - 103,104,105,106,107,108,109,110,111,112, - 113,114,115,116,117,118,119,120,121,122, - 123,124,125,126,127,128,129,130,131,132, - 133,134,135,136,137,138,139,140,141,142, - 143,144,145,146,147,148,149,150,151,152, - 153,154,155,156,157,158,159,160,161,162, - 163,164,165,166,167,168,169,170,171,172, - 173,174,175,176,177,178,179,180,181,182, - 183,184,185,186,187,188,189,190,191,192, - 193,194,195,196,197,198,199,200,201,202, - 203,204,205,206,207,208,209,210,211,212, - 213,214,215,216,217,218,219,220,221,222, - 223,224,225,226,227,228,229,230,231,232, - 233,234,235,236,237,238,239,240,241,242, - 243,244,245,246,247,248,249,250,251,252, - 253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 4,name = <<"Flow Table 0x04">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, - 21,22,23,24,25,26,27,28,29,30,31,32,33,34, - 35,36,37,38,39,40,41,42,43,44,45,46,47,48, - 49,50,51,52,53,54,55,56,57,58,59,60,61,62, - 63,64,65,66,67,68,69,70,71,72,73,74,75,76, - 77,78,79,80,81,82,83,84,85,86,87,88,89,90, - 91,92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 5,name = <<"Flow Table 0x05">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, - 21,22,23,24,25,26,27,28,29,30,31,32,33,34, - 35,36,37,38,39,40,41,42,43,44,45,46,47,48, - 49,50,51,52,53,54,55,56,57,58,59,60,61,62, - 63,64,65,66,67,68,69,70,71,72,73,74,75,76, - 77,78,79,80,81,82,83,84,85,86,87,88,89,90, - 91,92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 6,name = <<"Flow Table 0x06">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, - 22,23,24,25,26,27,28,29,30,31,32,33,34,35, - 36,37,38,39,40,41,42,43,44,45,46,47,48,49, - 50,51,52,53,54,55,56,57,58,59,60,61,62,63, - 64,65,66,67,68,69,70,71,72,73,74,75,76,77, - 78,79,80,81,82,83,84,85,86,87,88,89,90,91, - 92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 7,name = <<"Flow Table 0x07">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, - 23,24,25,26,27,28,29,30,31,32,33,34,35,36, - 37,38,39,40,41,42,43,44,45,46,47,48,49,50, - 51,52,53,54,55,56,57,58,59,60,61,62,63,64, - 65,66,67,68,69,70,71,72,73,74,75,76,77,78, - 79,80,81,82,83,84,85,86,87,88,89,90,91,92, - 93,94,95,96,97,98,99,100,101,102,103,104, - 105,106,107,108,109,110,111,112,113,114, - 115,116,117,118,119,120,121,122,123,124, - 125,126,127,128,129,130,131,132,133,134, - 135,136,137,138,139,140,141,142,143,144, - 145,146,147,148,149,150,151,152,153,154, - 155,156,157,158,159,160,161,162,163,164, - 165,166,167,168,169,170,171,172,173,174, - 175,176,177,178,179,180,181,182,183,184, - 185,186,187,188,189,190,191,192,193,194, - 195,196,197,198,199,200,201,202,203,204, - 205,206,207,208,209,210,211,212,213,214, - 215,216,217,218,219,220,221,222,223,224, - 225,226,227,228,229,230,231,232,233,234, - 235,236,237,238,239,240,241,242,243,244, - 245,246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 8,name = <<"Flow Table 0x08">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [9,10,11,12,13,14,15,16,17,18,19,20,21,22, - 23,24,25,26,27,28,29,30,31,32,33,34,35,36, - 37,38,39,40,41,42,43,44,45,46,47,48,49,50, - 51,52,53,54,55,56,57,58,59,60,61,62,63,64, - 65,66,67,68,69,70,71,72,73,74,75,76,77,78, - 79,80,81,82,83,84,85,86,87,88,89,90,91,92, - 93,94,95,96,97,98,99,100,101,102,103,104, - 105,106,107,108,109,110,111,112,113,114, - 115,116,117,118,119,120,121,122,123,124, - 125,126,127,128,129,130,131,132,133,134, - 135,136,137,138,139,140,141,142,143,144, - 145,146,147,148,149,150,151,152,153,154, - 155,156,157,158,159,160,161,162,163,164, - 165,166,167,168,169,170,171,172,173,174, - 175,176,177,178,179,180,181,182,183,184, - 185,186,187,188,189,190,191,192,193,194, - 195,196,197,198,199,200,201,202,203,204, - 205,206,207,208,209,210,211,212,213,214, - 215,216,217,218,219,220,221,222,223,224, - 225,226,227,228,229,230,231,232,233,234, - 235,236,237,238,239,240,241,242,243,244, - 245,246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 9,name = <<"Flow Table 0x09">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [10,11,12,13,14,15,16,17,18,19,20,21,22,23, - 24,25,26,27,28,29,30,31,32,33,34,35,36,37, - 38,39,40,41,42,43,44,45,46,47,48,49,50,51, - 52,53,54,55,56,57,58,59,60,61,62,63,64,65, - 66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 80,81,82,83,84,85,86,87,88,89,90,91,92,93, - 94,95,96,97,98,99,100,101,102,103,104,105, - 106,107,108,109,110,111,112,113,114,115, - 116,117,118,119,120,121,122,123,124,125, - 126,127,128,129,130,131,132,133,134,135, - 136,137,138,139,140,141,142,143,144,145, - 146,147,148,149,150,151,152,153,154,155, - 156,157,158,159,160,161,162,163,164,165, - 166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185, - 186,187,188,189,190,191,192,193,194,195, - 196,197,198,199,200,201,202,203,204,205, - 206,207,208,209,210,211,212,213,214,215, - 216,217,218,219,220,221,222,223,224,225, - 226,227,228,229,230,231,232,233,234,235, - 236,237,238,239,240,241,242,243,244,245, - 246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}]}, - #ofp_group_stats_request{flags = [],group_id = all}, - #ofp_group_stats_reply{ - flags = [], - body = - [#ofp_group_stats{ - group_id = 1,ref_count = 2,packet_count = 123, - byte_count = 12345,duration_sec = 9, - duration_nsec = 609036000, - bucket_stats = - [#ofp_bucket_counter{ - packet_count = 234,byte_count = 2345}]}]}, - #ofp_packet_in{ - buffer_id = 16#f0000000,reason = no_match,table_id = 200, - cookie = <<0,1,2,3,0,0,0,0>>, - match = #ofp_match{fields = AllFields}, - data = <<>>}, - #ofp_flow_mod{ - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - table_id = 1,command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = any,out_group = any,flags = [], - match = #ofp_match{fields = AllFields}, - instructions = []}, - #ofp_experimenter_request{ - experimenter = 16#deadbeaf, - exp_type = 16#cafe8888, - data = <<"hogehoge">> - }, - #ofp_experimenter_reply{ - experimenter = 16#deadbeaf, - exp_type = 16#cafe7777, - data = <<"testdata99999999">> - }, - #onf_flow_monitor_request{ - flags = [], - body = [ - #onf_flow_monitor{ - id = 100000000, - flags = [initial, add, delete, modify], - out_port = 22, - table_id = 33, - fields = [] - }, - #onf_flow_monitor{ - id = 999, - flags = [initial, actions, own], - out_port = any, - table_id = all, - fields = AllFields - } - ] - } - ], - lists:foldl(fun x:do/2, {4, 0}, List). diff --git a/ryu/tests/packet_data_generator/src/x5.erl b/ryu/tests/packet_data_generator/src/x5.erl deleted file mode 100644 index c9fa429b..00000000 --- a/ryu/tests/packet_data_generator/src/x5.erl +++ /dev/null @@ -1,3024 +0,0 @@ -%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -%% Copyright (C) 2013 YAMAMOTO Takashi -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -%% implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. - --module(x5). --export([x/0]). - --include_lib("of_protocol/include/of_protocol.hrl"). --include_lib("of_protocol/include/ofp_v5.hrl"). - -x() -> - AllFields = [ - #ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<5,6,7,8>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = in_phy_port, - has_mask = false, - value = <<1,2,3,4>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = metadata, - has_mask = false, - value = <<0,1,2,3,4,5,6,7>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_type, - has_mask = false, - value = <<8,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false,value = <<"\377\377\377\377\377\377">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = vlan_vid, - has_mask = false,value = <<999:13>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ip_dscp, - has_mask = false,value = <<9:6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ip_ecn, - has_mask = false,value = <<3:2>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ip_proto, - has_mask = false,value = <<99>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv4_src, - has_mask = false,value = <<1,2,3,4>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv4_dst, - has_mask = false,value = <<1,2,3,4>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = tcp_src, - has_mask = false,value = <<8080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = tcp_dst, - has_mask = false,value = <<18080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = udp_src, - has_mask = false,value = <<28080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = udp_dst, - has_mask = false,value = <<318080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = sctp_src, - has_mask = false,value = <<48080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = sctp_dst, - has_mask = false,value = <<518080:16>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv4_type, - has_mask = false,value = <<100>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv4_code, - has_mask = false,value = <<101>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_op, - has_mask = false, - value = <<0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_spa, - has_mask = false, - value = <<10,0,0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tpa, - has_mask = false, - value = <<10,0,0,3>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_sha, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tha, - has_mask = false, - value = <<0,0,0,0,0,0>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_src, - has_mask = false, - % fe80::f00b:a4ff:fe48:28a5 - value = <<16#fe80000000000000f00ba4fffe4828a5:128>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_dst, - has_mask = false, - % fe80::f00b:a4ff:fe05:b7dc - value = <<16#fe80000000000000f00ba4fffe05b7dc:128>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_flabel, - has_mask = false, - value = <<16#84321:20>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv6_type, - has_mask = false, - value = <<200>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = icmpv6_code, - has_mask = false, - value = <<201>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_nd_target, - has_mask = false, - % fe80::a60:6eff:fe7f:74e7 - value = <<16#fe800000000000000a606efffe7f74e7:128>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_nd_sll, - has_mask = false, - value = <<666:48>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_nd_tll, - has_mask = false, - value = <<555:48>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = mpls_label, - has_mask = false, - value = <<16#98765:20>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = mpls_tc, - has_mask = false, - value = <<5:3>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = mpls_bos, - has_mask = false, - value = <<1:1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = pbb_isid, - has_mask = false, - value = <<16#abcdef:24>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = tunnel_id, - has_mask = false, - value = <<9,9,9,9,9,9,9,9>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = ipv6_exthdr, - has_mask = false, - value = <<500:9>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = pbb_uca, - has_mask = false, - value = <<1:1>>, - mask = undefined} - ], - List = [ - #ofp_desc_reply{flags = [], mfr_desc = <<"mfr">>, - hw_desc = <<"hw">>, sw_desc = <<"sw">>, - serial_num = <<"serial">>, - dp_desc = <<"dp">>}, - #ofp_packet_out{ - buffer_id = no_buffer,in_port = controller, - actions = - [#ofp_action_output{port = all,max_len = no_buffer}], - data = - <<242,11,164,208,63,112,242,11,164,125,248,234,8,0,69,0, - 0,84,248,26,0,0,255,1,175,139,10,0,0,1,10,0,0,2,8,0,2, - 8,247,96,0,0,49,214,2,0,0,0,0,0,171,141,45,49,0,0,0,0, - 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33, - 34,35,36,37,38,39,40,41,42,43,44,45,46,47,0,0,0,0,0,0, - 0,0>>}, - #ofp_flow_mod{ - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - table_id = 1,command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = any,out_group = any,flags = [], - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}, - instructions = - [#ofp_instruction_write_actions{ - actions = - [#ofp_action_set_field{ - field = #ofp_field{name = vlan_vid, - value = <<258:13>> }}, - #ofp_action_copy_ttl_out{}, - #ofp_action_copy_ttl_in{}, - #ofp_action_copy_ttl_in{}, - #ofp_action_pop_pbb{}, - #ofp_action_push_pbb{ethertype = 16#1234}, - #ofp_action_pop_mpls{ethertype= 16#9876}, - #ofp_action_push_mpls{ethertype = 16#8847}, - #ofp_action_pop_vlan{}, - #ofp_action_push_vlan{ethertype = 16#8100}, - #ofp_action_dec_mpls_ttl{}, - #ofp_action_set_mpls_ttl{mpls_ttl = 10}, - #ofp_action_dec_nw_ttl{}, - #ofp_action_set_nw_ttl{nw_ttl = 10}, - #ofp_action_experimenter{ - experimenter = 101, - data = <<0,1,2,3,4,5,6,7>>}, - #ofp_action_set_queue{queue_id = 3}, - #ofp_action_group{group_id = 99}, - #ofp_action_output{port = 6,max_len = no_buffer}]}, - #ofp_instruction_apply_actions{ - actions = - [#ofp_action_set_field{ - field = #ofp_field{name = eth_src, - value = <<1,2,3,4,5,6>> }}, - #ofp_action_set_field{ - field = #ofp_field{name = pbb_uca, - value = <<1:1>> }}]}]}, - #ofp_flow_mod{ - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - table_id = 0,command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = any,out_group = any,flags = [], - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<0,0,0,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}, - instructions = - [#ofp_instruction_goto_table{table_id = 1}]}, - #ofp_packet_in{ - buffer_id = 2,reason = action_set,table_id = 1, - cookie = <<0,1,2,3,0,0,0,0>>, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<0,0,0,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_type, - has_mask = false, - value = <<8,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false,value = <<"\377\377\377\377\377\377">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_op, - has_mask = false, - value = <<0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_spa, - has_mask = false, - value = <<10,0,0,1>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tpa, - has_mask = false, - value = <<10,0,0,3>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_sha, - has_mask = false,value = <<"\362\v\244}\370\352">>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = arp_tha, - has_mask = false, - value = <<0,0,0,0,0,0>>, - mask = undefined}]}, - data = - <<255,255,255,255,255,255,242,11,164,125,248,234,8,6,0, - 1,8,0,6,4,0,1,242,11,164,125,248,234,10,0,0,1,0,0,0,0, - 0,0,10,0,0,3>>}, - #ofp_features_request{}, - #ofp_features_reply{ - datapath_mac = <<8,96,110,127,116,231>>, - datapath_id = 0,n_buffers = 0,n_tables = 255, - auxiliary_id = 99, - capabilities = - [flow_stats,table_stats,port_stats,group_stats,queue_stats]}, - #ofp_set_config{flags = [],miss_send_len = 128}, - #ofp_get_config_request{}, - #ofp_get_config_reply{flags = [],miss_send_len = 128}, - #ofp_hello{elements = [{versionbitmap, [30, 10, 9, 3, 2, 1]}]}, - #ofp_flow_stats_request{ - flags = [],table_id = 0,out_port = any,out_group = any, - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - match = #ofp_match{fields = []}}, - #ofp_flow_stats_reply{ - flags = [], - body = - [#ofp_flow_stats{ - table_id = 0,duration_sec = 358, - duration_nsec = 115277000,priority = 65535, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 0,byte_count = 0, - match = #ofp_match{fields = []}, - instructions = []}, - #ofp_flow_stats{ - table_id = 0,duration_sec = 358, - duration_nsec = 115055000,priority = 65534, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 0,byte_count = 0, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_type, - has_mask = false, - value = <<8,6>>, - mask = undefined}]}, - instructions = - [#ofp_instruction_apply_actions{ - actions = - [#ofp_action_output{ - port = normal,max_len = 0}]}]}, - #ofp_flow_stats{ - table_id = 0,duration_sec = 316220, - duration_nsec = 511582000,priority = 123, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 3,byte_count = 238, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = in_port, - has_mask = false, - value = <<0,0,0,6>>, - mask = undefined}, - #ofp_field{ - class = openflow_basic,name = eth_src, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}, - instructions = - [#ofp_instruction_goto_table{table_id = 1}]}, - #ofp_flow_stats{ - table_id = 0,duration_sec = 313499, - duration_nsec = 980901000,priority = 0, - idle_timeout = 0,hard_timeout = 0, - cookie = <<0,0,0,0,0,0,0,0>>, - packet_count = 1,byte_count = 98, - match = #ofp_match{fields = []}, - instructions = - [#ofp_instruction_write_actions{ - actions = - [#ofp_action_set_field{ - field = #ofp_field{name = vlan_vid, - value = <<258:13>> }}, - #ofp_action_copy_ttl_out{}, - #ofp_action_copy_ttl_in{}, - #ofp_action_copy_ttl_in{}, - #ofp_action_pop_pbb{}, - #ofp_action_push_pbb{ethertype = 16#1234}, - #ofp_action_pop_mpls{ethertype= 16#9876}, - #ofp_action_push_mpls{ethertype = 16#8847}, - #ofp_action_pop_vlan{}, - #ofp_action_push_vlan{ethertype = 16#8100}, - #ofp_action_dec_mpls_ttl{}, - #ofp_action_set_mpls_ttl{mpls_ttl = 10}, - #ofp_action_dec_nw_ttl{}, - #ofp_action_set_nw_ttl{nw_ttl = 10}, - #ofp_action_set_queue{queue_id = 3}, - #ofp_action_group{group_id = 99}, - #ofp_action_output{port = 6, - max_len = no_buffer}, - #ofp_action_experimenter{experimenter = 98765432, - data = <<"exp_data">>}, - #ofp_action_experimenter{experimenter = 8992, - data = <<"exp_data">>} - ]}, - #ofp_instruction_apply_actions{ - actions = - [#ofp_action_set_field{ - field = #ofp_field{name = eth_src, - value = <<1,2,3,4, - 5,6>> }}, - #ofp_action_set_field{ - field = #ofp_field{name = pbb_uca, - value = <<1:1>> }}]}, - #ofp_instruction_write_actions{ - actions = - [#ofp_action_output{ - port = controller, - max_len = no_buffer}]}]}]}, - #ofp_echo_request{ - data = <<"hoge">> - }, - #ofp_echo_reply{ - data = <<"hoge">> - }, - #ofp_error_msg{ - type = bad_action, - code = unsupported_order, - data = <<"fugafuga">> - }, - #ofp_experimenter{ - experimenter = 98765432, - exp_type = 123456789, - data = <<"nazo">> - }, - #ofp_barrier_request{}, - #ofp_barrier_reply{}, - #ofp_role_request{ - role = master, - generation_id = 16#f000f000f000f000}, - #ofp_role_reply{ - role = slave, - generation_id = 16#f000f000f000f000}, - - #ofp_group_mod{ - command = add,type = all,group_id = 1, - buckets = - [#ofp_bucket{ - weight = 1,watch_port = 1,watch_group = 1, - actions = - [#ofp_action_output{port = 2,max_len = no_buffer}]}]}, - #ofp_port_mod{port_no = 1, hw_addr = <<0,17,0,0,17,17>>, - config = [],mask = [], - properties = - [#ofp_port_mod_prop_ethernet{advertise = [fiber]}, - #ofp_port_mod_prop_optical{ - configure = [rx_tune, tx_tune], - freq_lmda = 1500, - fl_offset = 2000, - grid_span = 3000, - tx_pwr = 300}, - #ofp_port_mod_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_port_mod_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_port_mod_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}, - #ofp_table_mod{ - properties = - [#ofp_table_mod_prop_eviction{flags = []}, - #ofp_table_mod_prop_vacancy{ - vacancy = 0, - vacancy_down = 0, - vacancy_up = 0}, - #ofp_table_mod_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_table_mod_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_table_mod_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}], - table_id = all}, - #ofp_desc_request{}, - #ofp_aggregate_stats_request{ - flags = [],table_id = all,out_port = any,out_group = any, - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - match = #ofp_match{fields = []}}, - #ofp_aggregate_stats_reply{flags = [],packet_count = 7, - byte_count = 574,flow_count = 6}, - #ofp_table_stats_request{}, - -#ofp_table_stats_reply{ - flags = [], - body = - [#ofp_table_stats{ - table_id = 0, - active_count = 4, lookup_count = 4,matched_count = 4}, - #ofp_table_stats{ - table_id = 1, - active_count = 4, lookup_count = 4,matched_count = 4}]}, - - #ofp_port_stats_request{flags = [],port_no = any}, - #ofp_port_stats_reply{ - flags = [], - body = - [#ofp_port_stats{ - port_no = 7,rx_packets = 0,tx_packets = 4,rx_bytes = 0, - tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, - rx_errors = 0, tx_errors = 0, - properties = - [#ofp_port_stats_prop_ethernet{ - rx_frame_err = 0,rx_over_err = 0, - rx_crc_err = 0,collisions = 0}, - #ofp_port_stats_prop_optical{ - flags = [rx_tune,tx_tune], - tx_freq_lmda = 1500, - tx_offset = 700, - tx_grid_span = 500, - rx_freq_lmda = 1500, - rx_offset = 700, - rx_grid_span = 500, - tx_pwr = 2000, - rx_pwr = 2000, - bias_current = 300, - temperature = 273}, - #ofp_port_stats_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_port_stats_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_port_stats_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}, - #ofp_port_stats{ - port_no = 6,rx_packets = 4,tx_packets = 4,rx_bytes = 336, - tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, - rx_errors = 0, tx_errors = 0, - properties = - [#ofp_port_stats_prop_ethernet{ - rx_frame_err = 0,rx_over_err = 0, - rx_crc_err = 0,collisions = 0}]}]}, - #ofp_group_features_request{flags = []}, - #ofp_group_features_reply{ - flags = [], - types = [all,select,indirect,ff], - capabilities = [select_weight,chaining], - max_groups = {16777216,16777216,16777216,16777216}, - actions = - {[output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], - [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field]}}, - #ofp_group_desc_request{}, - #ofp_group_desc_reply{ - flags = [], - body = - [#ofp_group_desc_stats{ - type = all,group_id = 1, - buckets = - [#ofp_bucket{ - weight = 1,watch_port = 1,watch_group = 1, - actions = - [#ofp_action_output{ - port = 2, max_len = no_buffer}]}]}]}, - #ofp_queue_stats_request{flags = [],port_no = any, - queue_id = all}, - #ofp_queue_stats_reply{ - flags = [], - body = - [#ofp_queue_stats{ - port_no = 7,queue_id = 1,tx_bytes = 0,tx_packets = 0, - tx_errors = 0, - properties = - [#ofp_queue_stats_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_queue_stats_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_queue_stats_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}, - #ofp_queue_stats{ - port_no = 6,queue_id = 1,tx_bytes = 0,tx_packets = 0, - tx_errors = 0}, - #ofp_queue_stats{ - port_no = 7,queue_id = 2,tx_bytes = 0,tx_packets = 0, - tx_errors = 0}]}, - #ofp_port_status{ - reason = add, - desc = #ofp_port{ - port_no = 7,hw_addr = <<"\362\v\244\320?p">>, - name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x9d\xe3\x83\xbc\xe3\x83\x88">>, % "my port" in japanese, utf-8 - config = [], - state = [live], - properties = - [#ofp_port_desc_prop_ethernet{ - curr = ['100mb_fd',copper,autoneg], - advertised = [copper,autoneg], - supported = ['100mb_fd',copper,autoneg], - peer = ['100mb_fd',copper,autoneg], - curr_speed = 5000,max_speed = 5000}, - #ofp_port_desc_prop_optical{ - supported = [rx_tune], - tx_min_freq_lmda = 1000, - tx_max_freq_lmda = 2000, - tx_grid_freq_lmda = 1500, - rx_min_freq_lmda = 1000, - rx_max_freq_lmda = 2000, - rx_grid_freq_lmda = 1500, - tx_pwr_min = 1000, - tx_pwr_max = 2000}, - #ofp_port_desc_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_port_desc_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_port_desc_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]} - }, - #ofp_flow_removed{ - cookie = <<0,0,0,0,0,0,0,0>>, - priority = 65535,reason = idle_timeout,table_id = 0, - duration_sec = 3,duration_nsec = 48825000,idle_timeout = 3, - hard_timeout = 0,packet_count = 1,byte_count = 86, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}}, - #ofp_error_msg_experimenter{ - exp_type = 60000, - experimenter = 999999, - data = <<"jikken data">> - }, - #ofp_get_async_request{}, - #ofp_get_async_reply{ - properties = - [#ofp_async_config_prop_reasons{ - type = packet_in_slave, - mask = [table_miss, apply_action]}, - #ofp_async_config_prop_reasons{ - type = packet_in_master, - mask = [table_miss, apply_action]}, - #ofp_async_config_prop_reasons{ - type = port_status_slave, - mask = [add, delete]}, - #ofp_async_config_prop_reasons{ - type = port_status_master, - mask = [add, delete]}, - #ofp_async_config_prop_reasons{ - type = flow_removed_slave, - mask = [idle_timeout, hard_timeout]}, - #ofp_async_config_prop_reasons{ - type = flow_removed_master, - mask = [idle_timeout, hard_timeout]}, - #ofp_async_config_prop_reasons{ - type = role_status_slave, - mask = [master_request, config]}, - #ofp_async_config_prop_reasons{ - type = role_status_master, - mask = [master_request, config]}, - #ofp_async_config_prop_reasons{ - type = table_status_slave, - mask = [vacancy_down, vacancy_up]}, - #ofp_async_config_prop_reasons{ - type = table_status_master, - mask = [vacancy_down, vacancy_up]}, - #ofp_async_config_prop_reasons{ - type = requestforward_slave, - mask = [group_mod, meter_mod]}, - #ofp_async_config_prop_reasons{ - type = requestforward_master, - mask = [group_mod, meter_mod]}, - #ofp_async_config_prop_experimenter{ - type = experimenter_slave, - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_async_config_prop_experimenter{ - type = experimenter_master, - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_async_config_prop_experimenter{ - type = experimenter_master, - experimenter = 101, - exp_type = 2, - data = <<1:32, 2:32>>}]}, - #ofp_set_async{ - properties = - [#ofp_async_config_prop_reasons{ - type = packet_in_slave, - mask = [table_miss, apply_action]}, - #ofp_async_config_prop_reasons{ - type = packet_in_master, - mask = [table_miss, apply_action]}, - #ofp_async_config_prop_reasons{ - type = port_status_slave, - mask = [add, delete]}, - #ofp_async_config_prop_reasons{ - type = port_status_master, - mask = [add, delete]}, - #ofp_async_config_prop_reasons{ - type = flow_removed_slave, - mask = [idle_timeout, hard_timeout]}, - #ofp_async_config_prop_reasons{ - type = flow_removed_master, - mask = [idle_timeout, hard_timeout]}, - #ofp_async_config_prop_reasons{ - type = role_status_slave, - mask = [master_request, config]}, - #ofp_async_config_prop_reasons{ - type = role_status_master, - mask = [master_request, config]}, - #ofp_async_config_prop_reasons{ - type = table_status_slave, - mask = [vacancy_down, vacancy_up]}, - #ofp_async_config_prop_reasons{ - type = table_status_master, - mask = [vacancy_down, vacancy_up]}, - #ofp_async_config_prop_reasons{ - type = requestforward_slave, - mask = [group_mod, meter_mod]}, - #ofp_async_config_prop_reasons{ - type = requestforward_master, - mask = [group_mod, meter_mod]}, - #ofp_async_config_prop_experimenter{ - type = experimenter_slave, - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_async_config_prop_experimenter{ - type = experimenter_master, - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_async_config_prop_experimenter{ - type = experimenter_master, - experimenter = 101, - exp_type = 2, - data = <<1:32, 2:32>>}]}, - #ofp_meter_mod{ - command = add, - flags = [pktps, burst, stats], - meter_id = 100, - bands = [ - #ofp_meter_band_drop{rate = 1000, burst_size = 10}, - #ofp_meter_band_dscp_remark{rate = 1000, burst_size = 10, - prec_level = 1}, - #ofp_meter_band_experimenter{rate = 1000, burst_size = 10, - experimenter = 999} - ] - }, - - #ofp_flow_mod{ - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - table_id = 1,command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = any,out_group = any,flags = [], - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}, - instructions = - [#ofp_instruction_meter{meter_id = 1}, - #ofp_instruction_write_actions{ - actions = - [#ofp_action_output{port = 6,max_len = no_buffer}]}]}, - - #ofp_meter_config_request{meter_id = all}, - #ofp_meter_config_reply{ - body = - [#ofp_meter_config{ - flags = [pktps,burst,stats], - meter_id = 100, - bands = - [#ofp_meter_band_drop{ - type = drop,rate = 1000,burst_size = 10}]}]}, - - #ofp_meter_stats_request{meter_id = all}, - #ofp_meter_stats_reply{ - body = - [#ofp_meter_stats{ - meter_id = 100,flow_count = 0,packet_in_count = 0, - byte_in_count = 0,duration_sec = 0,duration_nsec = 480000, - band_stats = - [#ofp_meter_band_stats{ - packet_band_count = 0,byte_band_count = 0}]}]}, - - #ofp_meter_features_request{}, - #ofp_meter_features_reply{max_meter = 16777216, - band_types = [drop,dscp_remark,experimenter], - capabilities = [kbps,pktps,burst,stats], - max_bands = 255,max_color = 0}, - #ofp_port_desc_request{flags = []}, - #ofp_port_desc_reply{flags = [], - body = [#ofp_port{port_no = 7,hw_addr = <<"\362\v\244\320?p">>, - name = <<"Port7">>,config = [], - state = [live], - properties = - [#ofp_port_desc_prop_ethernet{ - curr = ['100mb_fd',copper,autoneg], - advertised = [copper,autoneg], - supported = ['100mb_fd',copper,autoneg], - peer = ['100mb_fd',copper,autoneg], - curr_speed = 5000,max_speed = 5000}, - #ofp_port_desc_prop_optical{ - supported = [rx_tune], - tx_min_freq_lmda = 1000, - tx_max_freq_lmda = 2000, - tx_grid_freq_lmda = 1500, - rx_min_freq_lmda = 1000, - rx_max_freq_lmda = 2000, - rx_grid_freq_lmda = 1500, - tx_pwr_min = 1000, - tx_pwr_max = 2000}, - #ofp_port_desc_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_port_desc_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_port_desc_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}, - #ofp_port{port_no = 6,hw_addr = <<"\362\v\244}\370\352">>, - name = <<"Port6">>,config = [], - state = [live], - properties = - [#ofp_port_desc_prop_ethernet{ - curr = ['100mb_fd',copper,autoneg], - advertised = [copper,autoneg], - supported = ['100mb_fd',copper,autoneg], - peer = ['100mb_fd',copper,autoneg], - curr_speed = 5000,max_speed = 5000}]}]}, - - - #ofp_table_features_request{ - flags = [more], - body = - [#ofp_table_features{ - table_id = 0,name = <<"Flow Table 0x00">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, - 18,19,20,21,22,23,24,25,26,27,28,29,30,31, - 32,33,34,35,36,37,38,39,40,41,42,43,44,45, - 46,47,48,49,50,51,52,53,54,55,56,57,58,59, - 60,61,62,63,64,65,66,67,68,69,70,71,72,73, - 74,75,76,77,78,79,80,81,82,83,84,85,86,87, - 88,89,90,91,92,93,94,95,96,97,98,99,100, - 101,102,103,104,105,106,107,108,109,110, - 111,112,113,114,115,116,117,118,119,120, - 121,122,123,124,125,126,127,128,129,130, - 131,132,133,134,135,136,137,138,139,140, - 141,142,143,144,145,146,147,148,149,150, - 151,152,153,154,155,156,157,158,159,160, - 161,162,163,164,165,166,167,168,169,170, - 171,172,173,174,175,176,177,178,179,180, - 181,182,183,184,185,186,187,188,189,190, - 191,192,193,194,195,196,197,198,199,200, - 201,202,203,204,205,206,207,208,209,210, - 211,212,213,214,215,216,217,218,219,220, - 221,222,223,224,225,226,227,228,229,230, - 231,232,233,234,235,236,237,238,239,240, - 241,242,243,244,245,246,247,248,249,250, - 251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}, - #ofp_table_features{ - table_id = 1,name = <<"Flow Table 0x01">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, - 19,20,21,22,23,24,25,26,27,28,29,30,31,32, - 33,34,35,36,37,38,39,40,41,42,43,44,45,46, - 47,48,49,50,51,52,53,54,55,56,57,58,59,60, - 61,62,63,64,65,66,67,68,69,70,71,72,73,74, - 75,76,77,78,79,80,81,82,83,84,85,86,87,88, - 89,90,91,92,93,94,95,96,97,98,99,100,101, - 102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121, - 122,123,124,125,126,127,128,129,130,131, - 132,133,134,135,136,137,138,139,140,141, - 142,143,144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159,160,161, - 162,163,164,165,166,167,168,169,170,171, - 172,173,174,175,176,177,178,179,180,181, - 182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201, - 202,203,204,205,206,207,208,209,210,211, - 212,213,214,215,216,217,218,219,220,221, - 222,223,224,225,226,227,228,229,230,231, - 232,233,234,235,236,237,238,239,240,241, - 242,243,244,245,246,247,248,249,250,251, - 252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 2,name = <<"Flow Table 0x02">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, - 19,20,21,22,23,24,25,26,27,28,29,30,31,32, - 33,34,35,36,37,38,39,40,41,42,43,44,45,46, - 47,48,49,50,51,52,53,54,55,56,57,58,59,60, - 61,62,63,64,65,66,67,68,69,70,71,72,73,74, - 75,76,77,78,79,80,81,82,83,84,85,86,87,88, - 89,90,91,92,93,94,95,96,97,98,99,100,101, - 102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121, - 122,123,124,125,126,127,128,129,130,131, - 132,133,134,135,136,137,138,139,140,141, - 142,143,144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159,160,161, - 162,163,164,165,166,167,168,169,170,171, - 172,173,174,175,176,177,178,179,180,181, - 182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201, - 202,203,204,205,206,207,208,209,210,211, - 212,213,214,215,216,217,218,219,220,221, - 222,223,224,225,226,227,228,229,230,231, - 232,233,234,235,236,237,238,239,240,241, - 242,243,244,245,246,247,248,249,250,251, - 252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 3,name = <<"Flow Table 0x03">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, - 20,21,22,23,24,25,26,27,28,29,30,31,32,33, - 34,35,36,37,38,39,40,41,42,43,44,45,46,47, - 48,49,50,51,52,53,54,55,56,57,58,59,60,61, - 62,63,64,65,66,67,68,69,70,71,72,73,74,75, - 76,77,78,79,80,81,82,83,84,85,86,87,88,89, - 90,91,92,93,94,95,96,97,98,99,100,101,102, - 103,104,105,106,107,108,109,110,111,112, - 113,114,115,116,117,118,119,120,121,122, - 123,124,125,126,127,128,129,130,131,132, - 133,134,135,136,137,138,139,140,141,142, - 143,144,145,146,147,148,149,150,151,152, - 153,154,155,156,157,158,159,160,161,162, - 163,164,165,166,167,168,169,170,171,172, - 173,174,175,176,177,178,179,180,181,182, - 183,184,185,186,187,188,189,190,191,192, - 193,194,195,196,197,198,199,200,201,202, - 203,204,205,206,207,208,209,210,211,212, - 213,214,215,216,217,218,219,220,221,222, - 223,224,225,226,227,228,229,230,231,232, - 233,234,235,236,237,238,239,240,241,242, - 243,244,245,246,247,248,249,250,251,252, - 253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 4,name = <<"Flow Table 0x04">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, - 21,22,23,24,25,26,27,28,29,30,31,32,33,34, - 35,36,37,38,39,40,41,42,43,44,45,46,47,48, - 49,50,51,52,53,54,55,56,57,58,59,60,61,62, - 63,64,65,66,67,68,69,70,71,72,73,74,75,76, - 77,78,79,80,81,82,83,84,85,86,87,88,89,90, - 91,92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 5,name = <<"Flow Table 0x05">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, - 21,22,23,24,25,26,27,28,29,30,31,32,33,34, - 35,36,37,38,39,40,41,42,43,44,45,46,47,48, - 49,50,51,52,53,54,55,56,57,58,59,60,61,62, - 63,64,65,66,67,68,69,70,71,72,73,74,75,76, - 77,78,79,80,81,82,83,84,85,86,87,88,89,90, - 91,92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 6,name = <<"Flow Table 0x06">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, - 22,23,24,25,26,27,28,29,30,31,32,33,34,35, - 36,37,38,39,40,41,42,43,44,45,46,47,48,49, - 50,51,52,53,54,55,56,57,58,59,60,61,62,63, - 64,65,66,67,68,69,70,71,72,73,74,75,76,77, - 78,79,80,81,82,83,84,85,86,87,88,89,90,91, - 92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 7,name = <<"Flow Table 0x07">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, - 23,24,25,26,27,28,29,30,31,32,33,34,35,36, - 37,38,39,40,41,42,43,44,45,46,47,48,49,50, - 51,52,53,54,55,56,57,58,59,60,61,62,63,64, - 65,66,67,68,69,70,71,72,73,74,75,76,77,78, - 79,80,81,82,83,84,85,86,87,88,89,90,91,92, - 93,94,95,96,97,98,99,100,101,102,103,104, - 105,106,107,108,109,110,111,112,113,114, - 115,116,117,118,119,120,121,122,123,124, - 125,126,127,128,129,130,131,132,133,134, - 135,136,137,138,139,140,141,142,143,144, - 145,146,147,148,149,150,151,152,153,154, - 155,156,157,158,159,160,161,162,163,164, - 165,166,167,168,169,170,171,172,173,174, - 175,176,177,178,179,180,181,182,183,184, - 185,186,187,188,189,190,191,192,193,194, - 195,196,197,198,199,200,201,202,203,204, - 205,206,207,208,209,210,211,212,213,214, - 215,216,217,218,219,220,221,222,223,224, - 225,226,227,228,229,230,231,232,233,234, - 235,236,237,238,239,240,241,242,243,244, - 245,246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 8,name = <<"Flow Table 0x08">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [9,10,11,12,13,14,15,16,17,18,19,20,21,22, - 23,24,25,26,27,28,29,30,31,32,33,34,35,36, - 37,38,39,40,41,42,43,44,45,46,47,48,49,50, - 51,52,53,54,55,56,57,58,59,60,61,62,63,64, - 65,66,67,68,69,70,71,72,73,74,75,76,77,78, - 79,80,81,82,83,84,85,86,87,88,89,90,91,92, - 93,94,95,96,97,98,99,100,101,102,103,104, - 105,106,107,108,109,110,111,112,113,114, - 115,116,117,118,119,120,121,122,123,124, - 125,126,127,128,129,130,131,132,133,134, - 135,136,137,138,139,140,141,142,143,144, - 145,146,147,148,149,150,151,152,153,154, - 155,156,157,158,159,160,161,162,163,164, - 165,166,167,168,169,170,171,172,173,174, - 175,176,177,178,179,180,181,182,183,184, - 185,186,187,188,189,190,191,192,193,194, - 195,196,197,198,199,200,201,202,203,204, - 205,206,207,208,209,210,211,212,213,214, - 215,216,217,218,219,220,221,222,223,224, - 225,226,227,228,229,230,231,232,233,234, - 235,236,237,238,239,240,241,242,243,244, - 245,246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 9,name = <<"Flow Table 0x09">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [10,11,12,13,14,15,16,17,18,19,20,21,22,23, - 24,25,26,27,28,29,30,31,32,33,34,35,36,37, - 38,39,40,41,42,43,44,45,46,47,48,49,50,51, - 52,53,54,55,56,57,58,59,60,61,62,63,64,65, - 66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 80,81,82,83,84,85,86,87,88,89,90,91,92,93, - 94,95,96,97,98,99,100,101,102,103,104,105, - 106,107,108,109,110,111,112,113,114,115, - 116,117,118,119,120,121,122,123,124,125, - 126,127,128,129,130,131,132,133,134,135, - 136,137,138,139,140,141,142,143,144,145, - 146,147,148,149,150,151,152,153,154,155, - 156,157,158,159,160,161,162,163,164,165, - 166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185, - 186,187,188,189,190,191,192,193,194,195, - 196,197,198,199,200,201,202,203,204,205, - 206,207,208,209,210,211,212,213,214,215, - 216,217,218,219,220,221,222,223,224,225, - 226,227,228,229,230,231,232,233,234,235, - 236,237,238,239,240,241,242,243,244,245, - 246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}]}, - #ofp_table_features_reply{ - flags = [more], - body = - [#ofp_table_features{ - table_id = 0,name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x86\xe3\x83\xbc\xe3\x83\x96\xe3\x83\xab">>, % "my table" in japanese, utf-8 - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, - 18,19,20,21,22,23,24,25,26,27,28,29,30,31, - 32,33,34,35,36,37,38,39,40,41,42,43,44,45, - 46,47,48,49,50,51,52,53,54,55,56,57,58,59, - 60,61,62,63,64,65,66,67,68,69,70,71,72,73, - 74,75,76,77,78,79,80,81,82,83,84,85,86,87, - 88,89,90,91,92,93,94,95,96,97,98,99,100, - 101,102,103,104,105,106,107,108,109,110, - 111,112,113,114,115,116,117,118,119,120, - 121,122,123,124,125,126,127,128,129,130, - 131,132,133,134,135,136,137,138,139,140, - 141,142,143,144,145,146,147,148,149,150, - 151,152,153,154,155,156,157,158,159,160, - 161,162,163,164,165,166,167,168,169,170, - 171,172,173,174,175,176,177,178,179,180, - 181,182,183,184,185,186,187,188,189,190, - 191,192,193,194,195,196,197,198,199,200, - 201,202,203,204,205,206,207,208,209,210, - 211,212,213,214,215,216,217,218,219,220, - 221,222,223,224,225,226,227,228,229,230, - 231,232,233,234,235,236,237,238,239,240, - 241,242,243,244,245,246,247,248,249,250, - 251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_table_feature_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}, - #ofp_table_features{ - table_id = 1,name = <<"Flow Table 0x01">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, - 19,20,21,22,23,24,25,26,27,28,29,30,31,32, - 33,34,35,36,37,38,39,40,41,42,43,44,45,46, - 47,48,49,50,51,52,53,54,55,56,57,58,59,60, - 61,62,63,64,65,66,67,68,69,70,71,72,73,74, - 75,76,77,78,79,80,81,82,83,84,85,86,87,88, - 89,90,91,92,93,94,95,96,97,98,99,100,101, - 102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121, - 122,123,124,125,126,127,128,129,130,131, - 132,133,134,135,136,137,138,139,140,141, - 142,143,144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159,160,161, - 162,163,164,165,166,167,168,169,170,171, - 172,173,174,175,176,177,178,179,180,181, - 182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201, - 202,203,204,205,206,207,208,209,210,211, - 212,213,214,215,216,217,218,219,220,221, - 222,223,224,225,226,227,228,229,230,231, - 232,233,234,235,236,237,238,239,240,241, - 242,243,244,245,246,247,248,249,250,251, - 252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 2,name = <<"Flow Table 0x02">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, - 19,20,21,22,23,24,25,26,27,28,29,30,31,32, - 33,34,35,36,37,38,39,40,41,42,43,44,45,46, - 47,48,49,50,51,52,53,54,55,56,57,58,59,60, - 61,62,63,64,65,66,67,68,69,70,71,72,73,74, - 75,76,77,78,79,80,81,82,83,84,85,86,87,88, - 89,90,91,92,93,94,95,96,97,98,99,100,101, - 102,103,104,105,106,107,108,109,110,111, - 112,113,114,115,116,117,118,119,120,121, - 122,123,124,125,126,127,128,129,130,131, - 132,133,134,135,136,137,138,139,140,141, - 142,143,144,145,146,147,148,149,150,151, - 152,153,154,155,156,157,158,159,160,161, - 162,163,164,165,166,167,168,169,170,171, - 172,173,174,175,176,177,178,179,180,181, - 182,183,184,185,186,187,188,189,190,191, - 192,193,194,195,196,197,198,199,200,201, - 202,203,204,205,206,207,208,209,210,211, - 212,213,214,215,216,217,218,219,220,221, - 222,223,224,225,226,227,228,229,230,231, - 232,233,234,235,236,237,238,239,240,241, - 242,243,244,245,246,247,248,249,250,251, - 252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 3,name = <<"Flow Table 0x03">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, - 20,21,22,23,24,25,26,27,28,29,30,31,32,33, - 34,35,36,37,38,39,40,41,42,43,44,45,46,47, - 48,49,50,51,52,53,54,55,56,57,58,59,60,61, - 62,63,64,65,66,67,68,69,70,71,72,73,74,75, - 76,77,78,79,80,81,82,83,84,85,86,87,88,89, - 90,91,92,93,94,95,96,97,98,99,100,101,102, - 103,104,105,106,107,108,109,110,111,112, - 113,114,115,116,117,118,119,120,121,122, - 123,124,125,126,127,128,129,130,131,132, - 133,134,135,136,137,138,139,140,141,142, - 143,144,145,146,147,148,149,150,151,152, - 153,154,155,156,157,158,159,160,161,162, - 163,164,165,166,167,168,169,170,171,172, - 173,174,175,176,177,178,179,180,181,182, - 183,184,185,186,187,188,189,190,191,192, - 193,194,195,196,197,198,199,200,201,202, - 203,204,205,206,207,208,209,210,211,212, - 213,214,215,216,217,218,219,220,221,222, - 223,224,225,226,227,228,229,230,231,232, - 233,234,235,236,237,238,239,240,241,242, - 243,244,245,246,247,248,249,250,251,252, - 253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 4,name = <<"Flow Table 0x04">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, - 21,22,23,24,25,26,27,28,29,30,31,32,33,34, - 35,36,37,38,39,40,41,42,43,44,45,46,47,48, - 49,50,51,52,53,54,55,56,57,58,59,60,61,62, - 63,64,65,66,67,68,69,70,71,72,73,74,75,76, - 77,78,79,80,81,82,83,84,85,86,87,88,89,90, - 91,92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 5,name = <<"Flow Table 0x05">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, - 21,22,23,24,25,26,27,28,29,30,31,32,33,34, - 35,36,37,38,39,40,41,42,43,44,45,46,47,48, - 49,50,51,52,53,54,55,56,57,58,59,60,61,62, - 63,64,65,66,67,68,69,70,71,72,73,74,75,76, - 77,78,79,80,81,82,83,84,85,86,87,88,89,90, - 91,92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 6,name = <<"Flow Table 0x06">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, - 22,23,24,25,26,27,28,29,30,31,32,33,34,35, - 36,37,38,39,40,41,42,43,44,45,46,47,48,49, - 50,51,52,53,54,55,56,57,58,59,60,61,62,63, - 64,65,66,67,68,69,70,71,72,73,74,75,76,77, - 78,79,80,81,82,83,84,85,86,87,88,89,90,91, - 92,93,94,95,96,97,98,99,100,101,102,103, - 104,105,106,107,108,109,110,111,112,113, - 114,115,116,117,118,119,120,121,122,123, - 124,125,126,127,128,129,130,131,132,133, - 134,135,136,137,138,139,140,141,142,143, - 144,145,146,147,148,149,150,151,152,153, - 154,155,156,157,158,159,160,161,162,163, - 164,165,166,167,168,169,170,171,172,173, - 174,175,176,177,178,179,180,181,182,183, - 184,185,186,187,188,189,190,191,192,193, - 194,195,196,197,198,199,200,201,202,203, - 204,205,206,207,208,209,210,211,212,213, - 214,215,216,217,218,219,220,221,222,223, - 224,225,226,227,228,229,230,231,232,233, - 234,235,236,237,238,239,240,241,242,243, - 244,245,246,247,248,249,250,251,252,253, - 254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 7,name = <<"Flow Table 0x07">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, - 23,24,25,26,27,28,29,30,31,32,33,34,35,36, - 37,38,39,40,41,42,43,44,45,46,47,48,49,50, - 51,52,53,54,55,56,57,58,59,60,61,62,63,64, - 65,66,67,68,69,70,71,72,73,74,75,76,77,78, - 79,80,81,82,83,84,85,86,87,88,89,90,91,92, - 93,94,95,96,97,98,99,100,101,102,103,104, - 105,106,107,108,109,110,111,112,113,114, - 115,116,117,118,119,120,121,122,123,124, - 125,126,127,128,129,130,131,132,133,134, - 135,136,137,138,139,140,141,142,143,144, - 145,146,147,148,149,150,151,152,153,154, - 155,156,157,158,159,160,161,162,163,164, - 165,166,167,168,169,170,171,172,173,174, - 175,176,177,178,179,180,181,182,183,184, - 185,186,187,188,189,190,191,192,193,194, - 195,196,197,198,199,200,201,202,203,204, - 205,206,207,208,209,210,211,212,213,214, - 215,216,217,218,219,220,221,222,223,224, - 225,226,227,228,229,230,231,232,233,234, - 235,236,237,238,239,240,241,242,243,244, - 245,246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 8,name = <<"Flow Table 0x08">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [9,10,11,12,13,14,15,16,17,18,19,20,21,22, - 23,24,25,26,27,28,29,30,31,32,33,34,35,36, - 37,38,39,40,41,42,43,44,45,46,47,48,49,50, - 51,52,53,54,55,56,57,58,59,60,61,62,63,64, - 65,66,67,68,69,70,71,72,73,74,75,76,77,78, - 79,80,81,82,83,84,85,86,87,88,89,90,91,92, - 93,94,95,96,97,98,99,100,101,102,103,104, - 105,106,107,108,109,110,111,112,113,114, - 115,116,117,118,119,120,121,122,123,124, - 125,126,127,128,129,130,131,132,133,134, - 135,136,137,138,139,140,141,142,143,144, - 145,146,147,148,149,150,151,152,153,154, - 155,156,157,158,159,160,161,162,163,164, - 165,166,167,168,169,170,171,172,173,174, - 175,176,177,178,179,180,181,182,183,184, - 185,186,187,188,189,190,191,192,193,194, - 195,196,197,198,199,200,201,202,203,204, - 205,206,207,208,209,210,211,212,213,214, - 215,216,217,218,219,220,221,222,223,224, - 225,226,227,228,229,230,231,232,233,234, - 235,236,237,238,239,240,241,242,243,244, - 245,246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}, - #ofp_table_features{ - table_id = 9,name = <<"Flow Table 0x09">>, - metadata_match = <<"\377\377\377\377\377\377\377\377">>, - metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, - properties = - [#ofp_table_feature_prop_instructions{ - instruction_ids = - [goto_table,write_metadata,write_actions, - apply_actions,clear_actions,meter]}, - #ofp_table_feature_prop_next_tables{ - next_table_ids = - [10,11,12,13,14,15,16,17,18,19,20,21,22,23, - 24,25,26,27,28,29,30,31,32,33,34,35,36,37, - 38,39,40,41,42,43,44,45,46,47,48,49,50,51, - 52,53,54,55,56,57,58,59,60,61,62,63,64,65, - 66,67,68,69,70,71,72,73,74,75,76,77,78,79, - 80,81,82,83,84,85,86,87,88,89,90,91,92,93, - 94,95,96,97,98,99,100,101,102,103,104,105, - 106,107,108,109,110,111,112,113,114,115, - 116,117,118,119,120,121,122,123,124,125, - 126,127,128,129,130,131,132,133,134,135, - 136,137,138,139,140,141,142,143,144,145, - 146,147,148,149,150,151,152,153,154,155, - 156,157,158,159,160,161,162,163,164,165, - 166,167,168,169,170,171,172,173,174,175, - 176,177,178,179,180,181,182,183,184,185, - 186,187,188,189,190,191,192,193,194,195, - 196,197,198,199,200,201,202,203,204,205, - 206,207,208,209,210,211,212,213,214,215, - 216,217,218,219,220,221,222,223,224,225, - 226,227,228,229,230,231,232,233,234,235, - 236,237,238,239,240,241,242,243,244,245, - 246,247,248,249,250,251,252,253,254]}, - #ofp_table_feature_prop_write_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_apply_actions{ - action_ids = - [output,group,set_queue,set_mpls_ttl, - dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, - copy_ttl_out,copy_ttl_in,push_vlan, - pop_vlan,push_mpls,pop_mpls,push_pbb, - pop_pbb,set_field]}, - #ofp_table_feature_prop_match{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_wildcards{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_write_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}, - #ofp_table_feature_prop_apply_setfield{ - oxm_ids = - [in_port,metadata,eth_dst,eth_src,eth_type, - vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, - ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, - udp_dst,sctp_src,sctp_dst,icmpv4_type, - icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, - arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, - icmpv6_type,icmpv6_code,ipv6_nd_target, - ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, - mpls_bos,pbb_isid]}]}]}, - #ofp_group_stats_request{flags = [],group_id = all}, - #ofp_group_stats_reply{ - flags = [], - body = - [#ofp_group_stats{ - group_id = 1,ref_count = 2,packet_count = 123, - byte_count = 12345,duration_sec = 9, - duration_nsec = 609036000, - bucket_stats = - [#ofp_bucket_counter{ - packet_count = 234,byte_count = 2345}]}]}, - #ofp_packet_in{ - buffer_id = 16#f0000000,reason = table_miss,table_id = 200, - cookie = <<0,1,2,3,0,0,0,0>>, - match = #ofp_match{fields = AllFields}, - data = <<>>}, - #ofp_flow_mod{ - cookie = <<0,0,0,0,0,0,0,0>>, - cookie_mask = <<0,0,0,0,0,0,0,0>>, - table_id = 1,command = add,idle_timeout = 0, - hard_timeout = 0,priority = 123,buffer_id = 65535, - out_port = any,out_group = any,flags = [], - match = #ofp_match{fields = AllFields}, - instructions = []}, - #ofp_experimenter_request{ - experimenter = 16#deadbeaf, - exp_type = 16#cafe8888, - data = <<"hogehoge">> - }, - #ofp_experimenter_reply{ - experimenter = 16#deadbeaf, - exp_type = 16#cafe7777, - data = <<"testdata99999999">> - }, - #ofp_table_desc_request{flags = []}, - #ofp_table_desc_reply{flags = [], - tables = - [#ofp_table_desc{ - table_id = 7, - config = [], - properties = - [ #ofp_table_mod_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}]}, - #ofp_table_desc{ - table_id = 8, - config = [], - properties = - [#ofp_table_mod_prop_eviction{flags = []}, - #ofp_table_mod_prop_vacancy{ - vacancy = 0, - vacancy_down = 0, - vacancy_up = 0}, - #ofp_table_mod_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_table_mod_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_table_mod_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}]}, - #ofp_queue_desc_request{ - port_no = 7, - queue_id = all}, - #ofp_queue_desc_reply{ - queues = - [#ofp_queue_desc{ - port_no = 7, - properties = - [#ofp_queue_desc_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}], - queue_id = 0}, - #ofp_queue_desc{ - port_no = 8, - properties = - [#ofp_queue_desc_prop_min_rate{rate = 300}, - #ofp_queue_desc_prop_max_rate{rate = 900}, - #ofp_queue_desc_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_queue_desc_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_queue_desc_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}], - queue_id = 1}]}, - #ofp_role_status{ - role = master, - reason = master_request, - generation_id=7, - properties = - [#ofp_role_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_role_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_role_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}, - #ofp_flow_monitor_request{ - flags = [], - monitor_id = 100000000, - out_port = 22, - out_group = any, - monitor_flags = [initial, add, removed, modify], - table_id = 33, - command = add, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic,name = eth_dst, - has_mask = false, - value = <<"\362\v\244}\370\352">>, - mask = undefined}]}}, - #ofp_flow_monitor_reply{ - flags = [], - updates = - [#ofp_flow_update_full{ - event = initial, - table_id = 0, - reason = idle_timeout, - idle_timeout = 600, - hard_timeout = 700, - priority = 3, - cookie = <<0,0,0,0,0,0,0,0>>, - match = - #ofp_match{ - fields = - [#ofp_field{ - class = openflow_basic, - name = eth_type, - has_mask = false, - value = <<8,6>>, - mask = undefined}]}, - instructions = - [#ofp_instruction_apply_actions{ - actions = - [#ofp_action_output{ - port = normal, - max_len = 0}]}]}, - #ofp_flow_update_abbrev{event = abbrev,xid=1234}, - #ofp_flow_update_paused{event = paused}]}, - #ofp_table_status{ - reason = vacancy_down, - table = - #ofp_table_desc{ - table_id = 8, - config = [], - properties = - [#ofp_table_mod_prop_eviction{flags = []}, - #ofp_table_mod_prop_vacancy{ - vacancy = 0, - vacancy_down = 0, - vacancy_up = 0}, - #ofp_table_mod_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_table_mod_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_table_mod_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}}, - #ofp_bundle_ctrl_msg{ - bundle_id = 1234, - type = open_request, - flags = [atomic], - properties = - [#ofp_bundle_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_bundle_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_bundle_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}, - #ofp_bundle_add_msg{ - bundle_id = 1234, - flags = [atomic], - message = - #ofp_message{ - version = 5, - type = echo_request, - xid = 0, - body = #ofp_echo_request{}}, - properties = - [#ofp_bundle_prop_experimenter{ - experimenter = 101, - exp_type = 0, - data = <<>>}, - #ofp_bundle_prop_experimenter{ - experimenter = 101, - exp_type = 1, - data = <<1:32>>}, - #ofp_bundle_prop_experimenter{ - experimenter = 101, - exp_type = 2, - data = <<1:32,2:32>>}]}, - #ofp_requestforward{ - request = - #ofp_message{ - version = 5, - type = group_mod, - xid = 0, - body = - #ofp_group_mod{ - command = add, - type = all, - group_id = 1, - buckets = - [#ofp_bucket{ - weight = 1, - watch_port = 1, - watch_group = 1, - actions = - [#ofp_action_output{ - port = 2, - max_len = no_buffer}]}]}}} - ], - lists:foldl(fun x:do/2, {5, 0}, List). diff --git a/ryu/tests/packet_data_generator/src/x_flower_packet.erl b/ryu/tests/packet_data_generator/src/x_flower_packet.erl deleted file mode 100644 index 5c2e3742..00000000 --- a/ryu/tests/packet_data_generator/src/x_flower_packet.erl +++ /dev/null @@ -1,61 +0,0 @@ -%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -%% Copyright (C) 2013 YAMAMOTO Takashi -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -%% implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. - --module(x_flower_packet). --export([message/3, message_extract/1, encode/1, decode/1]). - --include_lib("flower/include/flower_packet.hrl"). - -message(OFPVersion, Xid, Body) -> - #ovs_msg{version=OFPVersion, xid=Xid, msg=Body}. - -message_extract(Msg) -> - #ovs_msg{version=OFPVersion, xid=Xid, msg=Body} = Msg, - {OFPVersion, Xid, Body}. - -guess_type(Msg) -> - % eg. {ofp_packet_out, ...} -> packet_out - RecType = element(1, Msg), - case RecType of - ofp_switch_features -> - features_reply; - _ -> - RecTypeStr = atom_to_list(RecType), - TypeStr = lists:nthtail(4, RecTypeStr), - list_to_atom(TypeStr) - end. - -encode(Msg) -> - Msg2 = case Msg of - #ovs_msg{msg = features_request} -> - Msg#ovs_msg{type = features_request, msg = <<>>}; - _ -> - Msg#ovs_msg{type = guess_type(Msg#ovs_msg.msg)} - end, - %io:format("encoding ~p~n", [Msg2]), - BinMsg = flower_packet:encode(Msg2), - {ok, BinMsg}. - -decode(BinMsg) -> - {[Msg], <<>>} = flower_packet:decode(BinMsg), - %io:format("decoded ~p~n", [Msg]), - Msg2 = case Msg of - #ovs_msg{type = features_request} -> - Msg#ovs_msg{msg = features_request}; - _ -> - Msg - end, - {ok, Msg2, <<>>}. diff --git a/ryu/tests/packet_data_generator/src/x_of_protocol.erl b/ryu/tests/packet_data_generator/src/x_of_protocol.erl deleted file mode 100644 index 38405dbb..00000000 --- a/ryu/tests/packet_data_generator/src/x_of_protocol.erl +++ /dev/null @@ -1,33 +0,0 @@ -%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -%% Copyright (C) 2013 YAMAMOTO Takashi -%% -%% Licensed under the Apache License, Version 2.0 (the "License"); -%% you may not use this file except in compliance with the License. -%% You may obtain a copy of the License at -%% -%% http://www.apache.org/licenses/LICENSE-2.0 -%% -%% Unless required by applicable law or agreed to in writing, software -%% distributed under the License is distributed on an "AS IS" BASIS, -%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -%% implied. -%% See the License for the specific language governing permissions and -%% limitations under the License. - --module(x_of_protocol). --export([message/3, message_extract/1, encode/1, decode/1]). - --include_lib("of_protocol/include/of_protocol.hrl"). - -message(OFPVersion, Xid, Body) -> - #ofp_message{version=OFPVersion, xid=Xid, body=Body}. - -message_extract(Msg) -> - #ofp_message{version=OFPVersion, xid=Xid, body=Body} = Msg, - {OFPVersion, Xid, Body}. - -encode(Msg) -> - of_protocol:encode(Msg). - -decode(BinMsg) -> - of_protocol:decode(BinMsg). diff --git a/ryu/tests/packet_data_generator2/Makefile.BSD b/ryu/tests/packet_data_generator2/Makefile.BSD deleted file mode 100644 index a6319c42..00000000 --- a/ryu/tests/packet_data_generator2/Makefile.BSD +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2015 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# OVS: openvswitch installed directory (used to look for libraries) -# OVS_SRC: openvswitch source directory - -OVS?=${HOME}/ovs -OVS_SRC?=/disks/774373a2-e180-11e3-9fa1-08606e7f74e7/git/openvswitch - -CPPFLAGS+=-I${OVS}/include -I${OVS_SRC} -LDFLAGS+=-L${OVS}/lib -Wl,-R${OVS}/lib -lofproto -lopenvswitch - -PROG=gen -NOMAN= - -all: generate - -generate: ${PROG} - ${_MKMSG} "generate packet_data" - cd ${.CURDIR} && ${.OBJDIR}/${PROG} - -.include diff --git a/ryu/tests/packet_data_generator2/Makefile.GNU b/ryu/tests/packet_data_generator2/Makefile.GNU deleted file mode 100644 index 3e037f8e..00000000 --- a/ryu/tests/packet_data_generator2/Makefile.GNU +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# OVS_SRC: openvswitch source directory -# OVS_INC: openvswitch include directory -# OVS_LIB: openvswitch library directory - -OVS_SRC=${HOME}/ovs -OVS_INC=/usr/local/include/openvswitch -OVS_LIB=/usr/local/lib - -CPPFLAGS=-std=gnu99 -I${OVS_SRC} -I${OVS_INC} -LDFLAGS=-L${OVS_LIB} -Wl,-R${OVS_LIB} -lofproto -lopenvswitch -lpthread -lssl -lrt -lm -lcrypto - -PROG=gen -NOMAN= - -all: generate - -gen: gen.c - ${CC} $^ ${CPPFLAGS} ${LDFLAGS} -o $@ - -generate: ${PROG} - ./${PROG} - -clean: - rm ${PROG} diff --git a/ryu/tests/packet_data_generator2/README b/ryu/tests/packet_data_generator2/README deleted file mode 100644 index 3ad19301..00000000 --- a/ryu/tests/packet_data_generator2/README +++ /dev/null @@ -1,15 +0,0 @@ -This directory contains a small C program to generate -OpenFlow packet binary files [1]. They are used by some of -unit tests [2]. As we have the generated files in the repository, -you don't need to build this program unless you want to (re-)generate -the files for some reasons, typically adding new test cases. - -[1] ryu/tests/packet_data/of*/libofproto-*.packet -[2] ryu.tests.unit.ofproto.test_parser - -The program requires libofproto library provided by Open vSwitch. -It's a little tricky to build because Open vSwitch distribution -normally does not install the corresponding C header files. You need -both of the source distribution of Open vSwitch and matching installed -libraries, and override OVS_SRC and SRC make variables to point those -directries respectively. diff --git a/ryu/tests/packet_data_generator2/gen.c b/ryu/tests/packet_data_generator2/gen.c deleted file mode 100644 index dbdcf4c2..00000000 --- a/ryu/tests/packet_data_generator2/gen.c +++ /dev/null @@ -1,963 +0,0 @@ -/* - * Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. - * Copyright (C) 2015 YAMAMOTO Takashi - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - * implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include - -/* - * OpenFlow Common - */ - -void -clear_xid(struct ofpbuf *buf) -{ - /* - * some of libofproto message encoding routines automatically - * allocate XID for the message. e.g. ofputil_encode_flow_mod - * zero-out the XID so that test_parser can perform a simple - * bit-wise comparison. - */ - - struct ofp_header *oh = ofpbuf_at_assert(buf, 0, sizeof(*oh)); - - oh->xid = htonl(0); -} - -void -fill_match(struct match *match) -{ - const struct eth_addr dl_dst = - { { { 0xaa, 0xbb, 0xcc, 0x99, 0x88, 0x77 } } }; - match_init_catchall(match); - match_set_in_port(match, 0xabcd); - match_set_dl_vlan(match, htons(999)); - match_set_dl_dst(match, dl_dst); - match_set_dl_type(match, htons(ETH_TYPE_IP)); - match_set_nw_dst(match, inet_addr("192.168.2.1")); - match_set_tun_src(match, inet_addr("192.168.2.3")); - match_set_tun_dst(match, inet_addr("192.168.2.4")); - match_set_tun_id(match, htonll(50000)); -} - -/* - * Controller-to-Switch Messages - */ - -/* - * Handshake - */ - -struct ofpbuf * -features_reply(enum ofputil_protocol proto) -{ - struct ofputil_switch_features sf; - - memset(&sf, 0, sizeof(sf)); - sf.datapath_id = 1; - sf.n_buffers = 255; - sf.n_tables = 255; - sf.auxiliary_id = 0; - sf.capabilities = OFPUTIL_C_FLOW_STATS | OFPUTIL_C_TABLE_STATS | - OFPUTIL_C_PORT_STATS | OFPUTIL_C_GROUP_STATS | - OFPUTIL_C_QUEUE_STATS; - // sf.ofpacts is for only OFP10 - - ovs_be32 xid = 0; - - return ofputil_encode_switch_features(&sf, proto, xid); -} - -/* - * Switch Configuration - */ - -struct ofpbuf * -set_config(enum ofputil_protocol proto) -{ - struct ofputil_switch_config sc; - - memset(&sc, 0, sizeof(sc)); - sc.frag = OFPUTIL_FRAG_NORMAL; - // sc.invalid_ttl_to_controller is for only OFP11 and OFP12 - sc.miss_send_len = 128; // The default of OpenFlow Spec - - return ofputil_encode_set_config( - &sc, ofputil_protocol_to_ofp_version(proto)); -} - -struct ofpbuf * -get_config_reply(enum ofputil_protocol proto) -{ - struct ofputil_switch_config sc; - struct ofp_header oh; - - memset(&oh, 0, sizeof(oh)); - oh.xid = 0; - oh.version = ofputil_protocol_to_ofp_version(proto); - memset(&sc, 0, sizeof(sc)); - sc.frag = OFPUTIL_FRAG_NORMAL; - // sc.invalid_ttl_to_controller is for only OFP11 and OFP12 - sc.miss_send_len = 128; // The default of OpenFlow Spec - - return ofputil_encode_get_config_reply(&oh, &sc); -} - -/* - * Modify State Messages - */ - -struct ofpbuf * -table_mod(enum ofputil_protocol proto) -{ - struct ofputil_table_mod tm; - - memset(&tm, 0, sizeof(tm)); - tm.table_id = 0xff; // OFPTT_ALL - // OpenFlow 1.1 and 1.2 only. - // For other versions, ignored on encoding. - tm.miss = OFPUTIL_TABLE_MISS_DEFAULT; // Protocol default behavior. - // OpenFlow 1.4+ only. - // For other versions, ignored on encoding. - tm.eviction = OFPUTIL_TABLE_EVICTION_ON; // Enable eviction. - tm.eviction_flags = OFPTMPEF14_IMPORTANCE; // Using flow entry importance. - - return ofputil_encode_table_mod(&tm, proto); -} - -struct ofpbuf * -flow_mod(enum ofputil_protocol proto) -{ - struct ofputil_flow_mod fm; - struct ofpbuf acts; - struct ofpact_ipv4 *a_set_field; - struct ofpact_goto_table *a_goto; - char *error; - - /* - * Taken from neutron OVS-agent, - * modified for OF>=1.3. (NXM -> OXM) - * NOTE(yamamoto): This needs to be writable. learn_parse() modifies it. - */ - char learn_args[] = - "table=99," - "priority=1," - "hard_timeout=300," - "OXM_OF_VLAN_VID[0..11]," - "OXM_OF_ETH_DST[]=OXM_OF_ETH_SRC[]," - "load:0->OXM_OF_VLAN_VID[]," - "load:OXM_OF_TUNNEL_ID[]->OXM_OF_TUNNEL_ID[]," - "output:OXM_OF_IN_PORT[]"; - - memset(&fm, 0, sizeof(fm)); - fm.command = OFPFC_ADD; - fm.table_id = 2; - fm.new_cookie = htonll(0x123456789abcdef0); - fm.cookie_mask = OVS_BE64_MAX; - fm.importance = 0x9878; - - fill_match(&fm.match); - - ofpbuf_init(&acts, 64); - ofpact_put_STRIP_VLAN(&acts); - a_set_field = ofpact_put_SET_IPV4_DST(&acts); - a_set_field->ipv4 = inet_addr("192.168.2.9"); - error = learn_parse(learn_args, &acts); - assert(error == NULL); - a_goto = ofpact_put_GOTO_TABLE(&acts); - a_goto->table_id = 100; - - fm.ofpacts = acts.data; - fm.ofpacts_len = acts.size; - return ofputil_encode_flow_mod(&fm, proto); -} - -struct ofpbuf * -flow_mod_match_conj(enum ofputil_protocol proto) -{ - struct ofputil_flow_mod fm; - struct ofpbuf acts; - struct ofpact_ipv4 *a_set_field; - struct ofpact_goto_table *a_goto; - - memset(&fm, 0, sizeof(fm)); - fm.command = OFPFC_ADD; - fm.table_id = 3; - fm.new_cookie = htonll(0x123456789abcdef0); - fm.cookie_mask = OVS_BE64_MAX; - fm.importance = 0x9878; - - match_init_catchall(&fm.match); - match_set_conj_id(&fm.match, 0xabcdef); - - ofpbuf_init(&acts, 64); - ofpact_put_STRIP_VLAN(&acts); - a_set_field = ofpact_put_SET_IPV4_DST(&acts); - a_set_field->ipv4 = inet_addr("192.168.2.9"); - a_goto = ofpact_put_GOTO_TABLE(&acts); - a_goto->table_id = 100; - - fm.ofpacts = acts.data; - fm.ofpacts_len = acts.size; - return ofputil_encode_flow_mod(&fm, proto); -} - -struct ofpbuf * -flow_mod_conjunction(enum ofputil_protocol proto) -{ - struct ofputil_flow_mod fm; - struct ofpbuf acts; - struct ofpact_conjunction *a_conj; - - memset(&fm, 0, sizeof(fm)); - fm.command = OFPFC_ADD; - fm.table_id = 4; - fm.new_cookie = htonll(0x123456789abcdef0); - fm.cookie_mask = OVS_BE64_MAX; - fm.importance = 0x9878; - - fill_match(&fm.match); - - ofpbuf_init(&acts, 64); - a_conj = ofpact_put_CONJUNCTION(&acts); - a_conj->id = 0xabcdef; - a_conj->clause = 1; - a_conj->n_clauses = 2; - - fm.ofpacts = acts.data; - fm.ofpacts_len = acts.size; - return ofputil_encode_flow_mod(&fm, proto); -} - -struct ofpbuf * -group_mod(enum ofputil_protocol proto) -{ - struct ofputil_group_mod gm; - struct ofpbuf acts; - struct ofpact_ipv4 *a_set_field; - struct ofpact_goto_table *a_goto; - struct ofputil_bucket bckt; - - memset(&gm, 0, sizeof(gm)); - gm.command = OFPGC15_INSERT_BUCKET; - gm.type = OFPGT11_SELECT; - gm.group_id = 0xaaaaaaaa; - gm.command_bucket_id = 0xbbbbbbbb; - - ofpbuf_init(&acts, 0x18); - ofpact_put_STRIP_VLAN(&acts); - a_set_field = ofpact_put_SET_IPV4_DST(&acts); - a_set_field->ipv4 = inet_addr("192.168.2.9"); - - bckt.weight = 0xcccc; - bckt.watch_port = 0xdddd; - bckt.watch_group = 0xeeeeeeee; - bckt.bucket_id = 0x12345678; - bckt.ofpacts = acts.data; - bckt.ofpacts_len = acts.size; - - list_init(&(gm.buckets)); - list_push_back(&(gm.buckets), &(bckt.list_node)); - - return ofputil_encode_group_mod( - ofputil_protocol_to_ofp_version(proto), &gm); -} - -struct ofpbuf * -port_mod(enum ofputil_protocol proto) -{ - struct ofputil_port_mod pm; - const struct eth_addr hw_addr = - { { { 0xaa, 0xbb, 0xcc, 0x99, 0x88, 0x77 } } }; - - memset(&pm, 0, sizeof(pm)); - pm.port_no = 1; - pm.hw_addr = hw_addr; - pm.config = OFPPC_PORT_DOWN; - pm.mask = OFPPC_PORT_DOWN; - pm.advertise = 10248; // OFPPF_100MB_FD, OFPPF_COPPER, OFPPF_AUTONEG - - return ofputil_encode_port_mod(&pm, proto); -} - -struct ofpbuf * -meter_mod(enum ofputil_protocol proto) -{ - const int N_BANDS = 2; - struct ofputil_meter_mod mm; - struct ofputil_meter_band bands[N_BANDS]; - - memset(bands, 0, sizeof(*bands)*2); - bands[0].type = 1; // OFPMBT_DROP - bands[0].rate = 1000; - bands[0].burst_size = 10; - bands[1].type = 2; // OFPMBT_DSCP_REMARK - bands[1].prec_level = 1; - bands[1].rate = 1000; - bands[1].burst_size = 10; - - memset(&mm, 0, sizeof(mm)); - mm.command = 0; // OFPMC_ADD - mm.meter.meter_id = 100; - mm.meter.flags = 14; // OFPMF_PKTPS, OFPMF_BURST, OFPMF_STATS - mm.meter.n_bands = N_BANDS; - mm.meter.bands = bands; - - return ofputil_encode_meter_mod( - ofputil_protocol_to_ofp_version(proto), &mm); -} - -/* - * Multipart Messages - */ - -struct ofpbuf * -aggregate_stats_request(enum ofputil_protocol proto) -{ - struct ofputil_flow_stats_request fsr; - - memset(&fsr, 0, sizeof(fsr)); - fsr.aggregate = true; - match_init_catchall(&fsr.match); - fsr.out_port = OFPP_ANY; - fsr.out_group = OFPG_ANY; - fsr.table_id = OFPTT_ALL; - fsr.cookie = fsr.cookie_mask = htonll(0); - - return ofputil_encode_flow_stats_request(&fsr, proto); -} - -struct ofpbuf * -port_stats_request(enum ofputil_protocol proto) -{ - uint32_t port_no = 0xffffffff; - return ofputil_encode_dump_ports_request( - ofputil_protocol_to_ofp_version(proto), port_no); -} - -struct ofpbuf * -port_desc_request(enum ofputil_protocol proto) -{ - uint32_t port_no = 0xbcda; - - return ofputil_encode_port_desc_stats_request( - ofputil_protocol_to_ofp_version(proto), port_no); -} - -struct ofpbuf * -queue_stats_request(enum ofputil_protocol proto) -{ - struct ofputil_queue_stats_request oqsr; - memset(&oqsr, 0, sizeof(oqsr)); - oqsr.port_no = 0xabcd; - oqsr.queue_id = 0xffffffff; - return ofputil_encode_queue_stats_request( - ofputil_protocol_to_ofp_version(proto), &oqsr); -} - -struct ofpbuf * -group_stats_request(enum ofputil_protocol proto) -{ - uint32_t group_id = 0xfffffffc; - return ofputil_encode_group_stats_request( - ofputil_protocol_to_ofp_version(proto), group_id); -} - -struct ofpbuf * -group_desc_request(enum ofputil_protocol proto) -{ - uint32_t group_id = 0xcdab; - - return ofputil_encode_group_desc_request( - ofputil_protocol_to_ofp_version(proto), group_id); -} - -struct ofpbuf * -group_features_request(enum ofputil_protocol proto) -{ - return ofputil_encode_group_features_request( - ofputil_protocol_to_ofp_version(proto)); -} - -struct ofpbuf * -meter_stats_request(enum ofputil_protocol proto) -{ - uint32_t meter_id = 0xffffffff; - return ofputil_encode_meter_request( - ofputil_protocol_to_ofp_version(proto), - OFPUTIL_METER_STATS, meter_id); -} - -struct ofpbuf * -table_desc_request(enum ofputil_protocol proto) -{ - return ofputil_encode_table_desc_request( - ofputil_protocol_to_ofp_version(proto)); -} - -/* - * Barrier Message - */ - -struct ofpbuf * -barrier_request(enum ofputil_protocol proto) -{ - return ofputil_encode_barrier_request( - ofputil_protocol_to_ofp_version(proto)); -} - -/* - * Bundle messages - */ - -struct ofpbuf * -bundle_ctrl(enum ofputil_protocol proto) -{ - struct ofputil_bundle_ctrl_msg msg; - struct ofp_header oh; - - memset(&oh, 0, sizeof(oh)); - oh.xid = 0; - oh.version = ofputil_protocol_to_ofp_version(proto); - memset(&msg, 0, sizeof(msg)); - msg.bundle_id = 99999999; - msg.type = OFPBCT_OPEN_REPLY; - msg.flags = OFPBF_ATOMIC; - return ofputil_encode_bundle_ctrl_reply(&oh, &msg); -} - -struct ofpbuf * -bundle_add(enum ofputil_protocol proto) -{ - struct ofputil_bundle_add_msg msg; - struct ofpbuf *fm; - struct ofpbuf *add; - - memset(&msg, 0, sizeof(msg)); - msg.bundle_id = 99999999; - msg.flags = OFPBF_ATOMIC; - fm = flow_mod(proto); - clear_xid(fm); - msg.msg = fm->data; - add = ofputil_encode_bundle_add( - ofputil_protocol_to_ofp_version(proto), &msg); - ofpbuf_delete(fm); - return add; -} - -/* - * Asynchronous Messages - */ - -struct ofpbuf * -packet_in(enum ofputil_protocol proto) -{ - struct ofputil_packet_in pin; - struct match match; - struct ofpbuf *buf; - - memset(&pin, 0, sizeof(pin)); - pin.packet = "hoge"; - pin.packet_len = 4; - pin.total_len = 1000; - pin.table_id = 100; - pin.buffer_id = 200; - - fill_match(&match); - flow_get_metadata(&match.flow, &pin.flow_metadata); - - return ofputil_encode_packet_in(&pin, proto, NXPIF_OPENFLOW10); -} - -struct ofpbuf * -flow_removed(enum ofputil_protocol proto) -{ - struct ofputil_flow_removed fr; - - memset(&fr, 0, sizeof(fr)); - fill_match(&fr.match); - fr.cookie = htonll(0x123456789abcdef0); - fr.priority = 100; - fr.reason = 0; // OFPRR_IDLE_TIMEOUT - fr.table_id = 1; - fr.duration_sec = 600; - fr.duration_nsec = 500; - fr.idle_timeout = 400; - fr.hard_timeout = 300; - fr.packet_count = 200; - fr.byte_count = 100; - - return ofputil_encode_flow_removed(&fr, proto); -} - -struct ofpbuf * -port_status(enum ofputil_protocol proto) -{ - struct ofputil_port_status ps; - - memset(&ps, 0, sizeof(ps)); - ps.reason = 2; // OFPPR_MODIFY - ps.desc.port_no = 1; - memset(&ps.desc.hw_addr, 0xff, sizeof(ps.desc.hw_addr)); - sprintf(ps.desc.name, "eth0"); - ps.desc.config = 0; - ps.desc.state = 4; - ps.desc.curr = 10248; // OFPPF_100MB_FD, OFPPF_COPPER, OFPPF_AUTONEG - ps.desc.advertised = 10248; - ps.desc.supported = 10248; - ps.desc.peer = 10248; - ps.desc.curr_speed = 50000; // kbps - ps.desc.max_speed = 100000; // kbps - - return ofputil_encode_port_status(&ps, proto); -} - - -struct ofpbuf * -role_status(enum ofputil_protocol proto) -{ - struct ofputil_role_status rs; - - memset(&rs, 0, sizeof(rs)); - rs.role = OFPCR12_ROLE_SLAVE; // OFPCR_ROLE_SLAVE - rs.reason = OFPCRR_MASTER_REQUEST; // OFPCRR_MASTER_REQUEST - rs.generation_id = htonll(0x123456789abcdef0); - - return ofputil_encode_role_status(&rs, proto); -} - - -struct ofpbuf * -requestforward(enum ofputil_protocol proto) -{ - struct ofputil_requestforward rf; - - memset(&rf, 0, sizeof(rf)); - rf.reason = OFPRFR_GROUP_MOD; - - struct ofputil_group_mod gm; - struct ofpbuf acts; - struct ofpact_ipv4 *a_set_field; - struct ofpact_goto_table *a_goto; - struct ofputil_bucket bckt; - - memset(&gm, 0, sizeof(gm)); - gm.command = OFPGC15_INSERT_BUCKET; - gm.type = OFPGT11_SELECT; - gm.group_id = 0xaaaaaaaa; - gm.command_bucket_id = 0xbbbbbbbb; - - ofpbuf_init(&acts, 0x18); - ofpact_put_STRIP_VLAN(&acts); - a_set_field = ofpact_put_SET_IPV4_DST(&acts); - a_set_field->ipv4 = inet_addr("192.168.2.9"); - - bckt.weight = 0xcccc; - bckt.watch_port = 0xdddd; - bckt.watch_group = 0xeeeeeeee; - bckt.bucket_id = 0x12345678; - bckt.ofpacts = acts.data; - bckt.ofpacts_len = acts.size; - - list_init(&(gm.buckets)); - list_push_back(&(gm.buckets), &(bckt.list_node)); - - rf.group_mod = &gm; - - return ofputil_encode_requestforward(&rf, proto); -} - -/* - * Symmetric Messages - */ - -struct ofpbuf * -hello(enum ofputil_protocol proto) -{ - return ofputil_encode_hello(ofputil_protocols_to_version_bitmap(proto)); -} - -struct ofpbuf * -echo_request(enum ofputil_protocol proto) -{ - return make_echo_request(ofputil_protocol_to_ofp_version(proto)); -} - -struct ofpbuf * -echo_reply(enum ofputil_protocol proto) -{ - struct ofp_header oh; - - memset(&oh, 0, sizeof(oh)); - oh.version = ofputil_protocol_to_ofp_version(proto); - oh.type = 3; // OFPT_ECHO_REPLY - oh.length = htons(8); // lenght of ofp_header - oh.xid = 0; - - return make_echo_reply(&oh); -} - -struct ofpbuf * -error_msg(enum ofputil_protocol proto) -{ - struct ofp_header oh; - - memset(&oh, 0, sizeof(oh)); - oh.version = ofputil_protocol_to_ofp_version(proto); - oh.type = 14; // OFPT_FLOW_MOD - oh.length = htons(8); // lenght of ofp_header - oh.xid = 0; - - // OFPERR_OFPBMC_BAD_FIELD means - // "Unsupported field in the match." - // - type: OFPET_BAD_MATCH = 4 - // - code: OFPBMC_BAD_FIELD = 6 - return ofperr_encode_reply(OFPERR_OFPBMC_BAD_FIELD, &oh); -} - -/* - * Utilities - */ - -void -dump_ofpbuf(const char *name, const struct ofpbuf *buf) -{ - FILE *fp; - size_t written; - - fp = fopen(name, "wb"); - if (fp == NULL) { - err(1, "fopen"); - } - written = fwrite(buf->data, buf->size, 1, fp); - if (written != 1) { - err(1, "fwrite"); - } - if (fclose(fp) != 0) { - err(1, "fclose"); - } -} - -void -dump_message(const char *name, struct ofpbuf *buf) -{ - - ofpmsg_update_length(buf); - dump_ofpbuf(name, buf); -} - -struct protocol_version { - const char *name; - const char *dir_name; - enum ofp_version version; -}; - -#define P(v) {.name = "OFP" #v, .dir_name = "of" #v, \ - .version = OFP ## v ## _VERSION,} - -const struct protocol_version p13 = P(13); -const struct protocol_version p15 = P(15); - -struct message { - const char *name; - struct ofpbuf *(*gen)(enum ofputil_protocol); - const struct protocol_version **protocols; -}; - -#define M(m, p) {.name = #m, .gen = m, .protocols = p,} - -const struct message messages[] = { - /* Controller-to-Switch Messages */ - /* Handshake */ - // TODO: - // The following messages are not supported in Open vSwitch 2.5.90, - // re-generate the packet data, later. - // - OFP10+ Features Request Message - // M(features_request, - // ((const struct protocol_version *[]){&p13, &p15, NULL})), - M(features_reply, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - /* Switch Configuration */ - // TODO: - // The following messages are not supported in Open vSwitch 2.5.90, - // re-generate the packet data, later. - // - OFP10+ Get Switch Configuration Request Message - M(set_config, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - // M(get_config_request, - // ((const struct protocol_version *[]){&p13, &p15, NULL})), - M(get_config_reply, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - /* Modify State Messages */ - // TODO: - // The following messages are not supported in Open vSwitch 2.4.90, - // re-generate the packet data, later. - // - OFP14+ Port Modification Message [EXT-154] - M(table_mod, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - M(flow_mod, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - M(flow_mod_match_conj, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - M(flow_mod_conjunction, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - M(group_mod, - ((const struct protocol_version *[]){&p15, NULL})), - M(port_mod, - ((const struct protocol_version *[]){&p13, NULL})), - M(meter_mod, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - /* Multipart Messages */ - // TODO: - // The following messages are not supported in Open vSwitch 2.4.90, - // re-generate the packet data, later. - // - OFP10+ Desc Stats Request Message - // - OFP10+ Desc Stats Reply Message - // - OFP15+ Flow Desc Request Message [EXT-334] - // - OFP15+ Flow Desc Reply Message [EXT-334] - // - OFP15+ Flow Stats Request Message [EXT-302] - // - OFP15+ Flow Stats Reply Message [EXT-334] - // - OFP15+ Aggregate Stats Reply Message [EXT-334] - // - OFP14+ Port Stats Reply Message [EXT-262] - // - OFP14+ Port Desc Reply Message [EXT-262] - // - OFP14+ Queue Stats Reply Message [EXT-262] - // - OFP14+ Queue Desc Request Message [EXT-262] - // - OFP14+ Queue Desc Reply Message [EXT-262] - // - OFP13+ Group Stats Reply Message [EXT-102] - // - OFP15+ Group Desc Reply Message [EXT-350] - // - OFP12+ Group Features Reply Message [EXT-61] - // - OFP15+ Meter Stats Reply Message [EXT-374] - // - OFP15+ Meter Desc Request Message [EXT-302] - // - OFP15+ Meter Desc Reply Message [EXT-302] - // - OFP13+ Meter Features Stats Request Message [EXT-14] - // - OFP13+ Meter Features Stats Reply Message [EXT-14] - // - OFP15+ Controller Status Stats Request Message [EXT-454] - // - OFP15+ Controller Status Stats Reply Message [EXT-454] - // - OFP14+ Table Desc Reply Message [EXT-262] - // - OFP15+ Table Features Stats Request Message [EXT-306] - // - OFP15+ Table Features Stats Reply Message [EXT-306] - // - OFP14+ Flow Monitor Request Message [EXT-187] - // - OFP14+ Flow Monitor Reply Message [EXT-187] - // - OFP15+ Bundle Features Stats Request Message [EXT-340] - // - OFP15+ Bundle Features Stats Reply Message [EXT-340] - // - OFP11+ Experimenter Stats Request - // - OFP11+ Experimenter Stats Reply - // M(desc_stats_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(desc_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(flow_desc_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(flow_desc_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(flow_stats_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(flow_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - M(aggregate_stats_request, - ((const struct protocol_version *[]){&p15, NULL})), - // M(aggregate_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - M(port_stats_request, - ((const struct protocol_version *[]){&p15, NULL})), - // M(port_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - M(port_desc_request, - ((const struct protocol_version *[]){&p15, NULL})), - // M(port_desc_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - M(queue_stats_request, - ((const struct protocol_version *[]){&p15, NULL})), - // M(queue_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(queue_desc_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(queue_desc_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - M(group_stats_request, - ((const struct protocol_version *[]){&p15, NULL})), - // M(group_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - M(group_desc_request, - ((const struct protocol_version *[]){&p15, NULL})), - // M(group_desc_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - M(group_features_request, - ((const struct protocol_version *[]){&p15, NULL})), - // M(group_features_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - M(meter_stats_request, - ((const struct protocol_version *[]){&p15, NULL})), - // M(meter_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(meter_desc_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(meter_desc_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(meter_features_stats_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(meter_features_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(controller_status_stats_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(controller_status_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - M(table_desc_request, - ((const struct protocol_version *[]){&p15, NULL})), - // M(table_desc_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(table_features_stats_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(table_features_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(flow_monitor_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(flow_monitor_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(bundle_features_stats_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(bundle_features_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(experimenter_stats_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(experimenter_stats_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - /* Packet-Out Message */ - // TODO: - // The following message are not supported in Open vSwitch 2.4.90, - // re-generate the packet data, later. - // - OFP15+ Packet Out Message [EXT-427] - // M(packet_out, - // ((const struct protocol_version *[]){&p15, NULL})), - /* Barrier Message */ - // TODO: - // The following message are not supported in Open vSwitch 2.4.90, - // re-generate the packet data, later. - // - OFP10+ Barrier Reply Message - M(barrier_request, - ((const struct protocol_version *[]){&p15, NULL})), - // M(barrier_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - /* Role Request Message */ - // TODO: - // The following messages are not supported in Open vSwitch 2.4.90, - // re-generate the packet data, later. - // - OFP15+ Role Request Message [EXT-275] - // - OFP15+ Role Reply Message [EXT-275] - // M(role_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(role_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - /* Bundle messages */ - M(bundle_ctrl, - ((const struct protocol_version *[]){&p15, NULL})), - M(bundle_add, - ((const struct protocol_version *[]){&p15, NULL})), - /* Set Asynchronous Configuration Message */ - // TODO: - // The following messages are not supported in Open vSwitch 2.4.90, - // re-generate the packet data, later. - // - OFP14+ Set Async Message [EXT-262] - // - OFP14+ Get Async Request Message [EXT-262] - // - OFP14+ Get Async Reply Message [EXT-262] - // M(set_async, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(get_async_request, - // ((const struct protocol_version *[]){&p15, NULL})), - // M(get_async_reply, - // ((const struct protocol_version *[]){&p15, NULL})), - /* Asynchronous Messages */ - // TODO: - // The following messages are not supported in Open vSwitch 2.4.90, - // re-generate the packet data, later. - // - OFP15 Flow Removed Message [EXT-334] - // - OFP14+ Port Status Message [EXT-154] - // - OFP14+ Table Status Message [EXT-232] - // - OFP15+ Controller Status Message [EXT-454] - M(packet_in, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - M(flow_removed, - ((const struct protocol_version *[]){&p13, NULL})), - M(port_status, - ((const struct protocol_version *[]){&p13, NULL})), - // M(table_status, - // ((const struct protocol_version *[]){&p15, NULL})), - M(role_status, - ((const struct protocol_version *[]){&p15, NULL})), - M(requestforward, - ((const struct protocol_version *[]){&p15, NULL})), - // M(controller_status, - // ((const struct protocol_version *[]){&p15, NULL})), - /* Symmetric Messages */ - M(hello, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - M(echo_request, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - M(echo_reply, - ((const struct protocol_version *[]){&p13, &p15, NULL})), - M(error_msg, - ((const struct protocol_version *[]){&p13, &p15, NULL})), -}; - -#if !defined(__arraycount) -#define __arraycount(a) (sizeof(a) / sizeof(a[0])) -#endif - -/* - * Main - */ - -int -main(int argc, char *argv[]) -{ - struct ofpbuf *buf; - unsigned int i, j; - - for (i = 0; i < __arraycount(messages); i++) { - const struct message * const m = &messages[i]; - char name[255]; - - for (j = 0;; j++) { - const struct protocol_version * const p = m->protocols[j]; - - if (p == NULL) { - break; - } - const enum ofputil_protocol proto = - ofputil_protocol_from_ofp_version(p->version); - - buf = (*m->gen)(proto); - snprintf(name, sizeof(name), - "../packet_data/%s/libofproto-%s-%s.packet", - p->dir_name, p->name, m->name); - printf("generating %s ...\n", name); - clear_xid(buf); - dump_message(name, buf); - ofpbuf_delete(buf); - } - } -} diff --git a/ryu/tests/packet_data_generator3/gen.py b/ryu/tests/packet_data_generator3/gen.py deleted file mode 100644 index 92676e46..00000000 --- a/ryu/tests/packet_data_generator3/gen.py +++ /dev/null @@ -1,329 +0,0 @@ -#! /usr/bin/env python - -from __future__ import print_function - -import getopt -import os -import six -from six.moves import socketserver -import subprocess -import sys -import tempfile -import threading - -from ryu.ofproto import ofproto_parser -from ryu.ofproto import ofproto_v1_0 -from ryu.ofproto import ofproto_v1_0_parser -from ryu.ofproto import ofproto_v1_5 -from ryu.ofproto import ofproto_v1_5_parser -from ryu.ofproto import ofproto_protocol - -if six.PY3: - TimeoutExpired = subprocess.TimeoutExpired -else: - # As python2 doesn't have timeout for subprocess.call, - # this script may hang. - TimeoutExpired = None - -STD_MATCH = [ - 'in_port=43981', - 'dl_vlan=999', - 'dl_dst=aa:bb:cc:99:88:77', - 'dl_type=0x0800', # ETH_TYPE_IP - 'nw_dst=192.168.2.1', - 'tun_src=192.168.2.3', - 'tun_dst=192.168.2.4', - 'tun_id=50000'] - -MESSAGES = [ - {'name': 'action_learn', - 'versions': [4], - 'cmd': 'add-flow', - 'args': ['table=2', - 'importance=39032'] + STD_MATCH + [ - 'actions=strip_vlan,mod_nw_dst:192.168.2.9,' + - 'learn(table=99,priority=1,hard_timeout=300,' + - 'OXM_OF_VLAN_VID[0..11],' + - 'OXM_OF_ETH_DST[]=OXM_OF_ETH_SRC[],' + - 'load:0->OXM_OF_VLAN_VID[],' + - 'load:OXM_OF_TUNNEL_ID[]->OXM_OF_TUNNEL_ID[],' + - 'output:OXM_OF_IN_PORT[]),goto_table:100']}, - {'name': 'match_conj', - 'versions': [4], - 'cmd': 'mod-flows', - 'args': ['table=3', - 'cookie=0x123456789abcdef0/0xffffffffffffffff', - 'dl_vlan=1234', - 'conj_id=0xabcdef', - 'actions=strip_vlan,goto_table:100']}, - {'name': 'match_pkt_mark', - 'versions': [4], - 'cmd': 'mod-flows', - 'args': ['table=3', - 'cookie=0x123456789abcdef0/0xffffffffffffffff', - 'dl_vlan=1234', - 'pkt_mark=54321', - 'actions=strip_vlan,goto_table:100']}, - {'name': 'match_pkt_mark_masked', - 'versions': [4], - 'cmd': 'mod-flows', - 'args': ['table=3', - 'cookie=0x123456789abcdef0/0xffffffffffffffff', - 'dl_vlan=1234', - 'pkt_mark=0xd431/0xffff', - 'actions=strip_vlan,goto_table:100']}, - {'name': 'action_conjunction', - 'versions': [4], - 'cmd': 'mod-flows', - 'args': (['table=2', - 'cookie=0x123456789abcdef0/0xffffffffffffffff'] + - STD_MATCH + - ['actions=conjunction(0xabcdef,1/2)'])}, - {'name': 'match_load_nx_register', - 'versions': [4], - 'cmd': 'mod-flows', - 'args': ['table=3', - 'cookie=0x123456789abcdef0/0xffffffffffffffff', - 'reg0=0x1234', - 'reg5=0xabcd/0xffff', - 'actions=load:0xdeadbee->NXM_NX_REG0[4..31]']}, - {'name': 'match_move_nx_register', - 'versions': [4], - 'cmd': 'mod-flows', - 'args': ['table=3', - 'cookie=0x123456789abcdef0/0xffffffffffffffff', - 'reg0=0x1234', - 'reg5=0xabcd/0xffff', - 'actions=move:NXM_NX_REG0[10..15]->NXM_NX_REG1[0..5]']}, - {'name': 'action_resubmit', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['table=3', - 'importance=39032'] + - STD_MATCH + - ['actions=resubmit(1234,99)'])}, - {'name': 'action_ct', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['table=3,', - 'importance=39032'] + - ['dl_type=0x0800,ct_state=-trk'] + - ['actions=ct(table=4,zone=NXM_NX_REG0[4..31])'])}, - {'name': 'action_ct_exec', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['table=3,', - 'importance=39032'] + - ['dl_type=0x0800,ct_state=+trk+est'] + - ['actions=ct(commit,exec(set_field:0x654321->ct_mark))'])}, - {'name': 'action_ct_nat', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['table=3,', - 'importance=39032'] + - ['dl_type=0x0800'] + - ['actions=ct(commit,nat(src=10.1.12.0-10.1.13.255:1-1023)'])}, - {'name': 'action_ct_nat_v6', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['table=3,', - 'importance=39032'] + - ['dl_type=0x86dd'] + - ['actions=ct(commit,nat(dst=2001:1::1-2001:1::ffff)'])}, - {'name': 'action_note', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['priority=100'] + - ['actions=note:04.05.06.07.00.00'])}, - {'name': 'action_controller', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['priority=100'] + - ['actions=controller(reason=packet_out,max_len=1024,id=1)'])}, - {'name': 'action_fintimeout', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['priority=100,tcp'] + - ['actions=fin_timeout(idle_timeout=30,hard_timeout=60)'])}, - {'name': 'action_dec_nw_ttl', - 'versions': [1], - 'cmd': 'add-flow', - 'args': (['priority=100,mpls'] + - ['actions=dec_ttl'])}, - {'name': 'action_push_mpls', - 'versions': [1], - 'cmd': 'add-flow', - 'args': (['priority=100,ip'] + - ['actions=push_mpls:0x8847'])}, - {'name': 'action_pop_mpls', - 'versions': [1], - 'cmd': 'add-flow', - 'args': (['priority=100,mpls'] + - ['actions=pop_mpls:0x0800'])}, - {'name': 'action_set_mpls_ttl', - 'versions': [1], - 'cmd': 'add-flow', - 'args': (['priority=100,mpls'] + - ['actions=set_mpls_ttl(127)'])}, - {'name': 'action_dec_mpls_ttl', - 'versions': [1], - 'cmd': 'add-flow', - 'args': (['priority=100,mpls'] + - ['actions=dec_mpls_ttl'])}, - {'name': 'action_set_mpls_label', - 'versions': [1], - 'cmd': 'add-flow', - 'args': (['priority=100,mpls'] + - ['actions=set_mpls_label(10)'])}, - {'name': 'action_set_mpls_tc', - 'versions': [1], - 'cmd': 'add-flow', - 'args': (['priority=100,mpls'] + - ['actions=set_mpls_tc(10)'])}, - {'name': 'action_dec_ttl_cnt_ids', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['priority=100,tcp'] + - ['actions=dec_ttl(1,2,3,4,5)'])}, - {'name': 'action_stack_push', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['priority=100'] + - ['actions=push:NXM_NX_REG2[1..5]'])}, - {'name': 'action_stack_pop', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['priority=100'] + - ['actions=pop:NXM_NX_REG2[1..5]'])}, - {'name': 'action_sample', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['priority=100'] + - ['actions=sample(probability=3,collector_set_id=1,' + - 'obs_domain_id=2,obs_point_id=3)'])}, - {'name': 'action_sample2', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['priority=100'] + - ['actions=sample(probability=3,collector_set_id=1,' + - 'obs_domain_id=2,obs_point_id=3,sampling_port=8080)'])}, - {'name': 'action_controller2', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['priority=100'] + - ['actions=controller(reason=packet_out,max_len=1024,' + - 'id=10,userdata=01.02.03.04.05,pause)'])}, - {'name': 'action_output_trunc', - 'versions': [4], - 'cmd': 'add-flow', - 'args': (['priority=100'] + - ['actions=output(port=8080,max_len=1024)'])}, - - - # ToDo: The following actions are not eligible - # {'name': 'action_regload2'}, - # {'name': 'action_outputreg2'}, -] - -buf = [] - - -class MyHandler(socketserver.BaseRequestHandler): - verbose = False - - def handle(self): - desc = ofproto_protocol.ProtocolDesc() - residue = b'' - while True: - if residue: - data = residue - residue = b'' - else: - data = self.request.recv(1024) - if data == b'': - break - if self.verbose: - print(data) - h = ofproto_parser.header(data) - if self.verbose: - print(h) - version, msg_type, msg_len, xid = h - residue = data[msg_len:] - desc.set_version(version=version) - if msg_type == desc.ofproto.OFPT_HELLO: - hello = desc.ofproto_parser.OFPHello(desc) - hello.serialize() - self.request.send(hello.buf) - elif msg_type == desc.ofproto.OFPT_FLOW_MOD: - # HACK: Clear xid into zero - buf.append(data[:4] + b'\x00\x00\x00\x00' + data[8:msg_len]) - elif msg_type == desc.ofproto.OFPT_BARRIER_REQUEST: - brep = desc.ofproto_parser.OFPBarrierReply(desc) - brep.xid = xid - brep.serialize() - self.request.send(brep.buf) - break - - -class MyVerboseHandler(MyHandler): - verbose = True - -if __name__ == '__main__': - optlist, args = getopt.getopt(sys.argv[1:], 'dvo:') - debug = False - ofctl_cmd = '/usr/bin/ovs-ofctl' - verbose = False - for o, a in optlist: - if o == '-d': - debug = True - elif o == '-v': - verbose = True - elif o == '-o': - ofctl_cmd = a - - if not os.access(ofctl_cmd, os.X_OK): - raise Exception("%s is not executable" % ofctl_cmd) - outpath = '../packet_data' - socketdir = tempfile.mkdtemp() - socketname = os.path.join(socketdir, 'ovs') - server = socketserver.UnixStreamServer(socketname, - MyVerboseHandler if verbose else - MyHandler) - if debug or verbose: - print("Serving at %s" % socketname) - - for msg in MESSAGES: - for v in msg['versions']: - cmdargs = [ofctl_cmd, '-O', 'OpenFlow%2d' % (v + 9)] - if verbose: - cmdargs.append('-v') - cmdargs.append(msg['cmd']) - cmdargs.append('unix:%s' % socketname) - cmdargs.append('\n'.join(msg['args'])) - if verbose: - print("Running cmd: " + ' '.join(cmdargs) + "\n") - t = threading.Thread(target=subprocess.call, args=[cmdargs], - kwargs={'timeout': 5}) - t.start() - server.handle_request() - if debug: - print(buf.pop()) - else: - outf = os.path.join( - outpath, "of%d" % (v + 9), - "ovs-ofctl-of%d-%s.packet" % (v + 9, msg['name'])) - print("Writing %s..." % outf) - with open(outf, 'wb') as f: - f.write(buf.pop()) - try: - t.join() - except TimeoutExpired as e: - print(e) - - if debug: - while True: - server.handle_request() - print(buf.pop()) - - os.unlink(socketname) - os.rmdir(socketdir) diff --git a/ryu/tests/run_tests.py b/ryu/tests/run_tests.py deleted file mode 100755 index 835e789b..00000000 --- a/ryu/tests/run_tests.py +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env python - - -import os -import sys - -from nose import config -from nose import core - -sys.path.append(os.getcwd()) -sys.path.append(os.path.dirname(__file__)) - - -import ryu.tests.unit -from ryu.tests.test_lib import run_tests - - -if __name__ == '__main__': - exit_status = False - - # if a single test case was specified, - # we should only invoked the tests once - invoke_once = len(sys.argv) > 1 - - cwd = os.getcwd() - c = config.Config(stream=sys.stdout, - env=os.environ, - verbosity=int(os.environ.get('NOSE_VERBOSE', 3)), - includeExe=True, - traverseNamespace=True, - plugins=core.DefaultPluginManager()) - c.configureWhere(ryu.tests.unit.__path__) - - exit_status = run_tests(c) - sys.exit(exit_status) diff --git a/ryu/tests/test_lib.py b/ryu/tests/test_lib.py deleted file mode 100644 index c1c0f82e..00000000 --- a/ryu/tests/test_lib.py +++ /dev/null @@ -1,270 +0,0 @@ -# Copyright (C) 2013,2014,2015 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013,2014,2015 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import gettext -import os -import unittest -import six -import sys -import types -import logging - -from nose import result -from nose import core -from nose import config - - -class _AnsiColorizer(object): - """ - A colorizer is an object that loosely wraps around a stream, allowing - callers to write text to the stream in a particular color. - - Colorizer classes must implement C{supported()} and C{write(text, color)}. - """ - _colors = dict(black=30, red=31, green=32, yellow=33, - blue=34, magenta=35, cyan=36, white=37) - - def __init__(self, stream): - self.stream = stream - - def supported(cls, stream=sys.stdout): - """ - A class method that returns True if the current platform supports - coloring terminal output using this method. Returns False otherwise. - """ - if not stream.isatty(): - return False # auto color only on TTYs - try: - import curses - except ImportError: - return False - else: - try: - try: - return curses.tigetnum("colors") > 2 - except curses.error: - curses.setupterm() - return curses.tigetnum("colors") > 2 - except: - # guess false in case of error - return False - supported = classmethod(supported) - - def write(self, text, color): - """ - Write the given text to the stream in the given color. - - @param text: Text to be written to the stream. - - @param color: A string label for a color. e.g. 'red', 'white'. - """ - color = self._colors[color] - self.stream.write('\x1b[%s;1m%s\x1b[0m' % (color, text)) - - -class _Win32Colorizer(object): - """ - See _AnsiColorizer docstring. - """ - def __init__(self, stream): - from win32console import GetStdHandle, STD_OUT_HANDLE - from win32console import FOREGROUND_RED, FOREGROUND_BLUE - from win32console import FOREGROUND_GREEN, FOREGROUND_INTENSITY - red, green, blue, bold = (FOREGROUND_RED, FOREGROUND_GREEN, - FOREGROUND_BLUE, FOREGROUND_INTENSITY) - self.stream = stream - self.screenBuffer = GetStdHandle(STD_OUT_HANDLE) - self._colors = { - 'normal': red | green | blue, - 'red': red | bold, - 'green': green | bold, - 'blue': blue | bold, - 'yellow': red | green | bold, - 'magenta': red | blue | bold, - 'cyan': green | blue | bold, - 'white': red | green | blue | bold} - - def supported(cls, stream=sys.stdout): - try: - import win32console - screenBuffer = win32console.GetStdHandle( - win32console.STD_OUT_HANDLE) - except ImportError: - return False - import pywintypes - try: - screenBuffer.SetConsoleTextAttribute( - win32console.FOREGROUND_RED | - win32console.FOREGROUND_GREEN | - win32console.FOREGROUND_BLUE) - except pywintypes.error: - return False - else: - return True - supported = classmethod(supported) - - def write(self, text, color): - color = self._colors[color] - self.screenBuffer.SetConsoleTextAttribute(color) - self.stream.write(text) - self.screenBuffer.SetConsoleTextAttribute(self._colors['normal']) - - -class _NullColorizer(object): - """ - See _AnsiColorizer docstring. - """ - def __init__(self, stream): - self.stream = stream - - def supported(cls, stream=sys.stdout): - return True - supported = classmethod(supported) - - def write(self, text, color): - self.stream.write(text) - - -class RyuTestResult(result.TextTestResult): - def __init__(self, *args, **kw): - result.TextTestResult.__init__(self, *args, **kw) - self._last_case = None - self.colorizer = None - # NOTE(vish, tfukushima): reset stdout for the terminal check - stdout = sys.__stdout__ - sys.stdout = sys.__stdout__ - for colorizer in [_Win32Colorizer, _AnsiColorizer, _NullColorizer]: - if colorizer.supported(): - self.colorizer = colorizer(self.stream) - break - sys.stdout = stdout - - def getDescription(self, test): - return str(test) - - # NOTE(vish, tfukushima): copied from unittest with edit to add color - def addSuccess(self, test): - unittest.TestResult.addSuccess(self, test) - if self.showAll: - self.colorizer.write("OK", 'green') - self.stream.writeln() - elif self.dots: - self.stream.write('.') - self.stream.flush() - - # NOTE(vish, tfukushima): copied from unittest with edit to add color - def addFailure(self, test, err): - unittest.TestResult.addFailure(self, test, err) - if self.showAll: - self.colorizer.write("FAIL", 'red') - self.stream.writeln() - elif self.dots: - self.stream.write('F') - self.stream.flush() - - # NOTE(vish, tfukushima): copied from unittest with edit to add color - def addError(self, test, err): - """Overrides normal addError to add support for errorClasses. - If the exception is a registered class, the error will be added - to the list for that class, not errors. - """ - stream = getattr(self, 'stream', None) - ec, ev, tb = err - try: - exc_info = self._exc_info_to_string(err, test) - except TypeError: - # This is for compatibility with Python 2.3. - exc_info = self._exc_info_to_string(err) - for cls, (storage, label, isfail) in self.errorClasses.items(): - if result.isclass(ec) and issubclass(ec, cls): - if isfail: - test.passwd = False - storage.append((test, exc_info)) - # Might get patched into a streamless result - if stream is not None: - if self.showAll: - message = [label] - detail = result._exception_detail(err[1]) - if detail: - message.append(detail) - stream.writeln(": ".join(message)) - elif self.dots: - stream.write(label[:1]) - return - self.errors.append((test, exc_info)) - test.passed = False - if stream is not None: - if self.showAll: - self.colorizer.write("ERROR", 'red') - self.stream.writeln() - elif self.dots: - stream.write('E') - - def startTest(self, test): - unittest.TestResult.startTest(self, test) - current_case = test.test.__class__.__name__ - - if self.showAll: - if current_case != self._last_case: - self.stream.writeln(current_case) - self._last_case = current_case - # NOTE(salvatore-orlando): - # slightly changed in order to print test case class - # together with unit test name - self.stream.write( - ' %s' % str(test.test).ljust(60)) - self.stream.flush() - - -class RyuTestRunner(core.TextTestRunner): - def _makeResult(self): - return RyuTestResult(self.stream, - self.descriptions, - self.verbosity, - self.config) - - -def run_tests(c=None): - logger = logging.getLogger() - hdlr = logging.StreamHandler() - formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') - hdlr.setFormatter(formatter) - logger.addHandler(hdlr) - logger.setLevel(logging.DEBUG) - - # NOTE(bgh): I'm not entirely sure why but nose gets confused here when - # calling run_tests from a plugin directory run_tests.py (instead of the - # main run_tests.py). It will call run_tests with no arguments and the - # testing of run_tests will fail (though the plugin tests will pass). For - # now we just return True to let the run_tests test pass. - if not c: - return True - - runner = RyuTestRunner(stream=c.stream, - verbosity=c.verbosity, - config=c) - return not core.run(config=c, testRunner=runner) - - -def add_method(cls, method_name, method): - """Add the method to the class dynamically, keeping unittest/nose happy.""" - method.func_name = method_name - method.__name__ = method_name - if six.PY3: - methodtype = types.MethodType(method, cls) - else: - methodtype = types.MethodType(method, None, cls) - setattr(cls, method_name, methodtype) diff --git a/ryu/tests/unit/__init__.py b/ryu/tests/unit/__init__.py deleted file mode 100644 index de6e5a33..00000000 --- a/ryu/tests/unit/__init__.py +++ /dev/null @@ -1,6 +0,0 @@ -from __future__ import absolute_import - -# Note: The following import statement is defined in order to resolve -# the conflict of the module names between 'ryu.lib.ovs' and 'ovs'. -# The latter is the official Python package of Open vSwitch. -import ovs diff --git a/ryu/tests/unit/app/__init__.py b/ryu/tests/unit/app/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/app/ofctl_rest_json/of10.json b/ryu/tests/unit/app/ofctl_rest_json/of10.json deleted file mode 100644 index 266eb80c..00000000 --- a/ryu/tests/unit/app/ofctl_rest_json/of10.json +++ /dev/null @@ -1,101 +0,0 @@ -[ - { - "method": "GET", - "path": "/stats/switches" - }, - { - "method": "GET", - "path": "/stats/desc/1" - }, - { - "method": "GET", - "path": "/stats/flow/1" - }, - { - "method": "POST", - "path": "/stats/flow/1" - }, - { - "method": "GET", - "path": "/stats/aggregateflow/1" - }, - { - "method": "POST", - "path": "/stats/aggregateflow/1" - }, - { - "method": "GET", - "path": "/stats/port/1" - }, - { - "method": "GET", - "path": "/stats/port/1/1" - }, - { - "method": "GET", - "path": "/stats/portdesc/1" - }, - { - "method": "GET", - "path": "/stats/queue/1" - }, - { - "method": "GET", - "path": "/stats/queue/1/1" - }, - { - "method": "GET", - "path": "/stats/queue/1/1/1" - }, - { - "method": "GET", - "path": "/stats/table/1" - }, - { - "method": "POST", - "path": "/stats/flowentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/modify_strict", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/delete_strict", - "body": { - "dpid": 1 - } - }, - { - "method": "DELETE", - "path": "/stats/flowentry/clear/1" - }, - { - "method": "POST", - "path": "/stats/portdesc/modify", - "body": { - "dpid": 1, - "port_no": 1 - } - } -] diff --git a/ryu/tests/unit/app/ofctl_rest_json/of12.json b/ryu/tests/unit/app/ofctl_rest_json/of12.json deleted file mode 100644 index 89a81919..00000000 --- a/ryu/tests/unit/app/ofctl_rest_json/of12.json +++ /dev/null @@ -1,150 +0,0 @@ -[ - { - "method": "GET", - "path": "/stats/switches" - }, - { - "method": "GET", - "path": "/stats/desc/1" - }, - { - "method": "GET", - "path": "/stats/flow/1" - }, - { - "method": "POST", - "path": "/stats/flow/1" - }, - { - "method": "GET", - "path": "/stats/aggregateflow/1" - }, - { - "method": "POST", - "path": "/stats/aggregateflow/1" - }, - { - "method": "GET", - "path": "/stats/port/1" - }, - { - "method": "GET", - "path": "/stats/port/1/1" - }, - { - "method": "GET", - "path": "/stats/portdesc/1" - }, - { - "method": "GET", - "path": "/stats/queue/1" - }, - { - "method": "GET", - "path": "/stats/queue/1/1" - }, - { - "method": "GET", - "path": "/stats/queue/1/1/1" - }, - { - "method": "GET", - "path": "/stats/queueconfig/1" - }, - { - "method": "GET", - "path": "/stats/queueconfig/1/1" - }, - { - "method": "GET", - "path": "/stats/group/1" - }, - { - "method": "GET", - "path": "/stats/group/1/1" - }, - { - "method": "GET", - "path": "/stats/groupdesc/1" - }, - { - "method": "GET", - "path": "/stats/groupfeatures/1" - }, - { - "method": "GET", - "path": "/stats/table/1" - }, - { - "method": "POST", - "path": "/stats/flowentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/modify_strict", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/delete_strict", - "body": { - "dpid": 1 - } - }, - { - "method": "DELETE", - "path": "/stats/flowentry/clear/1" - }, - { - "method": "POST", - "path": "/stats/groupentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/groupentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/groupentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/portdesc/modify", - "body": { - "dpid": 1, - "port_no": 1 - } - }, - { - "method": "POST", - "path": "/stats/experimenter/1" - } -] diff --git a/ryu/tests/unit/app/ofctl_rest_json/of13.json b/ryu/tests/unit/app/ofctl_rest_json/of13.json deleted file mode 100644 index d515f628..00000000 --- a/ryu/tests/unit/app/ofctl_rest_json/of13.json +++ /dev/null @@ -1,191 +0,0 @@ -[ - { - "method": "GET", - "path": "/stats/switches" - }, - { - "method": "GET", - "path": "/stats/desc/1" - }, - { - "method": "GET", - "path": "/stats/flow/1" - }, - { - "method": "POST", - "path": "/stats/flow/1" - }, - { - "method": "GET", - "path": "/stats/aggregateflow/1" - }, - { - "method": "POST", - "path": "/stats/aggregateflow/1" - }, - { - "method": "GET", - "path": "/stats/port/1" - }, - { - "method": "GET", - "path": "/stats/port/1/1" - }, - { - "method": "GET", - "path": "/stats/portdesc/1" - }, - { - "method": "GET", - "path": "/stats/queue/1" - }, - { - "method": "GET", - "path": "/stats/queue/1/1" - }, - { - "method": "GET", - "path": "/stats/queue/1/1/1" - }, - { - "method": "GET", - "path": "/stats/queueconfig/1" - }, - { - "method": "GET", - "path": "/stats/queueconfig/1/1" - }, - { - "method": "GET", - "path": "/stats/group/1" - }, - { - "method": "GET", - "path": "/stats/group/1/1" - }, - { - "method": "GET", - "path": "/stats/groupdesc/1" - }, - { - "method": "GET", - "path": "/stats/groupfeatures/1" - }, - { - "method": "GET", - "path": "/stats/meter/1" - }, - { - "method": "GET", - "path": "/stats/meter/1/1" - }, - { - "method": "GET", - "path": "/stats/meterconfig/1" - }, - { - "method": "GET", - "path": "/stats/meterconfig/1/1" - }, - { - "method": "GET", - "path": "/stats/meterfeatures/1" - }, - { - "method": "GET", - "path": "/stats/table/1" - }, - { - "method": "POST", - "path": "/stats/flowentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/modify_strict", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/delete_strict", - "body": { - "dpid": 1 - } - }, - { - "method": "DELETE", - "path": "/stats/flowentry/clear/1" - }, - { - "method": "POST", - "path": "/stats/groupentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/groupentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/groupentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/portdesc/modify", - "body": { - "dpid": 1, - "port_no": 1 - } - }, - { - "method": "POST", - "path": "/stats/meterentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/meterentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/meterentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/experimenter/1" - } -] diff --git a/ryu/tests/unit/app/ofctl_rest_json/of14.json b/ryu/tests/unit/app/ofctl_rest_json/of14.json deleted file mode 100644 index 0cc4eb6c..00000000 --- a/ryu/tests/unit/app/ofctl_rest_json/of14.json +++ /dev/null @@ -1,195 +0,0 @@ -[ - { - "method": "GET", - "path": "/stats/switches" - }, - { - "method": "GET", - "path": "/stats/desc/1" - }, - { - "method": "GET", - "path": "/stats/flow/1" - }, - { - "method": "POST", - "path": "/stats/flow/1" - }, - { - "method": "GET", - "path": "/stats/aggregateflow/1" - }, - { - "method": "POST", - "path": "/stats/aggregateflow/1" - }, - { - "method": "GET", - "path": "/stats/port/1" - }, - { - "method": "GET", - "path": "/stats/port/1/1" - }, - { - "method": "GET", - "path": "/stats/portdesc/1" - }, - { - "method": "GET", - "path": "/stats/queue/1" - }, - { - "method": "GET", - "path": "/stats/queue/1/1" - }, - { - "method": "GET", - "path": "/stats/queue/1/1/1" - }, - { - "method": "GET", - "path": "/stats/queuedesc/1" - }, - { - "method": "GET", - "path": "/stats/queuedesc/1/1" - }, - { - "method": "GET", - "path": "/stats/queuedesc/1/1/1" - }, - { - "method": "GET", - "path": "/stats/group/1" - }, - { - "method": "GET", - "path": "/stats/group/1/1" - }, - { - "method": "GET", - "path": "/stats/groupdesc/1" - }, - { - "method": "GET", - "path": "/stats/groupfeatures/1" - }, - { - "method": "GET", - "path": "/stats/meter/1" - }, - { - "method": "GET", - "path": "/stats/meter/1/1" - }, - { - "method": "GET", - "path": "/stats/meterconfig/1" - }, - { - "method": "GET", - "path": "/stats/meterconfig/1/1" - }, - { - "method": "GET", - "path": "/stats/meterfeatures/1" - }, - { - "method": "GET", - "path": "/stats/table/1" - }, - { - "method": "POST", - "path": "/stats/flowentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/modify_strict", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/delete_strict", - "body": { - "dpid": 1 - } - }, - { - "method": "DELETE", - "path": "/stats/flowentry/clear/1" - }, - { - "method": "POST", - "path": "/stats/groupentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/groupentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/groupentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/portdesc/modify", - "body": { - "dpid": 1, - "port_no": 1 - } - }, - { - "method": "POST", - "path": "/stats/meterentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/meterentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/meterentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/experimenter/1" - } -] diff --git a/ryu/tests/unit/app/ofctl_rest_json/of15.json b/ryu/tests/unit/app/ofctl_rest_json/of15.json deleted file mode 100644 index a7569223..00000000 --- a/ryu/tests/unit/app/ofctl_rest_json/of15.json +++ /dev/null @@ -1,203 +0,0 @@ -[ - { - "method": "GET", - "path": "/stats/switches" - }, - { - "method": "GET", - "path": "/stats/desc/1" - }, - { - "method": "GET", - "path": "/stats/flow/1" - }, - { - "method": "POST", - "path": "/stats/flow/1" - }, - { - "method": "GET", - "path": "/stats/aggregateflow/1" - }, - { - "method": "POST", - "path": "/stats/aggregateflow/1" - }, - { - "method": "GET", - "path": "/stats/port/1" - }, - { - "method": "GET", - "path": "/stats/port/1/1" - }, - { - "method": "GET", - "path": "/stats/portdesc/1" - }, - { - "method": "GET", - "path": "/stats/portdesc/1/1" - }, - { - "method": "GET", - "path": "/stats/queue/1" - }, - { - "method": "GET", - "path": "/stats/queue/1/1" - }, - { - "method": "GET", - "path": "/stats/queue/1/1/1" - }, - { - "method": "GET", - "path": "/stats/queuedesc/1" - }, - { - "method": "GET", - "path": "/stats/queuedesc/1/1" - }, - { - "method": "GET", - "path": "/stats/queuedesc/1/1/1" - }, - { - "method": "GET", - "path": "/stats/group/1" - }, - { - "method": "GET", - "path": "/stats/group/1/1" - }, - { - "method": "GET", - "path": "/stats/groupdesc/1" - }, - { - "method": "GET", - "path": "/stats/groupdesc/1/1" - }, - { - "method": "GET", - "path": "/stats/groupfeatures/1" - }, - { - "method": "GET", - "path": "/stats/meter/1" - }, - { - "method": "GET", - "path": "/stats/meter/1/1" - }, - { - "method": "GET", - "path": "/stats/meterdesc/1" - }, - { - "method": "GET", - "path": "/stats/meterdesc/1/1" - }, - { - "method": "GET", - "path": "/stats/meterfeatures/1" - }, - { - "method": "GET", - "path": "/stats/table/1" - }, - { - "method": "POST", - "path": "/stats/flowentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/modify_strict", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/flowentry/delete_strict", - "body": { - "dpid": 1 - } - }, - { - "method": "DELETE", - "path": "/stats/flowentry/clear/1" - }, - { - "method": "POST", - "path": "/stats/groupentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/groupentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/groupentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/portdesc/modify", - "body": { - "dpid": 1, - "port_no": 1 - } - }, - { - "method": "POST", - "path": "/stats/meterentry/add", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/meterentry/modify", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/meterentry/delete", - "body": { - "dpid": 1 - } - }, - { - "method": "POST", - "path": "/stats/experimenter/1" - } -] diff --git a/ryu/tests/unit/app/test_ofctl_rest.py b/ryu/tests/unit/app/test_ofctl_rest.py deleted file mode 100644 index 5b7a5be7..00000000 --- a/ryu/tests/unit/app/test_ofctl_rest.py +++ /dev/null @@ -1,137 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import functools -import json -import logging -import os -import sys -import unittest -try: - import mock # Python 2 -except ImportError: - from unittest import mock # Python 3 -from nose.tools import eq_ - -from ryu.app import ofctl_rest -from ryu.app.wsgi import Request -from ryu.app.wsgi import WSGIApplication -from ryu.controller.dpset import DPSet -from ryu.ofproto import ofproto_protocol -from ryu.ofproto import ofproto_v1_0 -from ryu.ofproto import ofproto_v1_2 -from ryu.ofproto import ofproto_v1_3 -from ryu.ofproto import ofproto_v1_4 -from ryu.ofproto import ofproto_v1_5 -from ryu.tests import test_lib - - -LOG = logging.getLogger(__name__) - - -class DummyDatapath(ofproto_protocol.ProtocolDesc): - - def __init__(self, version): - super(DummyDatapath, self).__init__(version) - self.id = 1 - _kw = {'port_no': 1, 'hw_addr': 'aa:bb:cc:dd:ee:ff', - 'name': 's1-eth1', 'config': 1, 'state': 1} - # for OpenFlow 1.0 - if version in [ofproto_v1_0.OFP_VERSION]: - _kw.update( - {'curr': 2112, 'advertised': 0, 'supported': 0, 'peer': 0}) - port_info = self.ofproto_parser.OFPPhyPort(**_kw) - # for OpenFlow 1.2 or 1.3 - elif version in [ofproto_v1_2.OFP_VERSION, ofproto_v1_3.OFP_VERSION]: - _kw.update( - {'curr': 2112, 'advertised': 0, 'supported': 0, 'peer': 0, - 'curr_speed': 10000000, 'max_speed': 0}) - port_info = self.ofproto_parser.OFPPort(**_kw) - # for OpenFlow 1.4+ - else: - _kw.update({'properties': []}) - port_info = self.ofproto_parser.OFPPort(**_kw) - self.ports = {1: port_info} - - -class Test_ofctl_rest(unittest.TestCase): - - def _test(self, name, dp, method, path, body): - # print('processing %s ...' % name) - - dpset = DPSet() - dpset._register(dp) - wsgi = WSGIApplication() - contexts = { - 'dpset': dpset, - 'wsgi': wsgi, - } - ofctl_rest.RestStatsApi(**contexts) - - req = Request.blank(path) - req.body = json.dumps(body).encode('utf-8') - req.method = method - - with mock.patch('ryu.lib.ofctl_utils.send_stats_request'),\ - mock.patch('ryu.lib.ofctl_utils.send_msg'): - res = req.get_response(wsgi) - eq_(res.status, '200 OK') - - -def _add_tests(): - _ofp_vers = { - 'of10': ofproto_v1_0.OFP_VERSION, - 'of12': ofproto_v1_2.OFP_VERSION, - 'of13': ofproto_v1_3.OFP_VERSION, - 'of14': ofproto_v1_4.OFP_VERSION, - 'of15': ofproto_v1_5.OFP_VERSION, - } - - this_dir = os.path.dirname(sys.modules[__name__].__file__) - ofctl_rest_json_dir = os.path.join(this_dir, 'ofctl_rest_json/') - - for ofp_ver in _ofp_vers: - # read a json file - json_path = os.path.join(ofctl_rest_json_dir, ofp_ver + '.json') - if os.path.exists(json_path): - _test_cases = json.load(open(json_path)) - else: - # print("Skip to load test cases for %s" % ofp_ver) - continue - - # add test - for test in _test_cases: - method = test['method'] - path = test['path'] - body = test.get('body', {}) - - name = 'test_ofctl_rest_' + method + '_' + ofp_ver + '_' + path - # print('adding %s ...' % name) - f = functools.partial( - Test_ofctl_rest._test, - name=name, - dp=DummyDatapath(_ofp_vers[ofp_ver]), - method=test['method'], - path=test['path'], - body=body - ) - test_lib.add_method(Test_ofctl_rest, name, f) - -_add_tests() - -if __name__ == "__main__": - unittest.main() diff --git a/ryu/tests/unit/app/test_tester.py b/ryu/tests/unit/app/test_tester.py deleted file mode 100644 index 3bba9867..00000000 --- a/ryu/tests/unit/app/test_tester.py +++ /dev/null @@ -1,464 +0,0 @@ -# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -from nose.tools import * - -import binascii -import inspect -import json -import logging -import math -import netaddr -import os -import signal -import sys -import time -import traceback -from random import randint - -from ryu import cfg - -# import all packet libraries. -PKT_LIB_PATH = 'ryu.lib.packet' -for modname, moddef in sys.modules.items(): - if not modname.startswith(PKT_LIB_PATH) or not moddef: - continue - for (clsname, clsdef, ) in inspect.getmembers(moddef): - if not inspect.isclass(clsdef): - continue - exec('from %s import %s' % (modname, clsname)) - -from ryu.base import app_manager -from ryu.controller import handler -from ryu.controller import ofp_event -from ryu.controller.handler import set_ev_cls -from ryu.exception import RyuException -from ryu.lib import dpid as dpid_lib -from ryu.lib import hub -from ryu.lib import stringify -from ryu.lib.packet import packet -from ryu.ofproto import ofproto_protocol -from ryu.ofproto import ofproto_v1_3 -from ryu.ofproto import ofproto_v1_3_parser -from ryu.ofproto import ofproto_v1_4 - -from ryu.tests.switch.tester import TestPatterns -from ryu.tests.switch.tester import TestFile -from ryu.tests.switch.tester import OfTester - -CONF = cfg.CONF - -LOG = logging.getLogger('test_tester') - -SAMPLE_DESC = "action: 00_OUTPUT" - - -class Test_tester(unittest.TestCase): - - """ Test case for tester - """ - - # action/00_OUTPUT.json - - test_json_1 = { - "description": "ethernet/ipv4/tcp-->'actions=output:2'", - "prerequisite": [ - { - "OFPFlowMod": { - "table_id": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "port": "target_send_port_1" - } - } - ], - "type": 4 - } - } - ] - } - } - ], - "tests": [ - { - "ingress": [ - "ethernet(dst='22:22:22:22:22:22', \ - src='12:11:11:11:11:11', ethertype=2048)", - "ipv4(tos=32, proto=6, src='192.168.10.10', \ - dst='192.168.20.20', ttl=64)", - "tcp(dst_port=2222, option=str('\\x00' * 4), \ - src_port=11111)", - "'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0\ - 8\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x1\ - 2\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1\ - b\\x1c\\x1d\\x1e\\x1f'" - ], - "egress":[ - "ethernet(dst='22:22:22:22:22:22', \ - src='12:11:11:11:11:11', ethertype=2048)", - "ipv4(tos=32, proto=6, src='192.168.10.10', \ - dst='192.168.20.20', ttl=64)", - "tcp(dst_port=2222, option=str('\\x00' * 4), \ - src_port=11111)", - "'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0\ - 8\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x1\ - 2\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1\ - b\\x1c\\x1d\\x1e\\x1f'" - ] - - } - ] - } - - # group/00_ALL.json - - test_json_2 = { - "description": "2Mbps(ethernet/ipv4/tcp)-->'in_port=1,\ - actions=group:all(actions=output:2/actions=output:3)'", - "prerequisite": [ - { - "OFPGroupMod": { - "group_id": 0, - "buckets": [ - { - "OFPBucket": { - "actions": [ - { - "OFPActionOutput": { - "port": "target_send_port_1" - } - } - ] - } - }, - { - "OFPBucket": { - "actions": [ - { - "OFPActionOutput": { - "port": "target_send_port_2" - } - } - ] - } - } - ] - } - }, - { - "OFPFlowMod": { - "match": { - "OFPMatch": { - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "value": "target_recv_port" - } - } - ] - } - }, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionGroup": { - "group_id": 0 - } - } - ], - "type": 4 - } - } - ] - } - } - ], - "tests": [ - { - "ingress": { - "packets": { - "data": [ - "ethernet(dst='22:22:22:22:22:22', \ - src='12:11:11:11:11:11', ethertype=2048)", - "ipv4(proto=6)", - "tcp()", - "str('\\x11' * (1500 - 54))" - ], - "pktps":175, - "duration_time":30 - } - }, - "egress":{ - "throughput": [ - { - "OFPMatch": { - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "value": "tester_recv_port_1" - } - } - ] - }, - "kbps": 2000 - }, - { - "OFPMatch": { - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "value": "tester_recv_port_2" - } - } - ] - }, - "kbps": 2000 - } - ] - } - } - ] - } - - # match/00_IN_PORT.json - - test_json_3 = { - "description": "ethernet/ipv4/tcp-->'in_port=1,actions=output:2'", - "prerequisite": [ - { - "OFPFlowMod": { - "table_id": 0, - "match": { - "OFPMatch": { - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "value": "target_recv_port" - } - } - ] - } - }, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "port": "target_send_port_1" - } - } - ], - "type": 4 - } - } - ] - } - } - ], - "tests": [ - { - "ingress": [ - "ethernet(dst='22:22:22:22:22:22', \ - src='12:11:11:11:11:11', ethertype=2048)", - "ipv4(tos=32, proto=6, src='192.168.10.10', \ - dst='192.168.20.20', ttl=64)", - "tcp(dst_port=2222, option=str('\\x00' * 4), \ - src_port=11111)", - "'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0\ - 8\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x1\ - 2\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1\ - b\\x1c\\x1d\\x1e\\x1f'" - ], - "egress":[ - "ethernet(dst='22:22:22:22:22:22', \ - src='12:11:11:11:11:11', ethertype=2048)", - "ipv4(tos=32, proto=6, src='192.168.10.10',\ - dst='192.168.20.20', ttl=64)", - "tcp(dst_port=2222, option=str('\\x00' * 4), \ - src_port=11111)", - "'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0\ - 8\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x1\ - 2\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1\ - b\\x1c\\x1d\\x1e\\x1f'" - ] - } - ] - } - - # meter/01_DROP_00_KBPS_00_1M.json - - test_json_4 = { - "description": "2Mbps(ethernet/ipv4/tcp)-->'in_port=1,\ - actions=meter:1Mbps(drop),output:2'", - "prerequisite": [ - { - "OFPMeterMod": { - "meter_id": 1, - "bands": [ - { - "OFPMeterBandDrop": { - "rate": 1000 - } - } - ] - } - }, - { - "OFPFlowMod": { - "match": { - "OFPMatch": { - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "value": "target_recv_port" - } - } - ] - } - }, - "instructions": [ - { - "OFPInstructionMeter": { - "meter_id": 1 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "port": "target_send_port_1" - } - } - ], - "type": 4 - } - } - ] - } - } - ], - "tests": [ - { - "ingress": { - "packets": { - "data": [ - "ethernet(dst='22:22:22:22:22:22', \ - src='12:11:11:11:11:11', ethertype=2048)", - "ipv4(proto=6)", - "tcp()", - "str('\\x11' * (1500 - 54))" - ], - "pktps":175, - "duration_time":30 - } - }, - "egress":{ - "throughput": [ - { - "OFPMatch": { - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "value": "tester_recv_port_1" - } - - } - ] - }, - "kbps": 1000 - } - ] - } - } - ] - } - - def setUp(self): - OfTester.tester_ver = ofproto_v1_3.OFP_VERSION - OfTester.target_ver = ofproto_v1_3.OFP_VERSION - - def tearDown(self): - pass - - def test__normalize_test_json(self): - self.tests = TestPatterns( - "../switch/of13/action/00_OUTPUT.json", - logging.getLogger("test_tester")) - - self.tests[SAMPLE_DESC]._normalize_test_json(Test_tester.test_json_1) - self.tests[SAMPLE_DESC]._normalize_test_json(Test_tester.test_json_2) - self.tests[SAMPLE_DESC]._normalize_test_json(Test_tester.test_json_3) - self.tests[SAMPLE_DESC]._normalize_test_json(Test_tester.test_json_4) - - # action/00_OUTPUT.json - eq_(Test_tester.test_json_1["prerequisite"][0]["OFPFlowMod"][ - "instructions"][0]["OFPInstructionActions"][ - "actions"][0]["OFPActionOutput"]["port"], - CONF['test-switch']['target_send_port_1']) - - # group/00_ALL.json - eq_(Test_tester.test_json_2["prerequisite"][1]["OFPFlowMod"][ - "match"]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], - CONF['test-switch']['target_recv_port']) - eq_(Test_tester.test_json_2["prerequisite"][0]["OFPGroupMod"][ - "buckets"][0]["OFPBucket"]["actions"][0]["OFPActionOutput"][ - "port"], CONF['test-switch']['target_send_port_1']) - eq_(Test_tester.test_json_2["prerequisite"][0]["OFPGroupMod"][ - "buckets"][1]["OFPBucket"]["actions"][0]["OFPActionOutput"][ - "port"], CONF['test-switch']['target_send_port_2']) - eq_(Test_tester.test_json_2["tests"][0]["egress"]["throughput"][ - 0]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], - CONF['test-switch']['tester_recv_port_1']) - eq_(Test_tester.test_json_2["tests"][0]["egress"]["throughput"][ - 1]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], - CONF['test-switch']['tester_recv_port_2']) - - # match/00_IN_PORT.json - eq_(Test_tester.test_json_3["prerequisite"][0]["OFPFlowMod"][ - "match"]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], - CONF['test-switch']['target_recv_port']) - eq_(Test_tester.test_json_3["prerequisite"][0]["OFPFlowMod"][ - "instructions"][0]["OFPInstructionActions"]["actions"][0][ - "OFPActionOutput"]["port"], CONF['test-switch'][ - 'target_send_port_1']) - - # meter/01_DROP_00_KBPS_00_1M.json - eq_(Test_tester.test_json_4["prerequisite"][1]["OFPFlowMod"][ - "match"]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], - CONF['test-switch']['target_recv_port']) - eq_(Test_tester.test_json_4["prerequisite"][1]["OFPFlowMod"][ - "instructions"][1]["OFPInstructionActions"]["actions"][0][ - "OFPActionOutput"]["port"], - CONF['test-switch']['target_send_port_1']) - eq_(Test_tester.test_json_4["tests"][0]["egress"]["throughput"][ - 0]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], - CONF['test-switch']['tester_recv_port_1']) diff --git a/ryu/tests/unit/app/test_ws_topology.py b/ryu/tests/unit/app/test_ws_topology.py deleted file mode 100644 index 6eaaa0e5..00000000 --- a/ryu/tests/unit/app/test_ws_topology.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (C) 2013 Stratosphere Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -from socket import error as SocketError - -import mock - -from ryu.app.ws_topology import WebSocketTopology - - -class Test_ws_topology(unittest.TestCase): - - def test_when_sock_error(self): - args = { - 'wsgi': mock.Mock(), - } - app = WebSocketTopology(**args) - - rpc_client_mock1 = mock.Mock() - config = { - 'get_proxy.return_value.event_link_add.side_effect': SocketError, - } - rpc_client_mock1.configure_mock(**config) - - rpc_client_mock2 = mock.Mock() - - app.rpc_clients = [ - rpc_client_mock1, - rpc_client_mock2, - ] - - ev_mock = mock.Mock() - app._event_link_add_handler(ev_mock) - - rpc_client_mock1.get_proxy.assert_called_once_with() - rpc_client_mock2.get_proxy.assert_called_once_with() - -if __name__ == "__main__": - unittest.main() diff --git a/ryu/tests/unit/app/test_wsgi.py b/ryu/tests/unit/app/test_wsgi.py deleted file mode 100644 index bec21ddc..00000000 --- a/ryu/tests/unit/app/test_wsgi.py +++ /dev/null @@ -1,104 +0,0 @@ -# Copyright (C) 2013 Stratosphere Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging - -import nose -from nose.tools import eq_ - -from ryu.app.wsgi import ControllerBase -from ryu.app.wsgi import WSGIApplication -from ryu.app.wsgi import Response -from ryu.app.wsgi import route -from ryu.lib import dpid as dpidlib - -LOG = logging.getLogger('test_wsgi') - - -class _TestController(ControllerBase): - - def __init__(self, req, link, data, **config): - super(_TestController, self).__init__(req, link, data, **config) - eq_(data['test_param'], 'foo') - - @route('test', '/test/{dpid}', - methods=['GET'], requirements={'dpid': dpidlib.DPID_PATTERN}) - def test_get_dpid(self, req, dpid, **_kwargs): - return Response(status=200, body=dpid) - - @route('test', '/test') - def test_root(self, req, **_kwargs): - return Response(status=200, body='root') - - -class Test_wsgi(unittest.TestCase): - - """ Test case for wsgi - """ - - def setUp(self): - controller_data = { - 'test_param': 'foo' - } - self.wsgi_app = WSGIApplication() - self.wsgi_app.register(_TestController, controller_data) - - def tearDown(self): - pass - - def test_wsgi_decorator_ok(self): - r = self.wsgi_app({'REQUEST_METHOD': 'GET', - 'PATH_INFO': '/test/0123456789abcdef'}, - lambda s, _: eq_(s, '200 OK')) - eq_(r[0], (b'0123456789abcdef')) - - def test_wsgi_decorator_ng_path(self): - self.wsgi_app({'REQUEST_METHOD': 'GET', - 'PATH_INFO': '/'}, - lambda s, _: eq_(s, '404 Not Found')) - - def test_wsgi_decorator_ng_method(self): - # XXX: If response code is "405 Method Not Allowed", it is better. - self.wsgi_app({'REQUEST_METHOD': 'PUT', - 'PATH_INFO': '/test/0123456789abcdef'}, - lambda s, _: eq_(s, '404 Not Found')) - - def test_wsgi_decorator_ng_requirements(self): - # XXX: If response code is "400 Bad Request", it is better. - self.wsgi_app({'REQUEST_METHOD': 'GET', - 'PATH_INFO': '/test/hogehoge'}, - lambda s, _: eq_(s, '404 Not Found')) - - def test_wsgi_decorator_ok_any_method(self): - self.wsgi_app({'REQUEST_METHOD': 'GET', - 'PATH_INFO': '/test'}, - lambda s, _: eq_(s, '200 OK')) - self.wsgi_app({'REQUEST_METHOD': 'POST', - 'PATH_INFO': '/test'}, - lambda s, _: eq_(s, '200 OK')) - self.wsgi_app({'REQUEST_METHOD': 'PUT', - 'PATH_INFO': '/test'}, - lambda s, _: eq_(s, '200 OK')) - r = self.wsgi_app({'REQUEST_METHOD': 'DELETE', - 'PATH_INFO': '/test'}, - lambda s, _: eq_(s, '200 OK')) - eq_(r[0], b'root') - - -if __name__ == '__main__': - nose.main(argv=['nosetests', '-s', '-v'], defaultTest=__file__) diff --git a/ryu/tests/unit/cmd/__init__.py b/ryu/tests/unit/cmd/__init__.py deleted file mode 100644 index ca8ef539..00000000 --- a/ryu/tests/unit/cmd/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. diff --git a/ryu/tests/unit/cmd/dummy_app.py b/ryu/tests/unit/cmd/dummy_app.py deleted file mode 100644 index 6c594298..00000000 --- a/ryu/tests/unit/cmd/dummy_app.py +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ryu.base import app_manager - - -class DummyApp(app_manager.RyuApp): - pass diff --git a/ryu/tests/unit/cmd/dummy_openflow_app.py b/ryu/tests/unit/cmd/dummy_openflow_app.py deleted file mode 100644 index 614febcd..00000000 --- a/ryu/tests/unit/cmd/dummy_openflow_app.py +++ /dev/null @@ -1,22 +0,0 @@ -# Copyright (C) 2013,2014 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013,2014 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from ryu.base import app_manager -from ryu.ofproto import ofproto_v1_3 - - -class DummyOpenFlowApp(app_manager.RyuApp): - OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION] diff --git a/ryu/tests/unit/cmd/test_manager.py b/ryu/tests/unit/cmd/test_manager.py deleted file mode 100644 index 0f8fb624..00000000 --- a/ryu/tests/unit/cmd/test_manager.py +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright (C) 2013,2014 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013,2014 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import sys -import unittest -import mock -from nose.tools import eq_, raises - -try: - # Python 3 - from imp import reload -except ImportError: - # Python 2 - pass - -from ryu.cmd.manager import main - - -class Test_Manager(unittest.TestCase): - """Test ryu-manager command - """ - - def __init__(self, methodName): - super(Test_Manager, self).__init__(methodName) - - def setUp(self): - pass - - def tearDown(self): - pass - - @raises(SystemExit) - @mock.patch('sys.argv', new=['ryu-manager', '--version']) - def test_version(self): - main() - - @raises(SystemExit) - @mock.patch('sys.argv', new=['ryu-manager', '--help']) - def test_help(self): - main() - - @staticmethod - def _reset_globals(): - # hack to reset globals like SERVICE_BRICKS. - # assumption: this is the only test which actually starts RyuApp. - import ryu.base.app_manager - import ryu.ofproto.ofproto_protocol - - reload(ryu.base.app_manager) - reload(ryu.ofproto.ofproto_protocol) - - @mock.patch('sys.argv', new=['ryu-manager', '--verbose', - 'ryu.tests.unit.cmd.dummy_app']) - def test_no_services(self): - self._reset_globals() - main() - self._reset_globals() - - @mock.patch('sys.argv', new=['ryu-manager', '--verbose', - 'ryu.tests.unit.cmd.dummy_openflow_app']) - def test_openflow_app(self): - self._reset_globals() - main() - self._reset_globals() diff --git a/ryu/tests/unit/controller/__init__.py b/ryu/tests/unit/controller/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/controller/test_controller.py b/ryu/tests/unit/controller/test_controller.py deleted file mode 100644 index 27a2bce6..00000000 --- a/ryu/tests/unit/controller/test_controller.py +++ /dev/null @@ -1,145 +0,0 @@ -# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2015 Stratosphere Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -try: - import mock # Python 2 -except ImportError: - from unittest import mock # Python 3 - -import json -import os -import sys -import warnings -import unittest -import logging -import random - -from ryu.base import app_manager # To suppress cyclic import -from ryu.controller import controller -from ryu.controller import handler -from ryu.ofproto import ofproto_v1_3_parser -from ryu.ofproto import ofproto_v1_2_parser -from ryu.ofproto import ofproto_v1_0_parser - - -LOG = logging.getLogger('test_controller') - - -class Test_Datapath(unittest.TestCase): - """ - Test cases for controller.Datapath - """ - - def _test_ports_accessibility(self, ofproto_parser, msgs_len): - with mock.patch('ryu.controller.controller.Datapath.set_state'): - - # Ignore warnings - with warnings.catch_warnings(record=True) as msgs: - warnings.simplefilter('always') - - # Test target - sock_mock = mock.Mock() - addr_mock = mock.Mock() - dp = controller.Datapath(sock_mock, addr_mock) - dp.ofproto_parser = ofproto_parser - - # Create - dp.ports = {} - - # Update - port_mock = mock.Mock() - dp.ports[0] = port_mock - - # Read & Delete - del dp.ports[0] - - self.assertEqual(len(msgs), msgs_len) - for msg in msgs: - self.assertTrue(issubclass(msg.category, UserWarning)) - - def test_ports_accessibility_v13(self): - self._test_ports_accessibility(ofproto_v1_3_parser, 0) - - def test_ports_accessibility_v12(self): - self._test_ports_accessibility(ofproto_v1_2_parser, 0) - - def test_ports_accessibility_v10(self): - self._test_ports_accessibility(ofproto_v1_0_parser, 0) - - @mock.patch("ryu.base.app_manager", spec=app_manager) - def test_recv_loop(self, app_manager_mock): - # Prepare test data - test_messages = [ - "4-6-ofp_features_reply.packet", - "4-14-ofp_echo_reply.packet", - "4-14-ofp_echo_reply.packet", - "4-4-ofp_packet_in.packet", - "4-14-ofp_echo_reply.packet", - "4-14-ofp_echo_reply.packet", - ] - this_dir = os.path.dirname(sys.modules[__name__].__file__) - packet_data_dir = os.path.join(this_dir, '../../packet_data/of13') - json_dir = os.path.join(this_dir, '../ofproto/json/of13') - - packet_buf = bytearray() - expected_json = list() - for msg in test_messages: - # Construct the received packet buffer as one packet data in order - # to test the case of the OpenFlow messages composed in one packet. - packet_data_file = os.path.join(packet_data_dir, msg) - packet_buf += open(packet_data_file, 'rb').read() - json_data_file = os.path.join(json_dir, msg + '.json') - expected_json.append(json.load(open(json_data_file))) - - # Prepare mock for socket - class SocketMock(mock.MagicMock): - buf = bytearray() - random = None - - def recv(self, bufsize): - size = self.random.randint(1, bufsize) - out = self.buf[:size] - self.buf = self.buf[size:] - return out - - # Prepare mock - ofp_brick_mock = mock.MagicMock(spec=app_manager.RyuApp) - app_manager_mock.lookup_service_brick.return_value = ofp_brick_mock - sock_mock = SocketMock() - sock_mock.buf = packet_buf - sock_mock.random = random.Random('Ryu SDN Framework') - addr_mock = mock.MagicMock() - - # Prepare test target - dp = controller.Datapath(sock_mock, addr_mock) - dp.set_state(handler.MAIN_DISPATCHER) - ofp_brick_mock.reset_mock() - - # Test - dp._recv_loop() - - # Assert calls - output_json = list() - for call in ofp_brick_mock.send_event_to_observers.call_args_list: - args, kwargs = call - ev, state = args - if not hasattr(ev, 'msg'): - continue - output_json.append(ev.msg.to_jsondict()) - self.assertEqual(state, handler.MAIN_DISPATCHER) - self.assertEqual(kwargs, {}) - self.assertEqual(expected_json, output_json) diff --git a/ryu/tests/unit/lib/__init__.py b/ryu/tests/unit/lib/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/lib/ofctl_json/of10/1-2-ofp_flow_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of10/1-2-ofp_flow_mod.packet.json deleted file mode 100644 index cc0b13d9..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of10/1-2-ofp_flow_mod.packet.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "cmd": 0, - "flow": { - "actions": [ - { - "type": "OUTPUT", - "max_len": 65535, - "port": 6 - } - ], - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "match": { - "dl_dst": "f2:0b:a4:7d:f8:ea" - }, - "out_port": 65532, - "priority": 123 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-0-ofp_desc_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-0-ofp_desc_stats_reply.packet.json deleted file mode 100644 index 8fc54b74..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-0-ofp_desc_stats_reply.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "1": { - "dp_desc": "dp", - "hw_desc": "hw", - "mfr_desc": "mfr", - "serial_num": "serial", - "sw_desc": "sw" - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-11-ofp_flow_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-11-ofp_flow_stats_request.packet.json deleted file mode 100644 index a42dfef0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-11-ofp_flow_stats_request.packet.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "flow": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": {}, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-12-ofp_flow_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-12-ofp_flow_stats_reply.packet.json deleted file mode 100644 index 4d73e0b5..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-12-ofp_flow_stats_reply.packet.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "1": [ - { - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115277000, - "duration_sec": 358, - "hard_timeout": 0, - "idle_timeout": 0, - "actions": [], - "length": 56, - "match": {}, - "packet_count": 0, - "priority": 65535, - "table_id": 0 - }, - { - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115055000, - "duration_sec": 358, - "hard_timeout": 0, - "idle_timeout": 0, - "actions": [ - "OUTPUT:NORMAL" - ], - "length": 88, - "match": { - "dl_type": 2054 - }, - "packet_count": 0, - "priority": 65534, - "table_id": 0 - }, - { - "byte_count": 238, - "cookie": 0, - "duration_nsec": 511582000, - "duration_sec": 316220, - "hard_timeout": 0, - "idle_timeout": 0, - "actions": [ - "GOTO_TABLE:1" - ], - "length": 80, - "match": { - "in_port": 6, - "dl_src": "f2:0b:a4:7d:f8:ea" - }, - "packet_count": 3, - "priority": 123, - "table_id": 0 - }, - { - "byte_count": 98, - "cookie": 0, - "duration_nsec": 980901000, - "duration_sec": 313499, - "hard_timeout": 0, - "idle_timeout": 0, - "actions": [ - { - "WRITE_ACTIONS": [ - "OUTPUT:CONTROLLER" - ] - } - ], - "length": 80, - "match": {}, - "packet_count": 1, - "priority": 0, - "table_id": 0 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-16-ofp_experimenter.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-16-ofp_experimenter.packet.json deleted file mode 100644 index c655f8f0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-16-ofp_experimenter.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "exp": { - "data": "bmF6bw==", - "data_type": "base64", - "exp_type": 123456789, - "experimenter": 98765432 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-2-ofp_flow_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-2-ofp_flow_mod.packet.json deleted file mode 100644 index f6a0f26a..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-2-ofp_flow_mod.packet.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "cmd": 0, - "flow": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "actions": [ - { - "type": "WRITE_ACTIONS", - "actions": [ - { - "type": "SET_FIELD", - "field": "vlan_vid", - "value": 258 - }, - { - "type": "OUTPUT", - "port": 6, - "max_len": 65535 - } - ] - }, - { - "type": "SET_FIELD", - "field": "eth_src", - "value": "01:02:03:04:05:06" - } - ], - "match": { - "eth_dst": "f2:0b:a4:7d:f8:ea" - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-21-ofp_group_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-21-ofp_group_mod.packet.json deleted file mode 100644 index 9509e191..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-21-ofp_group_mod.packet.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "cmd": 0, - "group": { - "buckets": [ - { - "actions": [ - { - "max_len": 65535, - "port": 2, - "type": "OUTPUT" - } - ], - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - ], - "command": 0, - "group_id": 1, - "type": "ALL" - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-22-ofp_port_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-22-ofp_port_mod.packet.json deleted file mode 100644 index 3c3ccf89..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-22-ofp_port_mod.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "port_config": { - "advertise": 4096, - "config": 0, - "hw_addr": "00-11-00-00-11-11", - "mask": 0, - "port_no": 1 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-25-ofp_aggregate_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-25-ofp_aggregate_stats_request.packet.json deleted file mode 100644 index 845af65b..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-25-ofp_aggregate_stats_request.packet.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "flow": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": {}, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 255 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-26-ofp_aggregate_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-26-ofp_aggregate_stats_reply.packet.json deleted file mode 100644 index a4b23d12..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-26-ofp_aggregate_stats_reply.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "1": [ - { - "byte_count": 574, - "flow_count": 6, - "packet_count": 7 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-28-ofp_table_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-28-ofp_table_stats_reply.packet.json deleted file mode 100644 index 7444a29a..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-28-ofp_table_stats_reply.packet.json +++ /dev/null @@ -1,32134 +0,0 @@ -{ - "1": [ - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", - "matched_count": 4, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 4, - "max_entries": 16777216, - "lookup_count": 4, - "metadata_match": 18446744073709551615, - "table_id": 0, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x01", - "matched_count": 3, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 2, - "max_entries": 16777216, - "lookup_count": 3, - "metadata_match": 18446744073709551615, - "table_id": 1, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x02", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 2, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x03", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 3, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x04", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 4, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x05", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 5, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x06", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 6, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x07", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 7, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x08", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 8, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x09", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 9, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x0a", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 10, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x0b", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 11, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x0c", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 12, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x0d", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 13, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x0e", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 14, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x0f", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 15, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x10", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 16, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x11", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 17, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x12", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 18, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x13", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 19, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x14", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 20, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x15", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 21, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x16", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 22, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x17", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 23, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x18", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 24, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x19", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 25, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x1a", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 26, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x1b", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 27, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x1c", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 28, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x1d", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 29, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x1e", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 30, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x1f", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 31, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x20", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 32, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x21", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 33, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x22", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 34, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x23", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 35, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x24", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 36, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x25", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 37, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x26", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 38, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x27", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 39, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x28", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 40, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x29", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 41, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x2a", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 42, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x2b", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 43, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x2c", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 44, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x2d", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 45, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x2e", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 46, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x2f", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 47, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x30", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 48, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x31", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 49, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x32", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 50, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x33", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 51, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x34", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 52, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x35", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 53, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x36", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 54, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x37", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 55, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x38", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 56, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x39", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 57, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x3a", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 58, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x3b", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 59, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x3c", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 60, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x3d", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 61, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x3e", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 62, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x3f", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 63, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x40", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 64, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x41", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 65, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x42", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 66, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x43", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 67, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x44", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 68, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x45", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 69, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x46", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 70, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x47", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 71, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x48", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 72, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x49", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 73, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x4a", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 74, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x4b", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 75, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x4c", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 76, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x4d", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 77, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x4e", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 78, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x4f", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 79, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x50", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 80, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x51", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 81, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x52", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 82, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x53", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 83, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x54", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 84, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x55", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 85, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x56", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 86, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x57", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 87, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x58", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 88, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x59", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 89, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x5a", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 90, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x5b", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 91, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x5c", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 92, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x5d", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 93, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x5e", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 94, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x5f", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 95, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x60", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 96, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x61", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 97, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x62", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 98, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x63", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 99, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x64", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 100, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x65", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 101, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x66", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 102, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x67", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 103, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x68", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 104, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x69", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 105, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x6a", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 106, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x6b", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 107, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x6c", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 108, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x6d", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 109, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x6e", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 110, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x6f", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 111, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x70", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 112, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x71", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 113, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x72", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 114, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x73", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 115, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x74", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 116, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x75", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 117, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x76", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 118, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x77", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 119, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x78", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 120, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x79", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 121, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x7a", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 122, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x7b", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 123, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x7c", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 124, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x7d", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 125, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x7e", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 126, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x7f", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 127, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x80", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 128, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x81", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 129, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x82", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 130, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x83", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 131, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x84", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 132, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x85", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 133, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x86", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 134, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x87", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 135, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x88", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 136, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x89", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 137, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x8a", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 138, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x8b", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 139, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x8c", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 140, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x8d", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 141, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x8e", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 142, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x8f", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 143, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x90", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 144, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x91", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 145, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x92", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 146, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x93", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 147, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x94", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 148, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x95", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 149, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x96", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 150, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x97", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 151, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x98", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 152, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x99", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 153, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x9a", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 154, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x9b", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 155, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x9c", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 156, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x9d", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 157, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x9e", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 158, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0x9f", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 159, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xa0", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 160, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xa1", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 161, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xa2", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 162, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xa3", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 163, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xa4", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 164, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xa5", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 165, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xa6", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 166, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xa7", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 167, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xa8", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 168, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xa9", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 169, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xaa", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 170, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xab", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 171, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xac", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 172, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xad", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 173, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xae", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 174, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xaf", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 175, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xb0", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 176, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xb1", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 177, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xb2", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 178, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xb3", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 179, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xb4", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 180, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xb5", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 181, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xb6", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 182, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xb7", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 183, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xb8", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 184, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xb9", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 185, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xba", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 186, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xbb", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 187, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xbc", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 188, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xbd", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 189, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xbe", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 190, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xbf", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 191, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xc0", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 192, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xc1", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 193, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xc2", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 194, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xc3", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 195, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xc4", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 196, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xc5", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 197, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xc6", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 198, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xc7", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 199, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xc8", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 200, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xc9", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 201, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xca", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 202, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xcb", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 203, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xcc", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 204, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xcd", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 205, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xce", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 206, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xcf", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 207, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xd0", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 208, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xd1", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 209, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xd2", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 210, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xd3", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 211, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xd4", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 212, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xd5", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 213, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xd6", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 214, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xd7", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 215, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xd8", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 216, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xd9", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 217, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xda", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 218, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xdb", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 219, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xdc", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 220, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xdd", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 221, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xde", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 222, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xdf", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 223, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xe0", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 224, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xe1", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 225, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xe2", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 226, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xe3", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 227, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xe4", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 228, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xe5", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 229, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xe6", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 230, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xe7", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 231, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xe8", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 232, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xe9", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 233, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xea", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 234, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xeb", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 235, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xec", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 236, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xed", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 237, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xee", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 238, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xef", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 239, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xf0", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 240, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xf1", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 241, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xf2", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 242, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xf3", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 243, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xf4", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 244, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xf5", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 245, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xf6", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 246, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xf7", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 247, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xf8", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 248, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xf9", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 249, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xfa", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 250, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xfb", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 251, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xfc", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 252, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xfd", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": 253, - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - }, - { - "wildcards": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "write_setfields": [], - "write_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "name": "Flow Table 0xfe", - "matched_count": 0, - "apply_actions": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ], - "active_count": 0, - "max_entries": 16777216, - "lookup_count": 0, - "metadata_match": 18446744073709551615, - "table_id": "MAX", - "instructions": [ - "GOTO_TABLE", - "WRITE_METADATA", - "WRITE_ACTIONS", - "APPLY_ACTIONS", - "CLEAR_ACTIONS" - ], - "config": [], - "metadata_write": 18446744073709551615, - "match": [ - "IN_PORT", - "METADATA", - "ETH_DST", - "ETH_SRC", - "ETH_TYPE", - "VLAN_VID", - "VLAN_PCP", - "IP_DSCP", - "IP_ECN", - "IP_PROTO", - "IPV4_SRC", - "IPV4_DST", - "TCP_SRC", - "TCP_DST", - "UDP_SRC", - "UDP_DST", - "SCTP_SRC", - "SCTP_DST", - "ICMPV4_TYPE", - "ICMPV4_CODE", - "ARP_OP", - "ARP_SPA", - "ARP_TPA", - "ARP_SHA", - "ARP_THA", - "IPV6_SRC", - "IPV6_DST", - "IPV6_FLABEL", - "ICMPV6_TYPE", - "ICMPV6_CODE", - "IPV6_ND_TARGET", - "IPV6_ND_SLL", - "IPV6_ND_TLL", - "MPLS_LABEL", - "MPLS_TC" - ], - "apply_setfields": [] - } - ] -} \ No newline at end of file diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-30-ofp_port_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-30-ofp_port_stats_reply.packet.json deleted file mode 100644 index 43414b65..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-30-ofp_port_stats_reply.packet.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "1": [ - { - "collisions": 0, - "port_no": 7, - "rx_bytes": 0, - "rx_crc_err": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "rx_packets": 0, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - }, - { - "collisions": 0, - "port_no": 6, - "rx_bytes": 336, - "rx_crc_err": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "rx_packets": 4, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-32-ofp_group_features_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-32-ofp_group_features_stats_reply.packet.json deleted file mode 100644 index b277969e..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-32-ofp_group_features_stats_reply.packet.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "1": [ - { - "actions": [ - { - "ALL": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "SELECT": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "INDIRECT": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "FF": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - } - ], - "max_groups": [ - { - "ALL": 16777216 - }, - { - "SELECT": 16777216 - }, - { - "INDIRECT": 16777216 - }, - { - "FF": 16777216 - } - ], - "capabilities": [ - "SELECT_WEIGHT", - "CHAINING" - ], - "types": [ - "ALL", - "SELECT", - "INDIRECT", - "FF" - ] - } - ] -} \ No newline at end of file diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-34-ofp_group_desc_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-34-ofp_group_desc_stats_reply.packet.json deleted file mode 100644 index c23a9bbe..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-34-ofp_group_desc_stats_reply.packet.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "1": [ - { - "buckets": [ - { - "actions": [ - "OUTPUT:2" - ], - "len": 32, - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - ], - "group_id": 1, - "length": 40, - "type": "ALL" - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-35-ofp_queue_get_config_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-35-ofp_queue_get_config_request.packet.json deleted file mode 100644 index fc49ec2c..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-35-ofp_queue_get_config_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "port": 4294967295 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-36-ofp_queue_get_config_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-36-ofp_queue_get_config_reply.packet.json deleted file mode 100644 index 8e922a9a..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-36-ofp_queue_get_config_reply.packet.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "1": [ - { - "port": "ANY", - "queues": [ - { - "len": 48, - "port": 77, - "properties": [ - { - "len": 16, - "property": "MIN_RATE", - "rate": 10 - }, - { - "len": 16, - "property": "MAX_RATE", - "rate": 900 - } - ], - "queue_id": 99 - }, - { - "len": 48, - "port": 77, - "properties": [ - { - "len": 16, - "property": "MIN_RATE", - "rate": 100 - }, - { - "len": 16, - "property": "MAX_RATE", - "rate": 200 - } - ], - "queue_id": 88 - } - ] - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-38-ofp_queue_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-38-ofp_queue_stats_reply.packet.json deleted file mode 100644 index db50c1e5..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-38-ofp_queue_stats_reply.packet.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "1": [ - { - "port_no": 7, - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - }, - { - "port_no": 6, - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - }, - { - "port_no": 7, - "queue_id": 2, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-6-ofp_features_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-6-ofp_features_reply.packet.json deleted file mode 100644 index be040f79..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-6-ofp_features_reply.packet.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "1": [ - { - "advertised": 10240, - "config": 0, - "curr": 10248, - "curr_speed": 5000, - "hw_addr": "f2:0b:a4:7d:f8:ea", - "max_speed": 5000, - "name": "Port6", - "peer": 10248, - "port_no": 6, - "state": 4, - "supported": 10248 - }, - { - "advertised": 10240, - "config": 0, - "curr": 10248, - "curr_speed": 5000, - "hw_addr": "f2:0b:a4:d0:3f:70", - "max_speed": 5000, - "name": "Port7", - "peer": 10248, - "port_no": 7, - "state": 4, - "supported": 10248 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/3-62-ofp_group_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/3-62-ofp_group_stats_reply.packet.json deleted file mode 100644 index f2f1a6ce..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/3-62-ofp_group_stats_reply.packet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "1": [ - { - "bucket_stats": [ - { - "byte_count": 2345, - "packet_count": 234 - } - ], - "byte_count": 12345, - "group_id": 1, - "length": 48, - "packet_count": 123, - "ref_count": 2 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_group_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_group_stats_request.packet.json deleted file mode 100644 index 7646a77a..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_group_stats_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "group_id": 1 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_port_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_port_stats_request.packet.json deleted file mode 100644 index 7d56f29d..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_port_stats_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "port": 7 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json deleted file mode 100644 index e116fdc1..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "port": null -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json b/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json deleted file mode 100644 index 7d56f29d..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "port": 7 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json b/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json deleted file mode 100644 index 78077510..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "port": 7, - "queue_id":1 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json b/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json deleted file mode 100644 index ee465693..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "queue_id":1 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-0-ofp_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-0-ofp_desc_reply.packet.json deleted file mode 100644 index 8fc54b74..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-0-ofp_desc_reply.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "1": { - "dp_desc": "dp", - "hw_desc": "hw", - "mfr_desc": "mfr", - "serial_num": "serial", - "sw_desc": "sw" - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-11-ofp_flow_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-11-ofp_flow_stats_request.packet.json deleted file mode 100644 index a42dfef0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-11-ofp_flow_stats_request.packet.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "flow": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": {}, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-12-ofp_flow_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-12-ofp_flow_stats_reply.packet.json deleted file mode 100644 index f9b8e68f..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-12-ofp_flow_stats_reply.packet.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "1": [ - { - "actions": [], - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115277000, - "duration_sec": 358, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "length": 0, - "match": {}, - "packet_count": 0, - "priority": 65535, - "table_id": 0 - }, - { - "actions": [ - "OUTPUT:NORMAL" - ], - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115055000, - "duration_sec": 358, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "length": 0, - "match": { - "dl_type": 2054 - }, - "packet_count": 0, - "priority": 65534, - "table_id": 0 - }, - { - "actions": [ - "GOTO_TABLE:1" - ], - "byte_count": 238, - "cookie": 0, - "duration_nsec": 511582000, - "duration_sec": 316220, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "length": 0, - "match": { - "dl_src": "f2:0b:a4:7d:f8:ea", - "in_port": 6 - }, - "packet_count": 3, - "priority": 123, - "table_id": 0 - }, - { - "actions": [ - { - "WRITE_ACTIONS": [ - "SET_FIELD: {vlan_vid:258}", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "COPY_TTL_IN", - "POP_PBB", - "PUSH_PBB:4660", - "POP_MPLS:39030", - "PUSH_MPLS:34887", - "POP_VLAN", - "PUSH_VLAN:33024", - "DEC_MPLS_TTL", - "SET_MPLS_TTL:10", - "DEC_NW_TTL", - "SET_NW_TTL:10", - "SET_QUEUE:3", - "GROUP:99", - "OUTPUT:6", - "EXPERIMENTER: {experimenter:98765432, data:ZXhwX2RhdGE=}", - "NX_UNKNOWN: {subtype: 25976, data: cF9kYXRh}" - ] - }, - "SET_FIELD: {eth_src:01:02:03:04:05:06}", - "SET_FIELD: {pbb_uca:1}", - { - "WRITE_ACTIONS": [ - "OUTPUT:CONTROLLER" - ] - } - ], - "byte_count": 98, - "cookie": 0, - "duration_nsec": 980901000, - "duration_sec": 313499, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "length": 0, - "match": {}, - "packet_count": 1, - "priority": 0, - "table_id": 0 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-16-ofp_experimenter.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-16-ofp_experimenter.packet.json deleted file mode 100644 index c655f8f0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-16-ofp_experimenter.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "exp": { - "data": "bmF6bw==", - "data_type": "base64", - "exp_type": 123456789, - "experimenter": 98765432 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-2-ofp_flow_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-2-ofp_flow_mod.packet.json deleted file mode 100644 index fbd5c214..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-2-ofp_flow_mod.packet.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "cmd": 0, - "flow": { - "buffer_id": 65535, - "table_id": 1, - "priority": 123, - "match": { - "eth_dst": "f2:0b:a4:7d:f8:ea" - }, - "actions": [ - { - "type": "WRITE_ACTIONS", - "actions": [ - { - "type": "SET_FIELD", - "field": "vlan_vid", - "value": 258 - }, - { - "type": "COPY_TTL_OUT" - }, - { - "type": "COPY_TTL_IN" - }, - { - "type": "COPY_TTL_IN" - }, - { - "type": "POP_PBB" - }, - { - "type": "PUSH_PBB", - "ethertype": 4660 - }, - { - "type": "POP_MPLS", - "ethertype": 39030 - }, - { - "type": "PUSH_MPLS", - "ethertype": 34887 - }, - { - "type": "POP_VLAN" - }, - { - "type": "PUSH_VLAN", - "ethertype": 33024 - }, - { - "type": "DEC_MPLS_TTL" - }, - { - "type": "SET_MPLS_TTL", - "mpls_ttl": 10 - }, - { - "type": "DEC_NW_TTL" - }, - { - "type": "SET_NW_TTL", - "nw_ttl": 10 - }, - { - "type": "EXPERIMENTER", - "experimenter": 101, - "data": "AAECAwQFBgc=", - "data_type": "base64" - }, - { - "type": "SET_QUEUE", - "queue_id": 3 - }, - { - "type": "GROUP", - "group_id": 99 - }, - { - "type": "OUTPUT", - "max_len": 65535, - "port": 6 - } - ] - }, - { - "type": "SET_FIELD", - "field": "eth_src", - "value": "01:02:03:04:05:06" - }, - { - "type": "SET_FIELD", - "field": "pbb_uca", - "value": 1 - } - ] - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-21-ofp_group_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-21-ofp_group_mod.packet.json deleted file mode 100644 index fa48425a..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-21-ofp_group_mod.packet.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "cmd": 0, - "group": { - "buckets": [ - { - "actions": [ - { - "max_len": 65535, - "port": 2, - "type": "OUTPUT" - } - ], - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - ], - "group_id": 1, - "type": "ALL" - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-22-ofp_port_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-22-ofp_port_mod.packet.json deleted file mode 100644 index 73339730..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-22-ofp_port_mod.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "port_config": { - "advertise": 4096, - "config": 0, - "hw_addr": "00:11:00:00:11:11", - "mask": 0, - "port_no": 1 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-25-ofp_aggregate_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-25-ofp_aggregate_stats_request.packet.json deleted file mode 100644 index 845af65b..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-25-ofp_aggregate_stats_request.packet.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "flow": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": {}, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 255 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-26-ofp_aggregate_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-26-ofp_aggregate_stats_reply.packet.json deleted file mode 100644 index a4b23d12..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-26-ofp_aggregate_stats_reply.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "1": [ - { - "byte_count": 574, - "flow_count": 6, - "packet_count": 7 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-28-ofp_table_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-28-ofp_table_stats_reply.packet.json deleted file mode 100644 index 95b2c495..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-28-ofp_table_stats_reply.packet.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "1": [ - { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 0 - }, - { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 1 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-30-ofp_port_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-30-ofp_port_stats_reply.packet.json deleted file mode 100644 index a81e6825..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-30-ofp_port_stats_reply.packet.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "1": [ - { - "collisions": 0, - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 7, - "rx_bytes": 0, - "rx_crc_err": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "rx_packets": 0, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - }, - { - "collisions": 0, - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 6, - "rx_bytes": 336, - "rx_crc_err": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "rx_packets": 4, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-32-ofp_group_features_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-32-ofp_group_features_reply.packet.json deleted file mode 100644 index 2a29ac2d..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-32-ofp_group_features_reply.packet.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "1": [ - { - "actions": [ - { - "ALL": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "SELECT": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "INDIRECT": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "FF": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - } - ], - "capabilities": [ - "SELECT_WEIGHT", - "CHAINING" - ], - "max_groups": [ - { - "ALL": 16777216 - }, - { - "SELECT": 16777216 - }, - { - "INDIRECT": 16777216 - }, - { - "FF": 16777216 - } - ], - "types": [ - "ALL", - "SELECT", - "INDIRECT", - "FF" - ] - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-34-ofp_group_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-34-ofp_group_desc_reply.packet.json deleted file mode 100644 index c23a9bbe..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-34-ofp_group_desc_reply.packet.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "1": [ - { - "buckets": [ - { - "actions": [ - "OUTPUT:2" - ], - "len": 32, - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - ], - "group_id": 1, - "length": 40, - "type": "ALL" - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-35-ofp_queue_get_config_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-35-ofp_queue_get_config_request.packet.json deleted file mode 100644 index fc49ec2c..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-35-ofp_queue_get_config_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "port": 4294967295 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-36-ofp_queue_get_config_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-36-ofp_queue_get_config_reply.packet.json deleted file mode 100644 index 9d529400..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-36-ofp_queue_get_config_reply.packet.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "1": [ - { - "port": "ANY", - "queues": [ - { - "len": 64, - "port": 77, - "properties": [ - { - "len": 16, - "property": "MIN_RATE", - "rate": 10 - }, - { - "len": 16, - "property": "MAX_RATE", - "rate": 900 - }, - { - "data": [], - "experimenter": 999, - "len": 16, - "property": "EXPERIMENTER" - } - ], - "queue_id": 99 - }, - { - "len": 65, - "port": 77, - "properties": [ - { - "len": 16, - "property": "MIN_RATE", - "rate": 100 - }, - { - "len": 16, - "property": "MAX_RATE", - "rate": 200 - }, - { - "experimenter": 999, - "data": [ - 1 - ], - "len": 17, - "property": "EXPERIMENTER" - } - ], - "queue_id": 88 - }, - { - "len": 66, - "port": 77, - "properties": [ - { - "len": 16, - "property": "MIN_RATE", - "rate": 200 - }, - { - "len": 16, - "property": "MAX_RATE", - "rate": 400 - }, - { - "experimenter": 999, - "data": [ - 1, - 2 - ], - "len": 18, - "property": "EXPERIMENTER" - } - ], - "queue_id": 77 - } - ] - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-38-ofp_queue_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-38-ofp_queue_stats_reply.packet.json deleted file mode 100644 index b19fe300..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-38-ofp_queue_stats_reply.packet.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "1": [ - { - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 7, - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - }, - { - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 6, - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - }, - { - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 7, - "queue_id": 2, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-45-ofp_meter_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-45-ofp_meter_mod.packet.json deleted file mode 100644 index b78ea6be..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-45-ofp_meter_mod.packet.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "cmd": 0, - "meter": { - "flags": [ - "PKTPS", - "BURST", - "STATS" - ], - "meter_id": 100, - "bands": [ - { - "burst_size": 10, - "rate": 1000, - "type": "DROP" - }, - { - "burst_size": 10, - "prec_level": 1, - "rate": 1000, - "type": "DSCP_REMARK" - }, - { - "burst_size": 10, - "experimenter": 999, - "len": 16, - "rate": 1000, - "type": "EXPERIMENTER" - } - ] - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-48-ofp_meter_config_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-48-ofp_meter_config_reply.packet.json deleted file mode 100644 index d5efcd97..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-48-ofp_meter_config_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "bands": [ - { - "burst_size": 10, - "rate": 1000, - "type": "DROP" - } - ], - "flags": [ - "PKTPS", - "BURST", - "STATS" - ], - "meter_id": 100 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-50-ofp_meter_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-50-ofp_meter_stats_reply.packet.json deleted file mode 100644 index f21ec519..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-50-ofp_meter_stats_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "band_stats": [ - { - "byte_band_count": 0, - "packet_band_count": 0 - } - ], - "byte_in_count": 0, - "duration_nsec": 480000, - "duration_sec": 0, - "flow_count": 0, - "len": 56, - "meter_id": 100, - "packet_in_count": 0 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-52-ofp_meter_features_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-52-ofp_meter_features_reply.packet.json deleted file mode 100644 index 24dac7d4..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-52-ofp_meter_features_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "band_types": [ - "DROP", - "DSCP_REMARK" - ], - "capabilities": [ - "KBPS", - "PKTPS", - "BURST", - "STATS" - ], - "max_bands": 255, - "max_color": 0, - "max_meter": 16777216 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-54-ofp_port_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-54-ofp_port_desc_reply.packet.json deleted file mode 100644 index 72ff2ec3..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-54-ofp_port_desc_reply.packet.json +++ /dev/null @@ -1,30 +0,0 @@ -{ - "1": [ - { - "advertised": 10240, - "config": 0, - "curr": 10248, - "curr_speed": 5000, - "hw_addr": "f2:0b:a4:d0:3f:70", - "max_speed": 5000, - "name": "Port7", - "peer": 10248, - "port_no": 7, - "state": 4, - "supported": 10248 - }, - { - "advertised": 10240, - "config": 0, - "curr": 10248, - "curr_speed": 5000, - "hw_addr": "f2:0b:a4:7d:f8:ea", - "max_speed": 5000, - "name": "Port6", - "peer": 10248, - "port_no": 6, - "state": 4, - "supported": 10248 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-56-ofp_table_features_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-56-ofp_table_features_reply.packet.json deleted file mode 100644 index ded5a996..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-56-ofp_table_features_reply.packet.json +++ /dev/null @@ -1,11928 +0,0 @@ -{ - "1": [ - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - }, - { - "type": "EXPERIMENTER" - }, - { - "type": "EXPERIMENTER" - }, - { - "type": "EXPERIMENTER" - } - ], - "table_id": 0 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x01", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 1 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x02", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 2 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x03", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 3 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x04", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 4 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x05", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 5 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x06", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 6 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x07", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 7 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x08", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 8 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x09", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 9 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/4-58-ofp_group_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/4-58-ofp_group_stats_reply.packet.json deleted file mode 100644 index 1c6f9039..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/4-58-ofp_group_stats_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "bucket_stats": [ - { - "byte_count": 2345, - "packet_count": 234 - } - ], - "byte_count": 12345, - "duration_nsec": 609036000, - "duration_sec": 9, - "group_id": 1, - "length": 56, - "packet_count": 123, - "ref_count": 2 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_group_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_group_stats_request.packet.json deleted file mode 100644 index 7646a77a..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_group_stats_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "group_id": 1 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_config_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_config_request.packet.json deleted file mode 100644 index 3ad622e0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_config_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "meter_id": 1 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_stats_request.packet.json deleted file mode 100644 index 3ad622e0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_stats_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "meter_id": 1 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_port_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_port_stats_request.packet.json deleted file mode 100644 index 7d56f29d..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_port_stats_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "port": 7 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json deleted file mode 100644 index e116fdc1..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "port": null -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json b/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json deleted file mode 100644 index 7d56f29d..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "port": 7 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json b/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json deleted file mode 100644 index 78077510..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "port": 7, - "queue_id":1 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json b/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json deleted file mode 100644 index ee465693..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "queue_id":1 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-0-ofp_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-0-ofp_desc_reply.packet.json deleted file mode 100644 index 8fc54b74..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-0-ofp_desc_reply.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "1": { - "dp_desc": "dp", - "hw_desc": "hw", - "mfr_desc": "mfr", - "serial_num": "serial", - "sw_desc": "sw" - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-11-ofp_flow_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-11-ofp_flow_stats_request.packet.json deleted file mode 100644 index a42dfef0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-11-ofp_flow_stats_request.packet.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "flow": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": {}, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-12-ofp_flow_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-12-ofp_flow_stats_reply.packet.json deleted file mode 100644 index 134c3f12..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-12-ofp_flow_stats_reply.packet.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "1": [ - { - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115277000, - "duration_sec": 358, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [], - "length": 0, - "match": {}, - "packet_count": 0, - "priority": 65535, - "table_id": 0 - }, - { - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115055000, - "duration_sec": 358, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [ - { - "actions": [ - { - "max_len": 0, - "port": 4294967290, - "type": "OUTPUT" - } - ], - "type": "APPLY_ACTIONS" - } - ], - "length": 0, - "match": { - "eth_type": 2054 - }, - "packet_count": 0, - "priority": 65534, - "table_id": 0 - }, - { - "byte_count": 238, - "cookie": 0, - "duration_nsec": 511582000, - "duration_sec": 316220, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [ - { - "table_id": 1, - "type": "GOTO_TABLE" - } - ], - "length": 0, - "match": { - "eth_src": "f2:0b:a4:7d:f8:ea", - "in_port": 6 - }, - "packet_count": 3, - "priority": 123, - "table_id": 0 - }, - { - "byte_count": 98, - "cookie": 0, - "duration_nsec": 980901000, - "duration_sec": 313499, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [ - { - "actions": [ - { - "field": "vlan_vid", - "mask": null, - "type": "SET_FIELD", - "value": 258 - }, - { - "type": "COPY_TTL_OUT" - }, - { - "type": "COPY_TTL_IN" - }, - { - "type": "COPY_TTL_IN" - }, - { - "type": "POP_PBB" - }, - { - "ethertype": 4660, - "type": "PUSH_PBB" - }, - { - "ethertype": 39030, - "type": "POP_MPLS" - }, - { - "ethertype": 34887, - "type": "PUSH_MPLS" - }, - { - "type": "POP_VLAN" - }, - { - "ethertype": 33024, - "type": "PUSH_VLAN" - }, - { - "type": "DEC_MPLS_TTL" - }, - { - "mpls_ttl": 10, - "type": "SET_MPLS_TTL" - }, - { - "type": "DEC_NW_TTL" - }, - { - "nw_ttl": 10, - "type": "SET_NW_TTL" - }, - { - "queue_id": 3, - "type": "SET_QUEUE" - }, - { - "group_id": 99, - "type": "GROUP" - }, - { - "max_len": 65535, - "port": 6, - "type": "OUTPUT" - }, - { - "data": "ZXhwX2RhdGE=", - "experimenter": 98765432, - "type": "EXPERIMENTER" - }, - { - "data": "cF9kYXRh", - "experimenter": 8992, - "subtype": 25976, - "type": "EXPERIMENTER" - } - ], - "type": "WRITE_ACTIONS" - }, - { - "actions": [ - { - "field": "eth_src", - "mask": null, - "type": "SET_FIELD", - "value": "01:02:03:04:05:06" - }, - { - "field": "pbb_uca", - "mask": null, - "type": "SET_FIELD", - "value": 1 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "actions": [ - { - "max_len": 65535, - "port": 4294967293, - "type": "OUTPUT" - } - ], - "type": "WRITE_ACTIONS" - } - ], - "length": 0, - "match": {}, - "packet_count": 1, - "priority": 0, - "table_id": 0 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-16-ofp_experimenter.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-16-ofp_experimenter.packet.json deleted file mode 100644 index c655f8f0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-16-ofp_experimenter.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "exp": { - "data": "bmF6bw==", - "data_type": "base64", - "exp_type": 123456789, - "experimenter": 98765432 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-2-ofp_flow_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-2-ofp_flow_mod.packet.json deleted file mode 100644 index 72054e33..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-2-ofp_flow_mod.packet.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "cmd": 0, - "flow": { - "instructions": [ - { - "actions": [ - { - "field": "vlan_vid", - "type": "SET_FIELD", - "value": 258 - }, - { - "type": "COPY_TTL_OUT" - }, - { - "type": "COPY_TTL_IN" - }, - { - "type": "COPY_TTL_IN" - }, - { - "type": "POP_PBB" - }, - { - "ethertype": 4660, - "type": "PUSH_PBB" - }, - { - "ethertype": 39030, - "type": "POP_MPLS" - }, - { - "ethertype": 34887, - "type": "PUSH_MPLS" - }, - { - "type": "POP_VLAN" - }, - { - "ethertype": 33024, - "type": "PUSH_VLAN" - }, - { - "type": "DEC_MPLS_TTL" - }, - { - "mpls_ttl": 10, - "type": "SET_MPLS_TTL" - }, - { - "type": "DEC_NW_TTL" - }, - { - "nw_ttl": 10, - "type": "SET_NW_TTL" - }, - { - "data": "AAECAwQFBgc=", - "data_type": "base64", - "experimenter": 101, - "type": "EXPERIMENTER" - }, - { - "queue_id": 3, - "type": "SET_QUEUE" - }, - { - "group_id": 99, - "type": "GROUP" - }, - { - "max_len": 65535, - "port": 6, - "type": "OUTPUT" - } - ], - "type": "WRITE_ACTIONS" - }, - { - "actions": [ - { - "field": "eth_src", - "type": "SET_FIELD", - "value": "01:02:03:04:05:06" - }, - { - "field": "pbb_uca", - "type": "SET_FIELD", - "value": 1 - } - ], - "type": "APPLY_ACTIONS" - } - ], - "buffer_id": 65535, - "importance": 0, - "match": { - "eth_dst": "f2:0b:a4:7d:f8:ea" - }, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-21-ofp_group_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-21-ofp_group_mod.packet.json deleted file mode 100644 index fa48425a..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-21-ofp_group_mod.packet.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "cmd": 0, - "group": { - "buckets": [ - { - "actions": [ - { - "max_len": 65535, - "port": 2, - "type": "OUTPUT" - } - ], - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - ], - "group_id": 1, - "type": "ALL" - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-22-ofp_port_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-22-ofp_port_mod.packet.json deleted file mode 100644 index 980456eb..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-22-ofp_port_mod.packet.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "port_config": { - "config": 0, - "hw_addr": "00:11:00:00:11:11", - "mask": 0, - "port_no": 1, - "properties": [ - { - "advertise": 4096, - "length": 8, - "type": 0 - }, - { - "configure": 3, - "fl_offset": 2000, - "freq_lmda": 1500, - "grid_span": 3000, - "length": 24, - "tx_pwr": 300, - "type": 1 - }, - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - }, - { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - }, - { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - ] - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-25-ofp_aggregate_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-25-ofp_aggregate_stats_request.packet.json deleted file mode 100644 index 845af65b..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-25-ofp_aggregate_stats_request.packet.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "flow": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": {}, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 255 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-26-ofp_aggregate_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-26-ofp_aggregate_stats_reply.packet.json deleted file mode 100644 index a4b23d12..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-26-ofp_aggregate_stats_reply.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "1": [ - { - "byte_count": 574, - "flow_count": 6, - "packet_count": 7 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-28-ofp_table_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-28-ofp_table_stats_reply.packet.json deleted file mode 100644 index 95b2c495..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-28-ofp_table_stats_reply.packet.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "1": [ - { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 0 - }, - { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 1 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-30-ofp_port_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-30-ofp_port_stats_reply.packet.json deleted file mode 100644 index f9f1d86f..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-30-ofp_port_stats_reply.packet.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "1": [ - { - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 7, - "properties": [ - { - "collisions": 0, - "rx_crc_err": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "type": "ETHERNET" - }, - { - "bias_current": 300, - "flags": 3, - "rx_freq_lmda": 1500, - "rx_grid_span": 500, - "rx_offset": 700, - "rx_pwr": 2000, - "temperature": 273, - "tx_freq_lmda": 1500, - "tx_grid_span": 500, - "tx_offset": 700, - "tx_pwr": 2000, - "type": "OPTICAL" - }, - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "type": "EXPERIMENTER" - } - ], - "rx_bytes": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 0, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - }, - { - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 6, - "properties": [ - { - "collisions": 0, - "rx_crc_err": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "type": "ETHERNET" - } - ], - "rx_bytes": 336, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 4, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-32-ofp_group_features_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-32-ofp_group_features_reply.packet.json deleted file mode 100644 index 2a29ac2d..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-32-ofp_group_features_reply.packet.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "1": [ - { - "actions": [ - { - "ALL": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "SELECT": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "INDIRECT": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "FF": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - } - ], - "capabilities": [ - "SELECT_WEIGHT", - "CHAINING" - ], - "max_groups": [ - { - "ALL": 16777216 - }, - { - "SELECT": 16777216 - }, - { - "INDIRECT": 16777216 - }, - { - "FF": 16777216 - } - ], - "types": [ - "ALL", - "SELECT", - "INDIRECT", - "FF" - ] - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-34-ofp_group_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-34-ofp_group_desc_reply.packet.json deleted file mode 100644 index df0ef359..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-34-ofp_group_desc_reply.packet.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "1": [ - { - "buckets": [ - { - "actions": [ - { - "max_len": 65535, - "port": 2, - "type": "OUTPUT" - } - ], - "len": 32, - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - ], - "group_id": 1, - "length": 40, - "type": "ALL" - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-36-ofp_queue_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-36-ofp_queue_stats_reply.packet.json deleted file mode 100644 index a6d246d0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-36-ofp_queue_stats_reply.packet.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "1": [ - { - "duration_nsec": 0, - "duration_sec": 0, - "length": 104, - "port_no": 7, - "properties": [ - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": "EXPERIMENTER" - } - ], - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - }, - { - "duration_nsec": 0, - "duration_sec": 0, - "length": 48, - "port_no": 6, - "properties": [], - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - }, - { - "duration_nsec": 0, - "duration_sec": 0, - "length": 48, - "port_no": 7, - "properties": [], - "queue_id": 2, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-43-ofp_meter_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-43-ofp_meter_mod.packet.json deleted file mode 100644 index b78ea6be..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-43-ofp_meter_mod.packet.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "cmd": 0, - "meter": { - "flags": [ - "PKTPS", - "BURST", - "STATS" - ], - "meter_id": 100, - "bands": [ - { - "burst_size": 10, - "rate": 1000, - "type": "DROP" - }, - { - "burst_size": 10, - "prec_level": 1, - "rate": 1000, - "type": "DSCP_REMARK" - }, - { - "burst_size": 10, - "experimenter": 999, - "len": 16, - "rate": 1000, - "type": "EXPERIMENTER" - } - ] - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-46-ofp_meter_config_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-46-ofp_meter_config_reply.packet.json deleted file mode 100644 index d5efcd97..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-46-ofp_meter_config_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "bands": [ - { - "burst_size": 10, - "rate": 1000, - "type": "DROP" - } - ], - "flags": [ - "PKTPS", - "BURST", - "STATS" - ], - "meter_id": 100 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-48-ofp_meter_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-48-ofp_meter_stats_reply.packet.json deleted file mode 100644 index f21ec519..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-48-ofp_meter_stats_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "band_stats": [ - { - "byte_band_count": 0, - "packet_band_count": 0 - } - ], - "byte_in_count": 0, - "duration_nsec": 480000, - "duration_sec": 0, - "flow_count": 0, - "len": 56, - "meter_id": 100, - "packet_in_count": 0 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-50-ofp_meter_features_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-50-ofp_meter_features_reply.packet.json deleted file mode 100644 index 24dac7d4..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-50-ofp_meter_features_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "band_types": [ - "DROP", - "DSCP_REMARK" - ], - "capabilities": [ - "KBPS", - "PKTPS", - "BURST", - "STATS" - ], - "max_bands": 255, - "max_color": 0, - "max_meter": 16777216 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-52-ofp_port_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-52-ofp_port_desc_reply.packet.json deleted file mode 100644 index c2f748a8..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-52-ofp_port_desc_reply.packet.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "1": [ - { - "config": 0, - "hw_addr": "f2:0b:a4:d0:3f:70", - "length": 168, - "name": "Port7", - "port_no": 7, - "properties": [ - { - "advertised": 10240, - "curr": 10248, - "curr_speed": 5000, - "length": 32, - "max_speed": 5000, - "peer": 10248, - "supported": 10248, - "type": "ETHERNET" - }, - { - "length": 40, - "rx_grid_freq_lmda": 1500, - "rx_max_freq_lmda": 2000, - "rx_min_freq_lmda": 1000, - "supported": 1, - "tx_grid_freq_lmda": 1500, - "tx_max_freq_lmda": 2000, - "tx_min_freq_lmda": 1000, - "tx_pwr_max": 2000, - "tx_pwr_min": 1000, - "type": "OPTICAL" - }, - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": "EXPERIMENTER" - } - ], - "state": 4 - }, - { - "config": 0, - "hw_addr": "f2:0b:a4:7d:f8:ea", - "length": 72, - "name": "Port6", - "port_no": 6, - "properties": [ - { - "advertised": 10240, - "curr": 10248, - "curr_speed": 5000, - "length": 32, - "max_speed": 5000, - "peer": 10248, - "supported": 10248, - "type": "ETHERNET" - } - ], - "state": 4 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-54-ofp_table_features_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-54-ofp_table_features_reply.packet.json deleted file mode 100644 index ded5a996..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-54-ofp_table_features_reply.packet.json +++ /dev/null @@ -1,11928 +0,0 @@ -{ - "1": [ - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - }, - { - "type": "EXPERIMENTER" - }, - { - "type": "EXPERIMENTER" - }, - { - "type": "EXPERIMENTER" - } - ], - "table_id": 0 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x01", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 1 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x02", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 2 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x03", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 3 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x04", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 4 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x05", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 5 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x06", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 6 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x07", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 7 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x08", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 8 - }, - { - "config": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x09", - "properties": [ - { - "instruction_ids": [ - { - "len": 4, - "type": 1 - }, - { - "len": 4, - "type": 2 - }, - { - "len": 4, - "type": 3 - }, - { - "len": 4, - "type": 4 - }, - { - "len": 4, - "type": 5 - }, - { - "len": 4, - "type": 6 - } - ], - "type": "INSTRUCTIONS" - }, - { - "table_ids": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": "NEXT_TABLES" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "WRITE_ACTIONS" - }, - { - "action_ids": [ - { - "len": 4, - "type": 0 - }, - { - "len": 4, - "type": 22 - }, - { - "len": 4, - "type": 21 - }, - { - "len": 4, - "type": 15 - }, - { - "len": 4, - "type": 16 - }, - { - "len": 4, - "type": 23 - }, - { - "len": 4, - "type": 24 - }, - { - "len": 4, - "type": 11 - }, - { - "len": 4, - "type": 12 - }, - { - "len": 4, - "type": 17 - }, - { - "len": 4, - "type": 18 - }, - { - "len": 4, - "type": 19 - }, - { - "len": 4, - "type": 20 - }, - { - "len": 4, - "type": 26 - }, - { - "len": 4, - "type": 27 - }, - { - "len": 4, - "type": 25 - } - ], - "type": "APPLY_ACTIONS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "MATCH" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WILDCARDS" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "WRITE_SETFIELD" - }, - { - "oxm_ids": [ - { - "hasmask": 0, - "length": 0, - "type": "in_port" - }, - { - "hasmask": 0, - "length": 0, - "type": "metadata" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "eth_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - }, - { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - }, - { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_op" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - }, - { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - }, - { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - }, - { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - }, - { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - }, - { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - ], - "type": "APPLY_SETFIELD" - } - ], - "table_id": 9 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-56-ofp_group_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-56-ofp_group_stats_reply.packet.json deleted file mode 100644 index 1c6f9039..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-56-ofp_group_stats_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "bucket_stats": [ - { - "byte_count": 2345, - "packet_count": 234 - } - ], - "byte_count": 12345, - "duration_nsec": 609036000, - "duration_sec": 9, - "group_id": 1, - "length": 56, - "packet_count": 123, - "ref_count": 2 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-63-ofp_queue_desc_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-63-ofp_queue_desc_request.packet.json deleted file mode 100644 index fc863813..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-63-ofp_queue_desc_request.packet.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "port_no": 7, - "queue_id": 4294967295 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of14/5-64-ofp_queue_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of14/5-64-ofp_queue_desc_reply.packet.json deleted file mode 100644 index ca6e87f2..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of14/5-64-ofp_queue_desc_reply.packet.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "1": [ - { - "len": 32, - "port_no": 7, - "properties": [ - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": "EXPERIMENTER" - } - ], - "queue_id": 0 - }, - { - "len": 88, - "port_no": 8, - "properties": [ - { - "length": 8, - "rate": 300, - "type": "MIN_RATE" - }, - { - "length": 8, - "rate": 900, - "type": "MAX_RATE" - }, - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": "EXPERIMENTER" - } - ], - "queue_id": 1 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json deleted file mode 100644 index 0b5e04be..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "1": [ - { - "cookie": 1234605616436508552, - "flags": 1, - "hard_timeout": 255, - "idle_timeout": 255, - "importance": 43690, - "instructions": [ - { - "table_id": 2, - "type": "GOTO_TABLE" - }, - { - "actions": [ - { - "meter_id": 2, - "type": "METER" - } - ], - "type": "WRITE_ACTIONS" - }, - { - "actions": [ - { - "type": "COPY_FIELD", - "n_bits": 32, - "src_offset": 1, - "dst_offset": 2, - "src_oxm_id": "eth_src", - "dst_oxm_id": "eth_dst" - } - ], - "type": "APPLY_ACTIONS" - } - ], - "length": 64, - "match": { - "in_port": 1 - }, - "priority": 5, - "stats": { - "flow_count": 1 - }, - "table_id": 1 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json deleted file mode 100644 index f59aa0b2..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "flow": { - "cookie": 1234605616436508552, - "cookie_mask": 18446744073709551615, - "flags": 0, - "match": { - "in_port": 1 - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_mod.packet.json deleted file mode 100644 index cc3ba488..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_mod.packet.json +++ /dev/null @@ -1,115 +0,0 @@ -{ - "cmd": 0, - "flow": { - "instructions": [ - { - "actions": [ - { - "field": "vlan_vid", - "type": "SET_FIELD", - "value": 258 - }, - { - "type": "COPY_TTL_OUT" - }, - { - "type": "COPY_TTL_IN" - }, - { - "type": "COPY_TTL_IN" - }, - { - "type": "POP_PBB" - }, - { - "ethertype": 4660, - "type": "PUSH_PBB" - }, - { - "ethertype": 39030, - "type": "POP_MPLS" - }, - { - "ethertype": 34887, - "type": "PUSH_MPLS" - }, - { - "type": "POP_VLAN" - }, - { - "ethertype": 33024, - "type": "PUSH_VLAN" - }, - { - "type": "DEC_MPLS_TTL" - }, - { - "mpls_ttl": 10, - "type": "SET_MPLS_TTL" - }, - { - "type": "DEC_NW_TTL" - }, - { - "nw_ttl": 10, - "type": "SET_NW_TTL" - }, - { - "data": "AAECAwQFBgc=", - "data_type": "base64", - "experimenter": 101, - "type": "EXPERIMENTER" - }, - { - "queue_id": 3, - "type": "SET_QUEUE" - }, - { - "meter_id": 2, - "type": "METER" - }, - { - "group_id": 99, - "type": "GROUP" - }, - { - "max_len": 65535, - "port": 6, - "type": "OUTPUT" - } - ], - "type": "WRITE_ACTIONS" - }, - { - "actions": [ - { - "field": "eth_src", - "type": "SET_FIELD", - "value": "01:02:03:04:05:06" - }, - { - "field": "pbb_uca", - "type": "SET_FIELD", - "value": 1 - }, - { - "type": "COPY_FIELD", - "n_bits": 32, - "src_offset": 1, - "dst_offset": 2, - "src_oxm_id": "eth_src", - "dst_oxm_id": "eth_dst" - } - ], - "type": "APPLY_ACTIONS" - } - ], - "buffer_id": 65535, - "importance": 0, - "match": { - "eth_dst": "f2:0b:a4:7d:f8:ea" - }, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json deleted file mode 100644 index ac4f93c4..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "1": [ - { - "length": 16, - "stats": { - "flow_count": 1 - } - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_request.packet.json deleted file mode 100644 index 845af65b..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_request.packet.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "flow": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": {}, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 255 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-desc_reply.packet.json deleted file mode 100644 index 8fc54b74..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-desc_reply.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "1": { - "dp_desc": "dp", - "hw_desc": "hw", - "mfr_desc": "mfr", - "serial_num": "serial", - "sw_desc": "sw" - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-experimenter.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-experimenter.packet.json deleted file mode 100644 index c655f8f0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-experimenter.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "exp": { - "data": "bmF6bw==", - "data_type": "base64", - "exp_type": 123456789, - "experimenter": 98765432 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_reply.packet.json deleted file mode 100644 index 4e12f857..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_reply.packet.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "1": [ - { - "cookie": 1234605616436508552, - "flags": 1, - "hard_timeout": 255, - "idle_timeout": 255, - "importance": 43690, - "instructions": [ - { - "table_id": 2, - "type": "GOTO_TABLE" - } - ], - "length": 64, - "match": { - "in_port": 1 - }, - "priority": 5, - "stats": { - "flow_count": 1 - }, - "table_id": 1 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_request.packet.json deleted file mode 100644 index f59aa0b2..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_request.packet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "flow": { - "cookie": 1234605616436508552, - "cookie_mask": 18446744073709551615, - "flags": 0, - "match": { - "in_port": 1 - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json deleted file mode 100644 index 72054e33..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "cmd": 0, - "flow": { - "instructions": [ - { - "actions": [ - { - "field": "vlan_vid", - "type": "SET_FIELD", - "value": 258 - }, - { - "type": "COPY_TTL_OUT" - }, - { - "type": "COPY_TTL_IN" - }, - { - "type": "COPY_TTL_IN" - }, - { - "type": "POP_PBB" - }, - { - "ethertype": 4660, - "type": "PUSH_PBB" - }, - { - "ethertype": 39030, - "type": "POP_MPLS" - }, - { - "ethertype": 34887, - "type": "PUSH_MPLS" - }, - { - "type": "POP_VLAN" - }, - { - "ethertype": 33024, - "type": "PUSH_VLAN" - }, - { - "type": "DEC_MPLS_TTL" - }, - { - "mpls_ttl": 10, - "type": "SET_MPLS_TTL" - }, - { - "type": "DEC_NW_TTL" - }, - { - "nw_ttl": 10, - "type": "SET_NW_TTL" - }, - { - "data": "AAECAwQFBgc=", - "data_type": "base64", - "experimenter": 101, - "type": "EXPERIMENTER" - }, - { - "queue_id": 3, - "type": "SET_QUEUE" - }, - { - "group_id": 99, - "type": "GROUP" - }, - { - "max_len": 65535, - "port": 6, - "type": "OUTPUT" - } - ], - "type": "WRITE_ACTIONS" - }, - { - "actions": [ - { - "field": "eth_src", - "type": "SET_FIELD", - "value": "01:02:03:04:05:06" - }, - { - "field": "pbb_uca", - "type": "SET_FIELD", - "value": 1 - } - ], - "type": "APPLY_ACTIONS" - } - ], - "buffer_id": 65535, - "importance": 0, - "match": { - "eth_dst": "f2:0b:a4:7d:f8:ea" - }, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_reply.packet.json deleted file mode 100644 index 385f256b..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_reply.packet.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "1": [ - { - "length": 40, - "match": { - "in_port": 1 - }, - "priority": 1, - "reason": 0, - "stats": { - "flow_count": 1 - }, - "table_id": 1 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_request.packet.json deleted file mode 100644 index a42dfef0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_request.packet.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "flow": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": {}, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_reply.packet.json deleted file mode 100644 index b6b75020..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_reply.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "1": [ - { - "buckets": [ - { - "actions": [ - { - "max_len": 65509, - "port": 1, - "type": "OUTPUT" - } - ], - "bucket_id": 65535, - "properties": [ - { - "type": "WEIGHT", - "weight": 65535 - } - ] - } - ], - "group_id": 1, - "properties": [], - "type": "SELECT" - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_request.packet.json deleted file mode 100644 index f25aaff4..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "group_id": 52651 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_features_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_features_reply.packet.json deleted file mode 100644 index 2a29ac2d..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_features_reply.packet.json +++ /dev/null @@ -1,104 +0,0 @@ -{ - "1": [ - { - "actions": [ - { - "ALL": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "SELECT": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "INDIRECT": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - }, - { - "FF": [ - "OUTPUT", - "COPY_TTL_OUT", - "COPY_TTL_IN", - "SET_MPLS_TTL", - "DEC_MPLS_TTL", - "PUSH_VLAN", - "POP_VLAN", - "PUSH_MPLS", - "POP_MPLS", - "SET_QUEUE", - "GROUP", - "SET_NW_TTL", - "DEC_NW_TTL", - "SET_FIELD" - ] - } - ], - "capabilities": [ - "SELECT_WEIGHT", - "CHAINING" - ], - "max_groups": [ - { - "ALL": 16777216 - }, - { - "SELECT": 16777216 - }, - { - "INDIRECT": 16777216 - }, - { - "FF": 16777216 - } - ], - "types": [ - "ALL", - "SELECT", - "INDIRECT", - "FF" - ] - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_mod.packet.json deleted file mode 100644 index eca861ea..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_mod.packet.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "cmd": 3, - "group": { - "buckets": [ - { - "actions": [ - { - "len": 8, - "type": "POP_VLAN" - }, - { - "field": "ipv4_dst", - "type": "SET_FIELD", - "value": "192.168.2.9" - } - ], - "bucket_id": 305419896, - "properties": [ - { - "length": 8, - "type": "WEIGHT", - "weight": 52428 - }, - { - "length": 8, - "type": "WATCH_PORT", - "watch": 56797 - }, - { - "length": 8, - "type": "WATCH_GROUP", - "watch": 4008636142 - } - ] - } - ], - "command_bucket_id": 3149642683, - "group_id": 2863311530, - "properties": [], - "type": "SELECT" - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_stats_reply.packet.json deleted file mode 100644 index 1c6f9039..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_stats_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "bucket_stats": [ - { - "byte_count": 2345, - "packet_count": 234 - } - ], - "byte_count": 12345, - "duration_nsec": 609036000, - "duration_sec": 9, - "group_id": 1, - "length": 56, - "packet_count": 123, - "ref_count": 2 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_desc_reply.packet.json deleted file mode 100644 index d5efcd97..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_desc_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "bands": [ - { - "burst_size": 10, - "rate": 1000, - "type": "DROP" - } - ], - "flags": [ - "PKTPS", - "BURST", - "STATS" - ], - "meter_id": 100 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_features_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_features_reply.packet.json deleted file mode 100644 index 24dac7d4..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_features_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "band_types": [ - "DROP", - "DSCP_REMARK" - ], - "capabilities": [ - "KBPS", - "PKTPS", - "BURST", - "STATS" - ], - "max_bands": 255, - "max_color": 0, - "max_meter": 16777216 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_mod.packet.json deleted file mode 100644 index 1d881209..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_mod.packet.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "cmd": 0, - "meter": { - "bands": [ - { - "burst_size": 10, - "rate": 1000, - "type": "DROP" - }, - { - "burst_size": 10, - "prec_level": 1, - "rate": 1000, - "type": "DSCP_REMARK" - } - ], - "flags": [ - "PKTPS", - "BURST", - "STATS" - ], - "meter_id": 100 - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_stats_reply.packet.json deleted file mode 100644 index e7f9722b..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_stats_reply.packet.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "1": [ - { - "band_stats": [ - { - "byte_band_count": 0, - "packet_band_count": 0 - } - ], - "byte_in_count": 0, - "duration_nsec": 480000, - "duration_sec": 0, - "len": 56, - "meter_id": 100, - "packet_in_count": 0, - "ref_count": 0 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_reply.packet.json deleted file mode 100644 index c2f748a8..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_reply.packet.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "1": [ - { - "config": 0, - "hw_addr": "f2:0b:a4:d0:3f:70", - "length": 168, - "name": "Port7", - "port_no": 7, - "properties": [ - { - "advertised": 10240, - "curr": 10248, - "curr_speed": 5000, - "length": 32, - "max_speed": 5000, - "peer": 10248, - "supported": 10248, - "type": "ETHERNET" - }, - { - "length": 40, - "rx_grid_freq_lmda": 1500, - "rx_max_freq_lmda": 2000, - "rx_min_freq_lmda": 1000, - "supported": 1, - "tx_grid_freq_lmda": 1500, - "tx_max_freq_lmda": 2000, - "tx_min_freq_lmda": 1000, - "tx_pwr_max": 2000, - "tx_pwr_min": 1000, - "type": "OPTICAL" - }, - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": "EXPERIMENTER" - } - ], - "state": 4 - }, - { - "config": 0, - "hw_addr": "f2:0b:a4:7d:f8:ea", - "length": 72, - "name": "Port6", - "port_no": 6, - "properties": [ - { - "advertised": 10240, - "curr": 10248, - "curr_speed": 5000, - "length": 32, - "max_speed": 5000, - "peer": 10248, - "supported": 10248, - "type": "ETHERNET" - } - ], - "state": 4 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_request.packet.json deleted file mode 100644 index d0519e83..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "port_no": 48346 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_mod.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_mod.packet.json deleted file mode 100644 index be9de69d..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_mod.packet.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "port_config": { - "config": 0, - "hw_addr": "00:11:00:00:11:11", - "mask": 0, - "port_no": 1, - "properties": [ - { - "advertise": 4096, - "length": 8, - "type": "ETHERNET" - }, - { - "configure": 3, - "fl_offset": 2000, - "freq_lmda": 1500, - "grid_span": 3000, - "length": 24, - "tx_pwr": 300, - "type": "OPTICAL" - }, - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": "EXPERIMENTER" - } - ] - } -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_stats_reply.packet.json deleted file mode 100644 index 821c9b72..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_stats_reply.packet.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "1": [ - { - "duration_nsec": 0, - "duration_sec": 0, - "length": 224, - "port_no": 7, - "properties": [ - { - "collisions": 0, - "length": 40, - "rx_crc_err": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "type": "ETHERNET" - }, - { - "bias_current": 300, - "flags": 3, - "length": 44, - "rx_freq_lmda": 1500, - "rx_grid_span": 500, - "rx_offset": 700, - "rx_pwr": 2000, - "temperature": 273, - "tx_freq_lmda": 1500, - "tx_grid_span": 500, - "tx_offset": 700, - "tx_pwr": 2000, - "type": "OPTICAL" - }, - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": "EXPERIMENTER" - } - ], - "rx_bytes": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 0, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - }, - { - "duration_nsec": 0, - "duration_sec": 0, - "length": 120, - "port_no": 6, - "properties": [ - { - "collisions": 0, - "length": 40, - "rx_crc_err": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "type": "ETHERNET" - } - ], - "rx_bytes": 336, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 4, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_reply.packet.json deleted file mode 100644 index 71ca0b71..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_reply.packet.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "1": [ - { - "len": 32, - "port_no": 7, - "properties": [ - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": "EXPERIMENTER" - } - ], - "queue_id": 0 - }, - { - "len": 88, - "port_no": 8, - "properties": [ - { - "length": 8, - "rate": 300, - "type": "MIN_RATE" - }, - { - "length": 8, - "rate": 900, - "type": "MAX_RATE" - }, - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": "EXPERIMENTER" - } - ], - "queue_id": 1 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_request.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_request.packet.json deleted file mode 100644 index 9765cf31..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_request.packet.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "port_no": 52651, - "queue_id": 57020 -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_stats_reply.packet.json deleted file mode 100644 index a6d246d0..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_stats_reply.packet.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "1": [ - { - "duration_nsec": 0, - "duration_sec": 0, - "length": 104, - "port_no": 7, - "properties": [ - { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": "EXPERIMENTER" - }, - { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": "EXPERIMENTER" - } - ], - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - }, - { - "duration_nsec": 0, - "duration_sec": 0, - "length": 48, - "port_no": 6, - "properties": [], - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - }, - { - "duration_nsec": 0, - "duration_sec": 0, - "length": 48, - "port_no": 7, - "properties": [], - "queue_id": 2, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_features_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_features_reply.packet.json deleted file mode 100644 index e16efb76..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_features_reply.packet.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "1": [ - { - "capabilities": 4, - "command": 1, - "features": 1, - "length": 80, - "max_entries": 255, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "table1", - "properties": [ - { - "oxm_values": [ - { - "eth_src": "aa:bb:cc:dd:ee:ff" - } - ], - "type": "PACKET_TYPES" - } - ], - "table_id": 1 - } - ] -} diff --git a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_stats_reply.packet.json b/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_stats_reply.packet.json deleted file mode 100644 index 95b2c495..00000000 --- a/ryu/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_stats_reply.packet.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "1": [ - { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 0 - }, - { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 1 - } - ] -} diff --git a/ryu/tests/unit/lib/ovs/__init__.py b/ryu/tests/unit/lib/ovs/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/lib/ovs/test_vsctl.py b/ryu/tests/unit/lib/ovs/test_vsctl.py deleted file mode 100644 index 28edf6e9..00000000 --- a/ryu/tests/unit/lib/ovs/test_vsctl.py +++ /dev/null @@ -1,789 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from distutils.spawn import find_executable -import logging -import subprocess -import unittest - -from nose.tools import eq_ -from nose.tools import ok_ - -from ryu.lib.hub import sleep -from ryu.lib.ovs import vsctl - - -LOG = logging.getLogger(__name__) - -DOCKER_IMAGE_MININET = 'osrg/ryu-book' - -OVSDB_MANAGER_ADDR = 'ptcp:6640' -OVSDB_SWITCH_ADDR = 'tcp:%s:6640' - - -def setUpModule(): - if not find_executable('docker'): - raise unittest.SkipTest( - 'Docker is not available. Test in %s will be skipped.' % __name__) - - -def _run(command): - popen = subprocess.Popen(command.split(), stdout=subprocess.PIPE) - popen.wait() - result = popen.stdout.read().decode('utf-8') - - if result: - return [str(r.strip('\r')) for r in result.split('\n')] - else: - return [] - - -class TestVSCtl(unittest.TestCase): - """ - Test cases for ryu.lib.ovs.vsctl.VSCtl - """ - container_mn = None # Container ID of Mininet - container_mn_ip = None # IP of Mininet container - - vsctl = None # instance of vsctl.VSCtl - - @classmethod - def _docker_exec(cls, container, command): - return _run('docker exec -t %s %s' % (container, command)) - - @classmethod - def _docker_exec_mn(cls, command): - return cls._docker_exec(cls.container_mn, command) - - @classmethod - def _docker_run(cls, image): - return _run('docker run --privileged -t -d %s' % image)[0] - - @classmethod - def _docker_stop(cls, container): - return _run('docker stop %s' % container)[0] - - @classmethod - def _docker_rm(cls, container): - return _run('docker rm %s' % container)[0] - - @classmethod - def _docker_inspect_ip_addr(cls, container): - return _run( - 'docker inspect --format="{{.NetworkSettings.IPAddress}}" %s' % - container)[0].strip('"') - - @classmethod - def _set_up_mn_container(cls): - cls.container_mn = cls._docker_run(DOCKER_IMAGE_MININET) - cls.container_mn_ip = cls._docker_inspect_ip_addr(cls.container_mn) - - # Note: Wait for loading the OVS kernel module. - # If the OVS kernel module is loaded at first time, it might take - # a few seconds. - sleep(5) - - cls._docker_exec_mn( - 'ovs-vsctl set-manager %s' % OVSDB_MANAGER_ADDR) - - @classmethod - def _set_up_vsctl(cls): - cls.vsctl = vsctl.VSCtl(OVSDB_SWITCH_ADDR % cls.container_mn_ip) - - @classmethod - def setUpClass(cls): - cls._set_up_mn_container() - cls._set_up_vsctl() - - @classmethod - def _tear_down_mn_container(cls): - cls._docker_exec_mn('mn --clean') - cls._docker_stop(cls.container_mn) - cls._docker_rm(cls.container_mn) - - @classmethod - def tearDownClass(cls): - cls._tear_down_mn_container() - - def setUp(self): - pass - - def tearDown(self): - pass - - def _run_commands(self, commands): - self.vsctl.run_command(commands, timeout_sec=1) - - # 00: Open vSwitch commands - - def test_00_01_init(self): - command = vsctl.VSCtlCommand('init') - self._run_commands([command]) - - ok_(command.result is None) - - def test_00_02_show(self): - command = vsctl.VSCtlCommand('show') - self._run_commands([command]) - - ok_(command.result is not None) - - # 01: Bridge commands - - def test_01_01_add_br_bridge(self): - bridge = 's1' - command = vsctl.VSCtlCommand('add-br', (bridge,)) - self._run_commands([command]) - - result = self._docker_exec_mn('ovs-vsctl list-br') - ok_(bridge in result) - - def test_01_02_add_br_parent_vlan(self): - bridge = 'sub-s1-100' - parent = 's1' - vlan = '100' - command = vsctl.VSCtlCommand('add-br', (bridge, parent, vlan)) - self._run_commands([command]) - - result = self._docker_exec_mn('ovs-vsctl list-br') - ok_(bridge in result) - result = self._docker_exec_mn( - 'ovs-vsctl br-to-parent %s' % bridge) - eq_(parent, result[0]) - result = self._docker_exec_mn( - 'ovs-vsctl br-to-vlan %s' % bridge) - eq_(vlan, result[0]) - - def test_01_03_del_br(self): - bridge = 's1' - child = 'sub-s1-100' - - command = vsctl.VSCtlCommand('del-br', (bridge,)) - self._run_commands([command]) - - result = self._docker_exec_mn('ovs-vsctl list-br') - ok_(bridge not in result) - ok_(child not in result) - - def test_01_04_list_br(self): - bridge = 's1' - child = 'sub-s1-100' - vlan = '100' - self._docker_exec_mn('ovs-vsctl add-br %s' % bridge) - self._docker_exec_mn( - 'ovs-vsctl add-br %s %s %s' % (child, bridge, vlan)) - - command = vsctl.VSCtlCommand('list-br') - self._run_commands([command]) - - ok_(bridge in command.result) - ok_(child in command.result) - - def test_01_05_br_exists(self): - bridge = 's1' - - command = vsctl.VSCtlCommand('br-exists', (bridge, )) - self._run_commands([command]) - - eq_(True, command.result) - - def test_01_06_br_to_vlan(self): - bridge = 's1' - - command = vsctl.VSCtlCommand('br-to-vlan', (bridge, )) - self._run_commands([command]) - - eq_(0, command.result) - - def test_01_06_br_to_vlan_fake_bridge(self): - bridge = 'sub-s1-100' - - command = vsctl.VSCtlCommand('br-to-vlan', (bridge, )) - self._run_commands([command]) - - eq_(100, command.result) - - def test_01_07_br_to_parent(self): - bridge = 's1' - parent = bridge - - command = vsctl.VSCtlCommand('br-to-parent', (bridge, )) - self._run_commands([command]) - - # result = - eq_(parent, command.result.name) - - def test_01_07_br_to_parent_fake_bridge(self): - bridge = 'sub-s1-100' - parent = 's1' - - command = vsctl.VSCtlCommand('br-to-parent', (bridge, )) - self._run_commands([command]) - - # result = - eq_(parent, command.result.name) - - def test_01_08_br_set_external_id_add(self): - bridge = 's1' - key = 'ext_id_key' - value = 'ext_id_value' - - command = vsctl.VSCtlCommand( - 'br-set-external-id', (bridge, key, value)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl br-get-external-id %s %s' % (bridge, key)) - eq_(value, result[0]) - - def test_01_09_br_get_external_id_value(self): - bridge = 's1' - key = 'ext_id_key' - value = 'ext_id_value' - - command = vsctl.VSCtlCommand( - 'br-get-external-id', (bridge, key)) - self._run_commands([command]) - - eq_(value, command.result) - - def test_01_10_br_get_external_id_dict(self): - bridge = 's1' - key = 'ext_id_key' - value = 'ext_id_value' - - command = vsctl.VSCtlCommand( - 'br-get-external-id', (bridge,)) - self._run_commands([command]) - - eq_({key: value}, command.result) - - def test_01_11_br_set_external_id_clear(self): - bridge = 's1' - key = 'ext_id_key' - - command = vsctl.VSCtlCommand( - 'br-set-external-id', (bridge, key)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl br-get-external-id %s %s' % (bridge, key)) - eq_([], result) - - # Clean up - self._docker_exec_mn('mn --clean') - - # 02: Port commands - - def test_02_01_list_ports(self): - bridge = 's1' - interface_1 = 's1-eth1' - interface_2 = 's1-eth2' - - self._docker_exec_mn( - 'ip link add %s type dummy' % interface_1) - self._docker_exec_mn( - 'ip link add %s type dummy' % interface_2) - self._docker_exec_mn( - 'ovs-vsctl add-br %(bridge)s' - ' -- add-port %(bridge)s %(interface_1)s' - ' -- add-port %(bridge)s %(interface_2)s' % locals()) - - command = vsctl.VSCtlCommand('list-ports', (bridge,)) - self._run_commands([command]) - - ok_(interface_1 in command.result) - ok_(interface_2 in command.result) - - def test_02_02_add_port(self): - bridge = 's1' - interface_1 = 's1-eth1' - self._docker_exec_mn( - 'ovs-vsctl del-port %s %s' % (bridge, interface_1)) - - command = vsctl.VSCtlCommand('add-port', (bridge, interface_1)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl port-to-br %s' % interface_1) - eq_(bridge, result[0]) - - def test_02_03_add_bond(self): - bridge = 's1' - interface_1 = 's1-eth1' - interface_2 = 's1-eth2' - port = 's1-bond1' - interface_list = [interface_1, interface_2] - self._docker_exec_mn('ovs-vsctl del-br %s' % bridge) - self._docker_exec_mn('ovs-vsctl add-br %s' % bridge) - - command = vsctl.VSCtlCommand( - 'add-bond', (bridge, port, interface_list)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl port-to-br %s' % port) - eq_(bridge, result[0]) - - def test_02_04_del_port(self): - bridge = 's1' - port = 's1-bond1' - - command = vsctl.VSCtlCommand('del-port', (bridge, port)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl list-ports %s' % bridge) - eq_([], result) - - def test_02_05_port_to_br(self): - bridge = 's1' - port_1 = 's1-eth1' - port_2 = 's1-eth2' - self._docker_exec_mn('ovs-vsctl del-br %s' % bridge) - self._docker_exec_mn( - 'ovs-vsctl add-br %(bridge)s' - ' -- add-port %(bridge)s %(port_1)s' - ' -- add-port %(bridge)s %(port_2)s' % locals()) - - command = vsctl.VSCtlCommand('port-to-br', (port_1,)) - self._run_commands([command]) - - eq_(bridge, command.result) - - # Clean up - self._docker_exec_mn('mn --clean') - - # 03: Interface commands - - def test_03_01_list_ifaces(self): - bridge = 's1' - interface_1 = 's1-eth1' - interface_2 = 's1-eth2' - - self._docker_exec_mn( - 'ip link add %s type dummy' % interface_1) - self._docker_exec_mn( - 'ip link add %s type dummy' % interface_2) - self._docker_exec_mn( - 'ovs-vsctl add-br %(bridge)s' - ' -- add-port %(bridge)s %(interface_1)s' - ' -- add-port %(bridge)s %(interface_2)s' % locals()) - - command = vsctl.VSCtlCommand('list-ifaces', (bridge,)) - self._run_commands([command]) - - ok_(interface_1 in command.result) - ok_(interface_2 in command.result) - - def test_03_02_ifaces_to_br(self): - bridge = 's1' - interface_1 = 's1-eth1' - - command = vsctl.VSCtlCommand('iface-to-br', (interface_1,)) - self._run_commands([command]) - - eq_(bridge, command.result) - - # Clean up - self._docker_exec_mn('mn --clean') - - # 04: Controller commands - - def test_04_01_get_controller(self): - bridge = 's1' - controller = 'tcp:127.0.0.1:6653' - self._docker_exec_mn( - 'ovs-vsctl add-br %(bridge)s' - ' -- set-controller %(bridge)s %(controller)s' % locals()) - - command = vsctl.VSCtlCommand('get-controller', (bridge,)) - self._run_commands([command]) - - eq_(1, len(command.result)) - eq_(controller, command.result[0]) - - def test_04_02_del_controller(self): - bridge = 's1' - - command = vsctl.VSCtlCommand('del-controller', (bridge,)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get-controller %s' % bridge) - eq_([], result) - - def test_04_03_set_controller(self): - bridge = 's1' - controller = 'tcp:127.0.0.1:6653' - - command = vsctl.VSCtlCommand('set-controller', (bridge, controller)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get-controller %s' % bridge) - eq_(controller, result[0]) - - def test_04_04_get_fail_mode(self): - bridge = 's1' - fai_mode = 'secure' - self._docker_exec_mn( - 'ovs-vsctl set-fail-mode %s %s' % (bridge, fai_mode)) - - command = vsctl.VSCtlCommand('get-fail-mode', (bridge,)) - self._run_commands([command]) - - eq_(fai_mode, command.result) - - def test_04_05_del_fail_mode(self): - bridge = 's1' - - command = vsctl.VSCtlCommand('del-fail-mode', (bridge,)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get-fail-mode %s' % bridge) - eq_([], result) - - def test_04_06_set_fail_mode(self): - bridge = 's1' - fail_mode = 'secure' - - command = vsctl.VSCtlCommand('set-fail-mode', (bridge, fail_mode)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get-fail-mode %s' % bridge) - eq_(fail_mode, result[0]) - - # Clean up - self._docker_exec_mn('mn --clean') - - # 05: Manager commands (not implemented yet) - # 06: SSL commands (not implemented yet) - # 07: Switch commands (not implemented yet) - - # 08: Database commands - - def test_08_01_list(self): - table = 'Bridge' - bridge = 's1' - interface_1 = 's1-eth1' - interface_2 = 's1-eth2' - fail_mode = 'secure' - protocols = 'OpenFlow10,OpenFlow13' - datapath_id = '1111111111111111' - - self._docker_exec_mn( - 'ip link add %s type dummy' % interface_1) - self._docker_exec_mn( - 'ip link add %s type dummy' % interface_2) - self._docker_exec_mn( - 'ovs-vsctl add-br %(bridge)s' - ' -- add-port %(bridge)s %(interface_1)s' - ' -- add-port %(bridge)s %(interface_2)s' % locals()) - self._docker_exec_mn( - 'ovs-vsctl set %(table)s %(bridge)s ' - 'fail_mode=%(fail_mode)s ' - 'protocols=%(protocols)s ' - 'other_config:datapath-id=%(datapath_id)s' % locals()) - - command = vsctl.VSCtlCommand('list', (table,)) - self._run_commands([command]) - - eq_(1, len(command.result)) - # command.result[0] = - eq_(bridge, command.result[0].name) - - def test_08_02_find(self): - table = 'Bridge' - bridge = 's1' - - command = vsctl.VSCtlCommand('find', (table, 'name=%s' % bridge)) - self._run_commands([command]) - - eq_(1, len(command.result)) - # command.result[0] = for Bridge - eq_(bridge, command.result[0].name) - - def test_08_02_find_complex(self): - table = 'Bridge' - bridge = 's1' - fail_mode = 'secure' - protocols = 'OpenFlow10,OpenFlow13' - datapath_id = '1111111111111111' - - command = vsctl.VSCtlCommand( - 'find', (table, 'fail_mode=%s' % fail_mode, - 'protocols=%s' % protocols, - 'other_config:datapath-id=%s' % datapath_id)) - self._run_commands([command]) - - eq_(1, len(command.result)) - # command.result[0] = for Bridge - eq_(bridge, command.result[0].name) - - def test_08_03_get_01_value(self): - table = 'Bridge' - bridge = 's1' - column = 'fail_mode' - value = 'secure' - - command = vsctl.VSCtlCommand('get', (table, bridge, column)) - self._run_commands([command]) - - # command.result[0] is a list of return values - eq_(value, command.result[0][0]) - - def test_08_03_get_02_set(self): - table = 'Bridge' - bridge = 's1' - column = 'protocols' - value = 'OpenFlow10,OpenFlow13'.split(',') - - command = vsctl.VSCtlCommand('get', (table, bridge, column)) - self._run_commands([command]) - - # command.result[0] is a list - eq_(value, command.result[0]) - - def test_08_03_get_03_map(self): - table = 'Bridge' - bridge = 's1' - column = 'other_config' - key = 'datapath-id' - datapath_id = '1111111111111111' - value = {key: datapath_id} - - command = vsctl.VSCtlCommand('get', (table, bridge, column)) - self._run_commands([command]) - - # command.result[0] is a dict - eq_(value, command.result[0]) - - def test_08_03_get_04_map_value(self): - table = 'Bridge' - bridge = 's1' - column = 'other_config' - key = 'datapath-id' - datapath_id = '1111111111111111' - value = datapath_id - - command = vsctl.VSCtlCommand( - 'get', (table, bridge, '%s:%s' % (column, key))) - self._run_commands([command]) - - # command.result[0] is a dict - eq_(value, command.result[0]) - - def test_08_04_set_01_value(self): - table = 'Bridge' - bridge = 's1' - column = 'fail_mode' - value = 'standalone' - - command = vsctl.VSCtlCommand( - 'set', (table, bridge, '%s=%s' % (column, value))) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s' % (table, bridge, column)) - eq_(value, result[0]) - - def test_08_04_set_02_set(self): - table = 'Bridge' - bridge = 's1' - column = 'protocols' - value = 'OpenFlow10,OpenFlow12,OpenFlow13' - - command = vsctl.VSCtlCommand( - 'set', (table, bridge, '%s=%s' % (column, value))) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s' % (table, bridge, column)) - expected_value = '["OpenFlow10", "OpenFlow12", "OpenFlow13"]' - eq_(expected_value, result[0]) - - def test_08_04_set_03_map(self): - table = 'Bridge' - bridge = 's1' - column = 'other_config' - key = 'datapath-id' - value = '0000000000000001' - - command = vsctl.VSCtlCommand( - 'set', (table, bridge, '%s:%s=%s' % (column, key, value))) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s:%s' % (table, bridge, column, key)) - expected_value = '"0000000000000001"' - eq_(expected_value, result[0]) - - def test_08_05_add_01_value(self): - table = 'Port' - bridge = 's1' - column = 'tag' - value = '100' - - command = vsctl.VSCtlCommand( - 'add', (table, bridge, column, value)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s' % (table, bridge, column)) - eq_(value, result[0]) - - def test_08_05_add_02_set(self): - table = 'Port' - bridge = 's1' - column = 'trunks' - value = '100,200' - - command = vsctl.VSCtlCommand( - 'add', (table, bridge, column, value)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s' % (table, bridge, column)) - expected_value = '[100, 200]' - eq_(expected_value, result[0]) - - def test_08_05_add_03_map(self): - table = 'Bridge' - bridge = 's1' - column = 'other_config' - key = 'datapath-id' - value = '0000000000000011' - - command = vsctl.VSCtlCommand( - 'add', (table, bridge, column, '%s=%s' % (key, value))) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s:%s' % (table, bridge, column, key)) - expected_value = '"0000000000000011"' - eq_(expected_value, result[0]) - - def test_08_06_remove_01_value(self): - table = 'Port' - bridge = 's1' - column = 'tag' - value = '100' - self._docker_exec_mn( - 'ovs-vsctl set %s %s %s=%s' % (table, bridge, column, value)) - - command = vsctl.VSCtlCommand( - 'remove', (table, bridge, column, value)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s' % (table, bridge, column)) - expected_value = '[]' - eq_(expected_value, result[0]) - - def test_08_06_remove_02_set(self): - table = 'Port' - bridge = 's1' - column = 'trunks' - init_value = '100,200,300' - value = '100,200' - self._docker_exec_mn( - 'ovs-vsctl set %s %s %s=%s' % (table, bridge, column, init_value)) - - command = vsctl.VSCtlCommand( - 'remove', (table, bridge, column, value)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s' % (table, bridge, column)) - expected_value = '[300]' - eq_(expected_value, result[0]) - - def test_08_06_remove_03_map(self): - table = 'Port' - bridge = 's1' - column = 'other_config' - key = 'priority-tag' - value = 'true' - self._docker_exec_mn( - 'ovs-vsctl set %s %s %s:%s=%s' % - (table, bridge, column, key, value)) - - command = vsctl.VSCtlCommand( - 'remove', (table, bridge, column, '%s=%s' % (key, value))) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s' % (table, bridge, column)) - expected_value = '{}' - eq_(expected_value, result[0]) - - def test_08_07_clear_01_value(self): - table = 'Port' - bridge = 's1' - column = 'tag' - value = '100' - self._docker_exec_mn( - 'ovs-vsctl set %s %s %s=%s' % (table, bridge, column, value)) - - command = vsctl.VSCtlCommand( - 'clear', (table, bridge, column)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s' % (table, bridge, column)) - expected_value = '[]' - eq_(expected_value, result[0]) - - def test_08_07_clear_02_set(self): - table = 'Port' - bridge = 's1' - column = 'trunks' - value = '100,200' - self._docker_exec_mn( - 'ovs-vsctl set %s %s %s=%s' % (table, bridge, column, value)) - - command = vsctl.VSCtlCommand( - 'clear', (table, bridge, column)) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s' % (table, bridge, column)) - expected_value = '[]' - eq_(expected_value, result[0]) - - def test_08_07_clear_03_map(self): - table = 'Port' - bridge = 's1' - column = 'other_config' - key = 'priority-tag' - value = 'true' - self._docker_exec_mn( - 'ovs-vsctl set %s %s %s:%s=%s' % - (table, bridge, column, key, value)) - - command = vsctl.VSCtlCommand( - 'clear', (table, bridge, column, '%s=%s' % (key, value))) - self._run_commands([command]) - - result = self._docker_exec_mn( - 'ovs-vsctl get %s %s %s' % (table, bridge, column)) - expected_value = '{}' - eq_(expected_value, result[0]) - - # Clean up - self._docker_exec_mn('mn --clean') diff --git a/ryu/tests/unit/lib/test_addrconv.py b/ryu/tests/unit/lib/test_addrconv.py deleted file mode 100644 index 77877038..00000000 --- a/ryu/tests/unit/lib/test_addrconv.py +++ /dev/null @@ -1,56 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -from nose.tools import eq_ - -from ryu.lib import addrconv - - -class Test_addrconv(unittest.TestCase): - """ Test case for ryu.lib.addrconv - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - @staticmethod - def _test_conv(conv, text_value, bin_value): - eq_(conv.text_to_bin(text_value), bin_value) - eq_(conv.bin_to_text(bin_value), text_value) - - def test_ipv4(self): - self._test_conv(addrconv.ipv4, '0.0.0.0', b'\x00\x00\x00\x00') - self._test_conv(addrconv.ipv4, '127.0.0.1', b'\x7f\x00\x00\x01') - self._test_conv(addrconv.ipv4, '255.255.0.0', b'\xff\xff\x00\x00') - - def test_ipv6(self): - self._test_conv(addrconv.ipv6, 'ff02::1', - (b'\xff\x02\x00\x00\x00\x00\x00\x00' - b'\x00\x00\x00\x00\x00\x00\x00\x01')) - self._test_conv(addrconv.ipv6, 'fe80::f00b:a4ff:fe7d:f8ea', - (b'\xfe\x80\x00\x00\x00\x00\x00\x00' - b'\xf0\x0b\xa4\xff\xfe\x7d\xf8\xea')) - self._test_conv(addrconv.ipv6, '::', - (b'\x00\x00\x00\x00\x00\x00\x00\x00' - b'\x00\x00\x00\x00\x00\x00\x00\x00')) - - def test_mac(self): - self._test_conv(addrconv.mac, 'f2:0b:a4:01:0a:23', - b'\xf2\x0b\xa4\x01\x0a\x23') diff --git a/ryu/tests/unit/lib/test_hub.py b/ryu/tests/unit/lib/test_hub.py deleted file mode 100644 index d8b75996..00000000 --- a/ryu/tests/unit/lib/test_hub.py +++ /dev/null @@ -1,239 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import time -import unittest -from nose.tools import raises - -from ryu.lib import hub -hub.patch() - - -class MyException(BaseException): - pass - - -class Test_hub(unittest.TestCase): - """ Test case for ryu.lib.hub - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - # we want to test timeout first because the rest of tests rely on it. - # thus test_0_ prefix. - - @raises(hub.Timeout) - def test_0_timeout1(self): - with hub.Timeout(0.1): - hub.sleep(1) - - @raises(MyException) - def test_0_timeout2(self): - with hub.Timeout(0.1, MyException): - hub.sleep(1) - - def test_0_timeout3(self): - with hub.Timeout(1): - hub.sleep(0.1) - # sleep some more to ensure timer cancelation - hub.sleep(2) - - def test_spawn_event1(self): - def _child(ev, result): - hub.sleep(1) - result.append(1) - ev.set() - - ev = hub.Event() - result = [] - with hub.Timeout(2): - hub.spawn(_child, ev, result) - ev.wait() - assert len(result) == 1 - - def test_spawn_event2(self): - def _child(ev, result): - hub.sleep(1) - result.append(1) - ev.set() - - ev = hub.Event() - result = [] - with hub.Timeout(2): - t = hub.spawn(_child, ev, result) - ev.wait(timeout=0.5) - assert len(result) == 0 - ev.wait() - assert len(result) == 1 - - def test_spawn_event3(self): - def _child(ev, ev2, result): - ev2.wait() - hub.sleep(0.5) - result.append(1) - ev.set() - - ev = hub.Event() - ev2 = hub.Event() - result = [] - with hub.Timeout(2): - hub.spawn(_child, ev, ev2, result) - hub.spawn(_child, ev, ev2, result) - hub.sleep(0.5) - ev2.set() # this should wake up the above created two threads - ev.wait(timeout=1) - assert len(result) == 2 - - def test_spawn_select1(self): - import select - import socket - - def _child(s1): - hub.sleep(0.5) - s1.send(b"hoge") - - s1, s2 = socket.socketpair() - with hub.Timeout(1): - hub.spawn(_child, s1) - select.select([s2.fileno()], [], []) - select.select([s2.fileno()], [], []) # return immediately - - @raises(MyException) - def test_select1(self): - import select - import socket - - s1, s2 = socket.socketpair() - with hub.Timeout(1, MyException): - select.select([s2.fileno()], [], []) - - def test_select2(self): - import select - - with hub.Timeout(1, MyException): - select.select([], [], [], 0) # timeout immediately - - def test_select3(self): - import select - import socket - - s1, s2 = socket.socketpair() - with hub.Timeout(1, MyException): - list = [s1.fileno(), s2.fileno()] - rlist, wlist, xlist = select.select(list, list, list) - assert not s1.fileno() in rlist - assert not s2.fileno() in rlist - # the following two assertions are commented out because one of - # them fails with eventlet-patched select. - # assert s1.fileno() in wlist - # assert s2.fileno() in wlist - # note: eventlet-patched select returns at most one file. - assert (s1.fileno() in wlist) or (s2.fileno() in wlist) - assert not s1.fileno() in xlist - assert not s2.fileno() in xlist - - def test_spawn_joinall(self): - def _child(ev2, result): - ev2.wait() - hub.sleep(0.5) - result.append(1) - raise BaseException("this exception should not be propagated") - - ev2 = hub.Event() - threads = [] - result = [] - with hub.Timeout(2): - threads.append(hub.spawn(_child, ev2, result)) - threads.append(hub.spawn(_child, ev2, result)) - hub.sleep(0.5) - ev2.set() # this should wake up the above created two threads - hub.joinall(threads) - assert len(result) == 2 - - def test_spawn_kill_joinall(self): - def _child(ev2, result): - ev2.wait() - result.append(1) - - ev2 = hub.Event() - threads = [] - result = [] - with hub.Timeout(2): - threads.append(hub.spawn(_child, ev2, result)) - threads.append(hub.spawn(_child, ev2, result)) - hub.sleep(0.5) - for t in threads: - hub.kill(t) - hub.joinall(threads) - assert len(result) == 0 - - def test_spawn_kill_nowait_joinall(self): - # XXX this test relies on the scheduling behaviour. - # the intention here is, killing threads before they get active. - - def _child(result): - result.append(1) - - threads = [] - result = [] - with hub.Timeout(2): - threads.append(hub.spawn(_child, result)) - for t in threads: - hub.kill(t) - hub.joinall(threads) - assert len(result) == 0 - - def test_spawn_kill_die_joinall(self): - def _child(result): - result.append(1) - - threads = [] - result = [] - with hub.Timeout(2): - threads.append(hub.spawn(_child, result)) - threads.append(hub.spawn(_child, result)) - hub.sleep(0.5) - for t in threads: - hub.kill(t) - hub.joinall(threads) - assert len(result) == 2 - - def test_spawn_exception_joinall(self): - def _child(): - raise Exception("hoge") - - threads = [] - with hub.Timeout(2): - threads.append(hub.spawn(_child)) - threads.append(hub.spawn(_child)) - hub.sleep(0.5) - hub.joinall(threads) - - def test_event1(self): - ev = hub.Event() - ev.set() - with hub.Timeout(1): - ev.wait() # should return immediately - - def test_event2(self): - ev = hub.Event() - # allow multiple sets unlike eventlet Event - ev.set() - ev.set() diff --git a/ryu/tests/unit/lib/test_import_module.py b/ryu/tests/unit/lib/test_import_module.py deleted file mode 100644 index b8561d20..00000000 --- a/ryu/tests/unit/lib/test_import_module.py +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -from nose.tools import eq_ - -from ryu.utils import import_module - - -class Test_import_module(unittest.TestCase): - """ - Test case for ryu.utils.import_module - """ - - @staticmethod - def _my_import(name): - mod = __import__(name) - components = name.split('.') - for c in components[1:]: - mod = getattr(mod, c) - return mod - - def test_import_module_with_same_basename(self): - aaa = import_module('ryu.tests.unit.lib.test_mod.aaa.mod') - eq_("this is aaa", aaa.name) - bbb = import_module('ryu.tests.unit.lib.test_mod.bbb.mod') - eq_("this is bbb", bbb.name) - - def test_import_module_by_filename(self): - ccc = import_module('./lib/test_mod/ccc/mod.py') - eq_("this is ccc", ccc.name) - ddd = import_module('./lib/test_mod/ddd/mod.py') - # Note: When importing a module by filename, if module file name - # is duplicated, import_module reload (override) a module instance. - eq_("this is ddd", ddd.name) - - def test_import_same_module1(self): - from ryu.tests.unit.lib.test_mod import eee as eee1 - eq_("this is eee", eee1.name) - eee2 = import_module('./lib/test_mod/eee.py') - eq_("this is eee", eee2.name) - - def test_import_same_module2(self): - fff1 = import_module('./lib/test_mod/fff.py') - eq_("this is fff", fff1.name) - fff2 = import_module('ryu.tests.unit.lib.test_mod.fff') - eq_("this is fff", fff2.name) - - def test_import_same_module3(self): - ggg1 = import_module('./lib/test_mod/ggg.py') - eq_("this is ggg", ggg1.name) - ggg2 = self._my_import('ryu.tests.unit.lib.test_mod.ggg') - eq_("this is ggg", ggg2.name) diff --git a/ryu/tests/unit/lib/test_ip.py b/ryu/tests/unit/lib/test_ip.py deleted file mode 100644 index 66d8f0c2..00000000 --- a/ryu/tests/unit/lib/test_ip.py +++ /dev/null @@ -1,156 +0,0 @@ -# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import logging -import struct -import unittest - -from nose.tools import eq_ -from nose.tools import raises - -from ryu.lib import ip - -LOG = logging.getLogger('test_ip') - - -class Test_ip(unittest.TestCase): - """ - test case for ip address module - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_ipv4_to_bin(self): - ipv4_str = '10.28.197.1' - val = 0x0a1cc501 - - (res,) = struct.unpack('!I', ip.ipv4_to_bin(ipv4_str)) - eq_(val, res) - - def test_ipv4_to_int(self): - ipv4_str = '10.28.197.1' - val = 169657601 - - res = ip.ipv4_to_int(ipv4_str) - eq_(val, res) - - def test_ipv4_to_str_from_bin(self): - ipv4_bin = struct.pack('!I', 0x0a1cc501) - val = '10.28.197.1' - - res = ip.ipv4_to_str(ipv4_bin) - eq_(val, res) - - def test_ipv4_to_str_from_int(self): - ipv4_int = 169657601 - val = '10.28.197.1' - - res = ip.ipv4_to_str(ipv4_int) - eq_(val, res) - - def test_ipv6_to_bin(self): - ipv6_str = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' - val = struct.pack('!8H', 0x2013, 0xda8, 0x215, 0x8f2, 0xaa20, 0x66ff, - 0xfe4c, 0x9c3c) - res = ip.ipv6_to_bin(ipv6_str) - eq_(val, res) - - def test_ipv6_to_bin_with_shortcut(self): - ipv6_str = '3f:10::1:2' - val = struct.pack('!8H', 0x3f, 0x10, 0, 0, 0, 0, 0x1, 0x2) - - res = ip.ipv6_to_bin(ipv6_str) - eq_(val, res) - - def test_ipv6_to_int(self): - ipv6_str = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' - val = 0x20130da8021508f2aa2066fffe4c9c3c - - res = ip.ipv6_to_int(ipv6_str) - eq_(val, res) - - def test_ipv6_to_int_with_shortcut(self): - ipv6_str = '3f:10::1:2' - val = 0x003f0010000000000000000000010002 - - res = ip.ipv6_to_int(ipv6_str) - eq_(val, res) - - def test_ipv6_to_str_from_bin(self): - ipv6_bin = struct.pack('!8H', 0x2013, 0xda8, 0x215, 0x8f2, 0xaa20, - 0x66ff, 0xfe4c, 0x9c3c) - val = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' - - res = ip.ipv6_to_str(ipv6_bin) - eq_(val, res) - - def test_ipv6_to_str_from_int(self): - ipv6_int = 0x20130da8021508f2aa2066fffe4c9c3c - val = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' - - res = ip.ipv6_to_str(ipv6_int) - eq_(val, res) - - def test_text_to_bin_from_ipv4_text(self): - ipv4_str = '10.28.197.1' - val = struct.pack('!4B', 10, 28, 197, 1) - res = ip.text_to_bin(ipv4_str) - eq_(val, res) - - def test_text_to_bin_from_ipv6_text(self): - ipv6_str = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' - val = struct.pack('!8H', 0x2013, 0xda8, 0x215, 0x8f2, 0xaa20, - 0x66ff, 0xfe4c, 0x9c3c) - res = ip.text_to_bin(ipv6_str) - eq_(val, res) - - def test_text_to_int_from_ipv4_text(self): - ipv4_str = '10.28.197.1' # 0a.1c.c5.01 - val = 0x0a1cc501 - - res = ip.text_to_int(ipv4_str) - eq_(val, res) - - def test_text_to_int_from_ipv6_text(self): - ipv6_str = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' - val = 0x20130da8021508f2aa2066fffe4c9c3c - - res = ip.text_to_int(ipv6_str) - eq_(val, res) - - def test_bin_to_text_from_ipv4_bin(self): - ipv4_bin = struct.pack('!4B', 10, 28, 197, 1) - val = '10.28.197.1' - res = ip.bin_to_text(ipv4_bin) - eq_(val, res) - - def test_bin_to_text_from_ipv6_bin(self): - ipv6_bin = struct.pack('!8H', 0x2013, 0xda8, 0x215, 0x8f2, 0xaa20, - 0x66ff, 0xfe4c, 0x9c3c) - val = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' - res = ip.bin_to_text(ipv6_bin) - eq_(val, res) - - @raises(struct.error) - def test_bin_to_text_with_invalid_bin(self): - invalid_bin = b'invalid' - - ip.bin_to_text(invalid_bin) diff --git a/ryu/tests/unit/lib/test_mac.py b/ryu/tests/unit/lib/test_mac.py deleted file mode 100644 index 91839ead..00000000 --- a/ryu/tests/unit/lib/test_mac.py +++ /dev/null @@ -1,95 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import struct -import netaddr -from struct import * -from nose.tools import * - -from ryu.lib import mac - -LOG = logging.getLogger('test_mac') - - -class Test_mac(unittest.TestCase): - """ Test case for mac - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_mac_is_multicast(self): - addr = b'\x01\x23\x45\x67\x89\x0a' - val = True - - res = mac.is_multicast(addr) - - eq_(val, res) - - def test_mac_haddr_to_str(self): - addr = 'aa:aa:aa:aa:aa:aa' - val = b'\xaa\xaa\xaa\xaa\xaa\xaa' - - res = mac.haddr_to_str(val) - - eq_(addr, res) - - def test_mac_haddr_to_str_none(self): - """ addr is None - """ - addr = None - val = 'None' - res = mac.haddr_to_str(addr) - - eq_(val, res) - - @raises(AssertionError) - def test_mac_haddr_to_str_assert(self): - val = b'\xaa\xaa\xaa\xaa\xaa' - - res = mac.haddr_to_str(val) - - def test_mac_haddr_to_bin_false(self): - """ len(hexes) = 6 (False) - """ - addr = 'aa:aa:aa:aa:aa:aa' - val = b'\xaa\xaa\xaa\xaa\xaa\xaa' - - res = mac.haddr_to_bin(addr) - - eq_(val, res) - - @raises(ValueError) - def test_mac_haddr_to_bin_true(self): - """ len(hexes) != 6 (True) - """ - addr = 'aa:aa:aa:aa:aa' - res = mac.haddr_to_bin(addr) - - def test_mac_haddr_bitand(self): - addr = b'\xaa\xaa\xaa\xaa\xaa\xaa' - mask = b'\xff\xff\xff\x00\x00\x00' - val = b'\xaa\xaa\xaa\x00\x00\x00' - - res = mac.haddr_bitand(addr, mask) - - eq_(val, res) diff --git a/ryu/tests/unit/lib/test_mod/__init__.py b/ryu/tests/unit/lib/test_mod/__init__.py deleted file mode 100644 index ca8ef539..00000000 --- a/ryu/tests/unit/lib/test_mod/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. diff --git a/ryu/tests/unit/lib/test_mod/aaa/__init__.py b/ryu/tests/unit/lib/test_mod/aaa/__init__.py deleted file mode 100644 index ca8ef539..00000000 --- a/ryu/tests/unit/lib/test_mod/aaa/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. diff --git a/ryu/tests/unit/lib/test_mod/aaa/mod.py b/ryu/tests/unit/lib/test_mod/aaa/mod.py deleted file mode 100644 index a5eff136..00000000 --- a/ryu/tests/unit/lib/test_mod/aaa/mod.py +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name = "this is aaa" diff --git a/ryu/tests/unit/lib/test_mod/bbb/__init__.py b/ryu/tests/unit/lib/test_mod/bbb/__init__.py deleted file mode 100644 index ca8ef539..00000000 --- a/ryu/tests/unit/lib/test_mod/bbb/__init__.py +++ /dev/null @@ -1,15 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. diff --git a/ryu/tests/unit/lib/test_mod/bbb/mod.py b/ryu/tests/unit/lib/test_mod/bbb/mod.py deleted file mode 100644 index 397c8554..00000000 --- a/ryu/tests/unit/lib/test_mod/bbb/mod.py +++ /dev/null @@ -1,17 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name = "this is bbb" diff --git a/ryu/tests/unit/lib/test_mod/ccc/__init__.py b/ryu/tests/unit/lib/test_mod/ccc/__init__.py deleted file mode 100644 index ce07156d..00000000 --- a/ryu/tests/unit/lib/test_mod/ccc/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. diff --git a/ryu/tests/unit/lib/test_mod/ccc/mod.py b/ryu/tests/unit/lib/test_mod/ccc/mod.py deleted file mode 100644 index 5be826cf..00000000 --- a/ryu/tests/unit/lib/test_mod/ccc/mod.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name = "this is ccc" diff --git a/ryu/tests/unit/lib/test_mod/ddd/__init__.py b/ryu/tests/unit/lib/test_mod/ddd/__init__.py deleted file mode 100644 index ce07156d..00000000 --- a/ryu/tests/unit/lib/test_mod/ddd/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. diff --git a/ryu/tests/unit/lib/test_mod/ddd/mod.py b/ryu/tests/unit/lib/test_mod/ddd/mod.py deleted file mode 100644 index 31d31d53..00000000 --- a/ryu/tests/unit/lib/test_mod/ddd/mod.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name = "this is ddd" diff --git a/ryu/tests/unit/lib/test_mod/eee.py b/ryu/tests/unit/lib/test_mod/eee.py deleted file mode 100644 index ed21a8aa..00000000 --- a/ryu/tests/unit/lib/test_mod/eee.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name = "this is eee" diff --git a/ryu/tests/unit/lib/test_mod/fff.py b/ryu/tests/unit/lib/test_mod/fff.py deleted file mode 100644 index 5a565e38..00000000 --- a/ryu/tests/unit/lib/test_mod/fff.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name = "this is fff" diff --git a/ryu/tests/unit/lib/test_mod/ggg.py b/ryu/tests/unit/lib/test_mod/ggg.py deleted file mode 100644 index 29555e56..00000000 --- a/ryu/tests/unit/lib/test_mod/ggg.py +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -name = "this is ggg" diff --git a/ryu/tests/unit/lib/test_mrtlib.py b/ryu/tests/unit/lib/test_mrtlib.py deleted file mode 100644 index e870f401..00000000 --- a/ryu/tests/unit/lib/test_mrtlib.py +++ /dev/null @@ -1,765 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import bz2 -import io -import logging -import os -import sys -import unittest - -try: - import mock # Python 2 -except ImportError: - from unittest import mock # Python 3 - -from nose.tools import eq_ -from nose.tools import ok_ - -from ryu.lib import addrconv -from ryu.lib import mrtlib -from ryu.lib.packet import bgp -from ryu.lib.packet import ospf -from ryu.utils import binary_str - - -LOG = logging.getLogger(__name__) - -MRT_DATA_DIR = os.path.join( - os.path.dirname(sys.modules[__name__].__file__), '../../packet_data/mrt/') - - -class TestMrtlib(unittest.TestCase): - """ - Test case for ryu.lib.mrtlib. - """ - - def test_reader(self): - files = [ - 'rib.20161101.0000_pick.bz2', - 'updates.20161101.0000.bz2', - ] - - for f in files: - # print('\n*** testing mrtlib.Reader with %s ...' % f) - counter = 0 - input_file = os.path.join(MRT_DATA_DIR, f) - for record in mrtlib.Reader(bz2.BZ2File(input_file, 'rb')): - # print('* No.%d\n%s' % (counter, record)) - ok_(not isinstance(record, mrtlib.UnknownMrtRecord)) - counter += 1 - - def test_writer(self): - files = [ - 'rib.20161101.0000_pick.bz2', - 'updates.20161101.0000.bz2', - ] - - for f in files: - # print('\n*** testing mrtlib.Writer with %s ...' % f) - input_file = os.path.join(MRT_DATA_DIR, f) - input_buf = bz2.BZ2File(input_file, 'rb').read() - input_records = list(mrtlib.Reader(bz2.BZ2File(input_file, 'rb'))) - - counter = 0 - f = io.BytesIO() - mrt_writer = mrtlib.Writer(f) - for record in input_records: - # print('* No.%d\n%s' % (counter, record)) - mrt_writer.write(record) - counter += 1 - - output_buf = f.getvalue() - - eq_(binary_str(input_buf), binary_str(output_buf)) - - mrt_writer.close() - - eq_(True, mrt_writer._f.closed) - - -class TestMrtlibMrtRecord(unittest.TestCase): - """ - Test case for ryu.lib.mrtlib.MrtRecord. - """ - - def test_init_without_type_subtype(self): - type_ = mrtlib.MrtRecord.TYPE_TABLE_DUMP - subtype = mrtlib.TableDumpMrtRecord.SUBTYPE_AFI_IPv4 - - message = mrtlib.TableDumpAfiIPv4MrtMessage( - view_num=1, - seq_num=2, - prefix='192.168.1.0', - prefix_len=24, - status=1, - originated_time=0, - peer_ip='10.0.0.1', - peer_as=65000, - bgp_attributes=[], - ) - record = mrtlib.TableDumpMrtRecord(message) - - eq_(type_, record.type) - eq_(subtype, record.subtype) - - def test_parse_pre_with_type_et(self): - buf = ( - b'\x00\x00\x00\x00' # timestamp - b'\x00\x11\x00\x00' # type=TYPE_BGP4MP_ET(17), subtype - b'\x00\x00\x00\xaa' # length - ) - - required_len = mrtlib.MrtRecord.parse_pre(buf) - - eq_(0xaa + mrtlib.ExtendedTimestampMrtRecord.HEADER_SIZE, - required_len) - - -# Note: MrtCommonRecord is tested in TestMrtlibMrtRecord. -# class TestMrtlibMrtCommonRecord(unittest.TestCase): - - -class TestMrtlibExtendedTimestampMrtRecord(unittest.TestCase): - """ - Test case for ryu.lib.mrtlib.ExtendedTimestampMrtRecord. - """ - - def test_parse_extended_header(self): - body = b'test' - buf = ( - b'\x11\x11\x11\x11' # ms_timestamp - + body - ) - - (headers, - rest) = mrtlib.ExtendedTimestampMrtRecord.parse_extended_header(buf) - - ok_(isinstance(headers, list)) - eq_(1, len(headers)) - eq_(0x11111111, headers[0]) - eq_(body, rest) - - def test_serialize(self): - body = b'test' # 4 bytes - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x22\x22\x33\x33' # type, subtype - b'\x00\x00\x00\x04' # length=len(body) - b'\x44\x44\x44\x44' # ms_timestamp - + body - ) - - message_mock = mock.MagicMock(spec=mrtlib.MrtMessage) - message_mock.serialize.return_value = body - - record = mrtlib.ExtendedTimestampMrtRecord( - message=message_mock, - timestamp=0x11111111, - type_=0x2222, subtype=0x3333, - ms_timestamp=0x44444444, - length=0x00000004, - ) - - output = record.serialize() - - eq_(buf, output) - - -class TestMrtlibUnknownMrtRecord(unittest.TestCase): - """ - Test case for ryu.lib.mrtlib.UnknownMrtRecord. - """ - - def test_parse(self): - body = b'test' # 4 bytes - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x22\x22\x33\x33' # type, subtype - b'\x00\x00\x00\x04' # length=len(body) - + body - ) - - (record, rest) = mrtlib.MrtRecord.parse(buf) - - eq_(0x11111111, record.timestamp) - eq_(0x2222, record.type) - eq_(0x3333, record.subtype) - eq_(0x00000004, record.length) - eq_(body, record.message.buf) - eq_(b'', rest) - - def test_serialize(self): - body = b'test' # 4 bytes - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x22\x22\x33\x33' # type, subtype - b'\x00\x00\x00\x04' # length=len(body) - + body - ) - - message = mrtlib.UnknownMrtMessage(buf=body) - record = mrtlib.UnknownMrtRecord( - message=message, - timestamp=0x11111111, - type_=0x2222, subtype=0x3333, - length=0x00000004, - ) - - output = record.serialize() - - eq_(buf, output) - - -class TestMrtlibOspf2MrtRecord(unittest.TestCase): - """ - Test case for ryu.lib.mrtlib.Ospf2MrtRecord. - """ - - @mock.patch('ryu.lib.packet.ospf.ospf.parser') - def test_parse(self, mock_ospf_parser): - remote_ip = '10.0.0.1' - local_ip = '10.0.0.2' - body = b'test' # 4 bytes - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x0b\x00\x00' # type=TYPE_OSPFv2(11), subtype - b'\x00\x00\x00\x0c' # length=len(remote_ip + local_ip + body) - + addrconv.ipv4.text_to_bin(remote_ip) # remote_ip - + addrconv.ipv4.text_to_bin(local_ip) # local_ip - + body # ospf_message - ) - - mock_ospf_message = mock.MagicMock(spec=ospf.OSPFMessage) - mock_ospf_parser.return_value = (mock_ospf_message, None, '') - - (record, rest) = mrtlib.MrtRecord.parse(buf) - - eq_(0x11111111, record.timestamp) - eq_(mrtlib.MrtRecord.TYPE_OSPFv2, record.type) - eq_(0x0000, record.subtype) - eq_(0x0000000c, record.length) - eq_(remote_ip, record.message.remote_ip) - eq_(local_ip, record.message.local_ip) - eq_(mock_ospf_message, record.message.ospf_message) - eq_(b'', rest) - - def test_serialize(self): - remote_ip = '10.0.0.1' - local_ip = '10.0.0.2' - body = b'test' # 4 bytes - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x0b\x00\x00' # type=TYPE_OSPFv2(11), subtype - b'\x00\x00\x00\x0c' # length=len(remote_ip + local_ip + body) - + addrconv.ipv4.text_to_bin(remote_ip) # remote_ip - + addrconv.ipv4.text_to_bin(local_ip) # local_ip - + body # ospf_message - ) - - mock_ospf_message = mock.MagicMock(spec=ospf.OSPFMessage) - mock_ospf_message.serialize.return_value = body - - message = mrtlib.Ospf2MrtMessage( - remote_ip=remote_ip, - local_ip=local_ip, - ospf_message=mock_ospf_message, - ) - record = mrtlib.Ospf2MrtRecord( - message=message, - timestamp=0x11111111, - # type_=None, - # subtype=None, - # length=None, - ) - - output = record.serialize() - - eq_(buf, output) - - -class TestMrtlibTableDumpMrtRecord(unittest.TestCase): - """ - Test case for ryu.lib.mrtlib.TableDumpMrtRecord. - """ - - @mock.patch('ryu.lib.packet.bgp._PathAttribute.parser') - def test_parse_afi_ipv4(self, mock_bgp_attr_parser): - prefix = '10.0.0.0' - peer_ip = '172.16.0.1' - body = b'test' # 4 bytes - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x0c\x00\x01' # type=TYPE_TABLE_DUMP(12), - # subtype=SUBTYPE_AFI_IPv4(1) - b'\x00\x00\x00\x1a' # length=26 - b'\x22\x22\x33\x33' # view_num, seq_num - + addrconv.ipv4.text_to_bin(prefix) + # prefix - b'\x18\x01' # prefix_len=24, status=1 - b'\x44\x44\x44\x44' # originated_time - + addrconv.ipv4.text_to_bin(peer_ip) + # peer_ip - b'\xfd\xe8\x00\x04' # peer_as=65000, attr_len=len(body) - + body # bgp_attributes - ) - - mock_bgp_attr = mock.MagicMock(spec=bgp._PathAttribute) - mock_bgp_attr_parser.return_value = (mock_bgp_attr, b'') - - (record, rest) = mrtlib.MrtRecord.parse(buf) - - eq_(0x11111111, record.timestamp) - eq_(mrtlib.MrtRecord.TYPE_TABLE_DUMP, record.type) - eq_(mrtlib.TableDumpMrtRecord.SUBTYPE_AFI_IPv4, record.subtype) - eq_(0x0000001a, record.length) - eq_(0x2222, record.message.view_num) - eq_(0x3333, record.message.seq_num) - eq_(prefix, record.message.prefix) - eq_(24, record.message.prefix_len) - eq_(1, record.message.status) - eq_(0x44444444, record.message.originated_time) - eq_(peer_ip, record.message.peer_ip) - eq_(65000, record.message.peer_as) - eq_(0x0004, record.message.attr_len) - eq_([mock_bgp_attr], record.message.bgp_attributes) - eq_(b'', rest) - - def test_serialize_afi_ipv4(self): - prefix = '10.0.0.0' - peer_ip = '172.16.0.1' - body = b'test' # 4 bytes - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x0c\x00\x01' # type=TYPE_TABLE_DUMP(12), - # subtype=SUBTYPE_AFI_IPv4(1) - b'\x00\x00\x00\x1a' # length=26 - b'\x22\x22\x33\x33' # view_num, seq_num - + addrconv.ipv4.text_to_bin(prefix) + # prefix - b'\x18\x01' # prefix_len=24, status=1 - b'\x44\x44\x44\x44' # originated_time - + addrconv.ipv4.text_to_bin(peer_ip) + # peer_ip - b'\xfd\xe8\x00\x04' # peer_as=65000, attr_len=len(body) - + body # bgp_attributes - ) - - mock_bgp_attr = mock.MagicMock(spec=bgp._PathAttribute) - mock_bgp_attr.serialize.return_value = body - - message = mrtlib.TableDumpAfiIPv4MrtMessage( - view_num=0x2222, - seq_num=0x3333, - prefix=prefix, - prefix_len=24, - status=1, - originated_time=0x44444444, - peer_ip=peer_ip, - peer_as=65000, - bgp_attributes=[mock_bgp_attr], - # attr_len=4 - ) - record = mrtlib.TableDumpMrtRecord( - message=message, - timestamp=0x11111111, - # type_=None, - # subtype=None, - # length=None, - ) - - output = record.serialize() - - eq_(buf, output) - - @mock.patch('ryu.lib.packet.bgp._PathAttribute.parser') - def test_parse_afi_ipv6(self, mock_bgp_attr_parser): - prefix = '2001:db8::1' - peer_ip = 'fe80::1' - body = b'test' # 4 bytes - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x0c\x00\x02' # type=TYPE_TABLE_DUMP(12), - # subtype=SUBTYPE_AFI_IPv6(2) - b'\x00\x00\x00\x32' # length=50 - b'\x22\x22\x33\x33' # view_num, seq_num - + addrconv.ipv6.text_to_bin(prefix) + # prefix - b'\x40\x01' # prefix_len=64, status=1 - b'\x44\x44\x44\x44' # originated_time - + addrconv.ipv6.text_to_bin(peer_ip) + # peer_ip - b'\xfd\xe8\x00\x04' # peer_as=65000, attr_len=len(body) - + body # bgp_attributes - ) - - mock_bgp_attr = mock.MagicMock(spec=bgp._PathAttribute) - mock_bgp_attr_parser.return_value = (mock_bgp_attr, b'') - - (record, rest) = mrtlib.MrtRecord.parse(buf) - - eq_(0x11111111, record.timestamp) - eq_(mrtlib.MrtRecord.TYPE_TABLE_DUMP, record.type) - eq_(mrtlib.TableDumpMrtRecord.SUBTYPE_AFI_IPv6, record.subtype) - eq_(0x00000032, record.length) - eq_(0x2222, record.message.view_num) - eq_(0x3333, record.message.seq_num) - eq_(prefix, record.message.prefix) - eq_(64, record.message.prefix_len) - eq_(1, record.message.status) - eq_(0x44444444, record.message.originated_time) - eq_(peer_ip, record.message.peer_ip) - eq_(65000, record.message.peer_as) - eq_(0x0004, record.message.attr_len) - eq_([mock_bgp_attr], record.message.bgp_attributes) - eq_(b'', rest) - - def test_serialize_afi_ipv6(self): - prefix = '2001:db8::1' - peer_ip = 'fe80::1' - body = b'test' # 4 bytes - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x0c\x00\x02' # type=TYPE_TABLE_DUMP(12), - # subtype=SUBTYPE_AFI_IPv6(2) - b'\x00\x00\x00\x32' # length=50 - b'\x22\x22\x33\x33' # view_num, seq_num - + addrconv.ipv6.text_to_bin(prefix) + # prefix - b'\x40\x01' # prefix_len=64, status=1 - b'\x44\x44\x44\x44' # originated_time - + addrconv.ipv6.text_to_bin(peer_ip) + # peer_ip - b'\xfd\xe8\x00\x04' # peer_as=65000, attr_len=len(body) - + body # bgp_attributes - ) - - mock_bgp_attr = mock.MagicMock(spec=bgp._PathAttribute) - mock_bgp_attr.serialize.return_value = body - - message = mrtlib.TableDumpAfiIPv6MrtMessage( - view_num=0x2222, - seq_num=0x3333, - prefix=prefix, - prefix_len=64, - status=1, - originated_time=0x44444444, - peer_ip=peer_ip, - peer_as=65000, - bgp_attributes=[mock_bgp_attr], - # attr_len=4 - ) - record = mrtlib.TableDumpMrtRecord( - message=message, - timestamp=0x11111111, - # type_=None, - # subtype=None, - # length=None, - ) - - output = record.serialize() - - eq_(buf, output) - - -class TestMrtlibTableDump2MrtRecord(unittest.TestCase): - """ - Test case for ryu.lib.mrtlib.TableDump2MrtRecord. - """ - - # Note: The classes corresponding to the following subtypes are - # tested in TestMrtlibMrtRecord. - # - SUBTYPE_PEER_INDEX_TABLE = 1 - # - SUBTYPE_RIB_IPV4_UNICAST = 2 - # - SUBTYPE_RIB_IPV4_MULTICAST = 3 - # - SUBTYPE_RIB_IPV6_UNICAST = 4 - # - SUBTYPE_RIB_IPV6_MULTICAST = 5 - - @mock.patch('ryu.lib.mrtlib.MrtRibEntry.parse') - @mock.patch('ryu.lib.packet.bgp.BGPNLRI.parser') - def test_parse_rib_generic(self, mock_nlri_parser, mock_rib_entry_parser): - nlri_bin = b'nlri' # 4 bytes - rib_entries_bin = b'ribs' # 4 bytes - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x0d\x00\x06' # type=TYPE_TABLE_DUMP_V2(13), - # subtype=SUBTYPE_RIB_GENERIC(6) - b'\x00\x00\x00\x11' # length=17 - b'\x22\x22\x22\x22' # seq_num - b'\x33\x33\x44' # afi, safi - + nlri_bin + # nlri - b'\x00\x01' # entry_count - + rib_entries_bin # rib_entries - ) - buf_entries = ( - b'\x00\x01' # entry_count - + rib_entries_bin # rib_entries - ) - - mock_bgp_nlri = mock.MagicMock(spec=bgp._AddrPrefix) - mock_nlri_parser.return_value = (mock_bgp_nlri, buf_entries) - - mock_rib_entry = mock.MagicMock(spec=mrtlib.MrtRibEntry) - mock_rib_entry_parser.return_value = (mock_rib_entry, b'') - - (record, rest) = mrtlib.MrtRecord.parse(buf) - - eq_(0x11111111, record.timestamp) - eq_(mrtlib.MrtRecord.TYPE_TABLE_DUMP_V2, record.type) - eq_(mrtlib.TableDump2MrtRecord.SUBTYPE_RIB_GENERIC, record.subtype) - eq_(0x00000011, record.length) - eq_(0x22222222, record.message.seq_num) - eq_(0x3333, record.message.afi) - eq_(0x44, record.message.safi) - eq_(mock_bgp_nlri, record.message.nlri) - eq_(0x0001, record.message.entry_count) - eq_([mock_rib_entry], record.message.rib_entries) - eq_(b'', rest) - - def test_serialize_rib_generic(self): - nlri_bin = b'nlri' # 4 bytes - rib_entries_bin = b'ribs' # 4 bytes - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x0d\x00\x06' # type=TYPE_TABLE_DUMP_V2(13), - # subtype=SUBTYPE_RIB_GENERIC(6) - b'\x00\x00\x00\x11' # length=17 - b'\x22\x22\x22\x22' # seq_num - b'\x33\x33\x44' # afi, safi - + nlri_bin + # nlri - b'\x00\x01' # entry_count - + rib_entries_bin # rib_entries - ) - - mock_bgp_nlri = mock.MagicMock(spec=bgp._AddrPrefix) - mock_bgp_nlri.serialize.return_value = nlri_bin - - mock_rib_entry = mock.MagicMock(spec=mrtlib.MrtRibEntry) - mock_rib_entry.serialize.return_value = rib_entries_bin - - message = mrtlib.TableDump2RibGenericMrtMessage( - seq_num=0x22222222, - afi=0x3333, - safi=0x44, - nlri=mock_bgp_nlri, - rib_entries=[mock_rib_entry], - # entry_count=1, - ) - record = mrtlib.TableDump2MrtRecord( - message=message, - timestamp=0x11111111, - # type_=None, - # subtype=None, - # length=None, - ) - - output = record.serialize() - - eq_(buf, output) - - -class TestMrtlibMrtPeer(unittest.TestCase): - """ - Test case for ryu.lib.mrtlib.MrtPeer. - """ - - def test_parse_two_octet_as(self): - bgp_id = '1.1.1.1' - ip_addr = '10.0.0.1' - buf = ( - b'\x00' # type - + addrconv.ipv4.text_to_bin(bgp_id) # bgp_id - + addrconv.ipv4.text_to_bin(ip_addr) + # ip_addr - b'\xfd\xe8' # as_num - ) - - peer, rest = mrtlib.MrtPeer.parse(buf) - - eq_(0, peer.type) - eq_(bgp_id, peer.bgp_id) - eq_(ip_addr, peer.ip_addr) - eq_(65000, peer.as_num) - eq_(b'', rest) - - def test_serialize_two_octet_as(self): - bgp_id = '1.1.1.1' - ip_addr = '10.0.0.1' - buf = ( - b'\x00' # type - + addrconv.ipv4.text_to_bin(bgp_id) # bgp_id - + addrconv.ipv4.text_to_bin(ip_addr) + # ip_addr - b'\xfd\xe8' # as_num - ) - - peer = mrtlib.MrtPeer( - bgp_id=bgp_id, - ip_addr=ip_addr, - as_num=65000, - # type_=0, - ) - - output = peer.serialize() - - eq_(buf, output) - - -class TestMrtlibBgp4MpMrtRecord(unittest.TestCase): - """ - Test case for ryu.lib.mrtlib.Bgp4MpMrtRecord. - """ - - # Note: The classes corresponding to the following subtypes are - # tested in TestMrtlibMrtRecord. - # - SUBTYPE_BGP4MP_MESSAGE = 1 - # - SUBTYPE_BGP4MP_MESSAGE_AS4 = 4 - # - SUBTYPE_BGP4MP_STATE_CHANGE_AS4 = 5 - # - SUBTYPE_BGP4MP_MESSAGE_LOCAL = 6 - # - SUBTYPE_BGP4MP_MESSAGE_AS4_LOCAL = 7 - - def test_parse_state_change_afi_ipv4(self): - peer_ip = '10.0.0.1' - local_ip = '10.0.0.2' - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x10\x00\x00' # type=TYPE_BGP4MP(16), - # subtype=SUBTYPE_BGP4MP_STATE_CHANGE(0) - b'\x00\x00\x00\x14' # length=20 - b'\xfd\xe9\xfd\xea' # peer_as=65001, local_as=65002 - b'\x22\x22\x00\x01' # if_index, addr_family=AFI_IPv4(1) - + addrconv.ipv4.text_to_bin(peer_ip) # peer_ip - + addrconv.ipv4.text_to_bin(local_ip) + # local_ip - b'\x00\x01\x00\x02' # old_state=STATE_IDLE(1), - # new_state=STATE_CONNECT(2) - ) - - (record, rest) = mrtlib.MrtRecord.parse(buf) - - eq_(0x11111111, record.timestamp) - eq_(mrtlib.MrtRecord.TYPE_BGP4MP, record.type) - eq_(mrtlib.Bgp4MpMrtRecord.SUBTYPE_BGP4MP_STATE_CHANGE, record.subtype) - eq_(0x00000014, record.length) - eq_(65001, record.message.peer_as) - eq_(65002, record.message.local_as) - eq_(0x2222, record.message.if_index) - eq_(mrtlib.Bgp4MpStateChangeMrtMessage.AFI_IPv4, - record.message.afi) - eq_(mrtlib.Bgp4MpStateChangeMrtMessage.STATE_IDLE, - record.message.old_state) - eq_(mrtlib.Bgp4MpStateChangeMrtMessage.STATE_CONNECT, - record.message.new_state) - eq_(b'', rest) - - def test_serialize_state_change_afi_ipv4(self): - peer_ip = '10.0.0.1' - local_ip = '10.0.0.2' - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x10\x00\x00' # type=TYPE_BGP4MP(16), - # subtype=SUBTYPE_BGP4MP_STATE_CHANGE(0) - b'\x00\x00\x00\x14' # length=20 - b'\xfd\xe9\xfd\xea' # peer_as=65001, local_as=65002 - b'\x22\x22\x00\x01' # if_index, addr_family=AFI_IPv4(1) - + addrconv.ipv4.text_to_bin(peer_ip) # peer_ip - + addrconv.ipv4.text_to_bin(local_ip) + # local_ip - b'\x00\x01\x00\x02' # old_state=STATE_IDLE(1), - # new_state=STATE_CONNECT(2) - ) - - message = mrtlib.Bgp4MpStateChangeMrtMessage( - peer_as=65001, - local_as=65002, - if_index=0x2222, - peer_ip=peer_ip, - local_ip=local_ip, - old_state=mrtlib.Bgp4MpStateChangeMrtMessage.STATE_IDLE, - new_state=mrtlib.Bgp4MpStateChangeMrtMessage.STATE_CONNECT, - # afi=mrtlib.Bgp4MpStateChangeMrtMessage.AFI_IPv4, - ) - record = mrtlib.Bgp4MpMrtRecord( - message=message, - timestamp=0x11111111, - # type_=None, - # subtype=None, - # length=None, - ) - - output = record.serialize() - - eq_(buf, output) - - def test_parse_state_change_afi_ipv6(self): - peer_ip = 'fe80::1' - local_ip = 'fe80::2' - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x10\x00\x00' # type=TYPE_BGP4MP(16), - # subtype=SUBTYPE_BGP4MP_STATE_CHANGE(0) - b'\x00\x00\x00\x2c' # length=44 - b'\xfd\xe9\xfd\xea' # peer_as=65001, local_as=65002 - b'\x22\x22\x00\x02' # if_index, addr_family=AFI_IPv6(2) - + addrconv.ipv6.text_to_bin(peer_ip) # peer_ip - + addrconv.ipv6.text_to_bin(local_ip) + # local_ip - b'\x00\x01\x00\x02' # old_state=STATE_IDLE(1), - # new_state=STATE_CONNECT(2) - ) - - (record, rest) = mrtlib.MrtRecord.parse(buf) - - eq_(0x11111111, record.timestamp) - eq_(mrtlib.MrtRecord.TYPE_BGP4MP, record.type) - eq_(mrtlib.Bgp4MpMrtRecord.SUBTYPE_BGP4MP_STATE_CHANGE, record.subtype) - eq_(0x0000002c, record.length) - eq_(65001, record.message.peer_as) - eq_(65002, record.message.local_as) - eq_(0x2222, record.message.if_index) - eq_(mrtlib.Bgp4MpStateChangeMrtMessage.AFI_IPv6, - record.message.afi) - eq_(mrtlib.Bgp4MpStateChangeMrtMessage.STATE_IDLE, - record.message.old_state) - eq_(mrtlib.Bgp4MpStateChangeMrtMessage.STATE_CONNECT, - record.message.new_state) - eq_(b'', rest) - - def test_serialize_state_change_afi_ipv6(self): - peer_ip = 'fe80::1' - local_ip = 'fe80::2' - buf = ( - b'\x11\x11\x11\x11' # timestamp - b'\x00\x10\x00\x00' # type=TYPE_BGP4MP(16), - # subtype=SUBTYPE_BGP4MP_STATE_CHANGE(0) - b'\x00\x00\x00\x2c' # length=44 - b'\xfd\xe9\xfd\xea' # peer_as=65001, local_as=65002 - b'\x22\x22\x00\x02' # if_index, addr_family=AFI_IPv6(2) - + addrconv.ipv6.text_to_bin(peer_ip) # peer_ip - + addrconv.ipv6.text_to_bin(local_ip) + # local_ip - b'\x00\x01\x00\x02' # old_state=STATE_IDLE(1), - # new_state=STATE_CONNECT(2) - ) - - message = mrtlib.Bgp4MpStateChangeMrtMessage( - peer_as=65001, - local_as=65002, - if_index=0x2222, - peer_ip=peer_ip, - local_ip=local_ip, - old_state=mrtlib.Bgp4MpStateChangeMrtMessage.STATE_IDLE, - new_state=mrtlib.Bgp4MpStateChangeMrtMessage.STATE_CONNECT, - # afi=mrtlib.Bgp4MpStateChangeMrtMessage.AFI_IPv4, - ) - record = mrtlib.Bgp4MpMrtRecord( - message=message, - timestamp=0x11111111, - # type_=None, - # subtype=None, - # length=None, - ) - - output = record.serialize() - - eq_(buf, output) diff --git a/ryu/tests/unit/lib/test_of_config_classes.py b/ryu/tests/unit/lib/test_of_config_classes.py deleted file mode 100644 index 5b0dd6d3..00000000 --- a/ryu/tests/unit/lib/test_of_config_classes.py +++ /dev/null @@ -1,442 +0,0 @@ -# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2014 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -from nose.tools import eq_ -from nose.tools import ok_ - -import sys -import lxml.etree as ET -from formencode.doctest_xml_compare import xml_compare - -from ryu.lib.of_config import classes as ofc - - -GET = """ - CapableSwitch0 - - - LogicalSwitch9-Port4 - 4 - Port4 - 5000 - 5000 - - up - false - false - false - - - up - false - true - - - - 100Mb-FD - true - copper - unsupported - - - other - true - copper - unsupported - - - 100Mb-FD - true - copper - unsupported - - - 100Mb-FD - true - copper - unsupported - - - - - LogicalSwitch9-Port3 - 3 - Port3 - 5000 - 5000 - - up - false - false - false - - - up - false - true - - - - 100Mb-FD - true - copper - unsupported - - - other - true - copper - unsupported - - - 100Mb-FD - true - copper - unsupported - - - 100Mb-FD - true - copper - unsupported - - - - - LogicalSwitch7-Port2 - 2 - Port2 - 5000 - 5000 - - up - false - false - false - - - up - false - true - - - - 100Mb-FD - true - copper - unsupported - - - other - true - copper - unsupported - - - 100Mb-FD - true - copper - unsupported - - - 100Mb-FD - true - copper - unsupported - - - - - LogicalSwitch7-Port1 - 1 - Port1 - 5000 - 5000 - - up - false - false - false - - - up - false - true - - - - 100Mb-FD - true - copper - unsupported - - - other - true - copper - unsupported - - - 100Mb-FD - true - copper - unsupported - - - 100Mb-FD - true - copper - unsupported - - - - - LogicalSwitch9-Port4-Queue992 - 992 - 4 - - 10 - 130 - - - - LogicalSwitch9-Port4-Queue991 - 991 - 4 - - 10 - 120 - - - - LogicalSwitch7-Port2-Queue994 - 994 - 2 - - 400 - 900 - - - - LogicalSwitch7-Port2-Queue993 - 993 - 2 - - 200 - 300 - - - - - - LogicalSwitch9 - - 0 - 255 - 16777216 - true - true - true - true - true - false - false - - all - controller - table - inport - any - - - all - select - indirect - fast-failover - - - select-weight - select-liveness - chaining - - - output - group - set-queue - set-mpls-ttl - dec-mpls-ttl - set-nw-ttl - dec-nw-ttl - copy-ttl-out - copy-ttl-in - push-vlan - pop-vlan - push-mpls - pop-mpls - push-pbb - pop-pbb - set-field - - - goto-table - write-metadata - write-actions - apply-actions - clear-actions - meter - - - 08:60:6E:7F:74:E7:00:09 - true - false - - failSecureMode - - - - Switch9-Controller - equal - 127.0.0.1 - 6633 - tcp - - down - 1.3 - - - - - LogicalSwitch9-Port4 - LogicalSwitch9-Port3 - LogicalSwitch9-Port4-Queue992 - LogicalSwitch9-Port4-Queue991 - - - - LogicalSwitch7 - - 0 - 255 - 16777216 - true - true - true - true - true - false - false - - all - controller - table - inport - any - - - all - select - indirect - fast-failover - - - select-weight - select-liveness - chaining - - - output - group - set-queue - set-mpls-ttl - dec-mpls-ttl - set-nw-ttl - dec-nw-ttl - copy-ttl-out - copy-ttl-in - push-vlan - pop-vlan - push-mpls - pop-mpls - set-field - - - goto-table - write-metadata - write-actions - apply-actions - clear-actions - - - 08:60:6E:7F:74:E7:00:07 - true - false - - failSecureMode - - - - Switch7-Controller - equal - 127.0.0.1 - 6633 - tcp - - down - 1.2 - - - - - LogicalSwitch7-Port2 - LogicalSwitch7-Port1 - LogicalSwitch7-Port2-Queue994 - LogicalSwitch7-Port2-Queue993 - - - - -""" - - -class Test_of_config_classes(unittest.TestCase): - """ Test case for ryu.lib.of_config.classes - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_parse(self): - for xml0 in [GET]: - o = ofc.OFCapableSwitchType.from_xml(xml0) - xml1 = o.to_xml('capable-switch') - ok_(xml_compare(ET.fromstring(xml0), ET.fromstring(xml1), - reporter=sys.stderr.write)) - - def test_alt_names(self): - xml0 = GET - o = ofc.OFCapableSwitchType.from_xml(xml0) - eq_(o.logical_switches, getattr(o, 'logical_switches')) - eq_(o.logical_switches, getattr(o, 'logical-switches')) - - def test_iterate(self): - xml0 = GET - o = ofc.OFCapableSwitchType.from_xml(xml0) - for lsw in o.logical_switches.switch: - ok_(str(lsw.id).startswith('LogicalSwitch')) diff --git a/ryu/tests/unit/lib/test_ofctl.py b/ryu/tests/unit/lib/test_ofctl.py deleted file mode 100644 index 862ce1d3..00000000 --- a/ryu/tests/unit/lib/test_ofctl.py +++ /dev/null @@ -1,642 +0,0 @@ -# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import functools -import json -import logging -from nose.tools import eq_ -import os -import sys -import unittest - -from ryu.lib import ofctl_v1_0 -from ryu.lib import ofctl_v1_2 -from ryu.lib import ofctl_v1_3 -from ryu.lib import ofctl_v1_4 -from ryu.lib import ofctl_v1_5 -from ryu.ofproto import ofproto_parser -from ryu.ofproto.ofproto_protocol import ProtocolDesc -from ryu.tests import test_lib - -LOG = logging.getLogger(__name__) - - -class DummyDatapath(ProtocolDesc): - - def __init__(self, version): - super(DummyDatapath, self).__init__(version) - self.id = 1 # XXX - self.request_msg = None - self.reply_msg = None - self.waiters = None - - @staticmethod - def set_xid(msg): - msg.set_xid(0) - return 0 - - def send_msg(self, msg): - msg.serialize() - self.request_msg = msg - - if self.reply_msg: - lock, msgs = self.waiters[self.id][msg.xid] - msgs.append(self.reply_msg) - del self.waiters[self.id][msg.xid] - lock.set() - - def set_reply(self, msg, waiters): - self.reply_msg = msg - self.waiters = waiters - - -class Test_ofctl(unittest.TestCase): - - def _test(self, name, dp, method, args, request, reply, expected): - print('processing %s ...' % name) - waiters = {} - dp.set_reply(reply, waiters) - if reply: - output = method(dp=dp, waiters=waiters, **args) - else: - output = method(dp=dp, **args) - - # expected message <--> sent message - request.serialize() - try: - eq_(json.dumps(request.to_jsondict(), sort_keys=True), - json.dumps(dp.request_msg.to_jsondict(), sort_keys=True)) - except AssertionError as e: - # For debugging - json.dump(dp.request_msg.to_jsondict(), - open('/tmp/' + name + '_request.json', 'w'), - indent=3, sort_keys=True) - raise e - - # expected output <--> return of ofctl - def _remove(d, names): - def f(x): - return _remove(x, names) - - if isinstance(d, list): - return list(map(f, d)) - if isinstance(d, dict): - d2 = {} - for k, v in d.items(): - if k in names: - continue - d2[k] = f(v) - return d2 - return d - - expected = _remove(expected, ['len', 'length']) - output = _remove(output, ['len', 'length']) - try: - eq_(json.dumps(expected, sort_keys=True), - json.dumps(output, sort_keys=True)) - except AssertionError as e: - # For debugging - json.dump(output, open('/tmp/' + name + '_reply.json', 'w'), - indent=4) - raise e - - -def _add_tests(): - _ofp_vers = { - 'of10': 0x01, - 'of12': 0x03, - 'of13': 0x04, - 'of14': 0x05, - 'of15': 0x06, - } - - _test_cases = { - 'of10': [ - { - 'method': ofctl_v1_0.mod_flow_entry, - 'request': '1-2-ofp_flow_mod.packet.json', - 'reply': None - }, - ], - 'of12': [ - { - 'method': ofctl_v1_2.get_desc_stats, - 'request': '3-24-ofp_desc_stats_request.packet.json', - 'reply': '3-0-ofp_desc_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_queue_stats, - 'request': '3-37-ofp_queue_stats_request.packet.json', - 'reply': '3-38-ofp_queue_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_queue_stats, - 'request': 'lib-ofctl-ofp_queue_stats_request.packet1.json', - 'reply': '3-38-ofp_queue_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_queue_stats, - 'request': 'lib-ofctl-ofp_queue_stats_request.packet2.json', - 'reply': '3-38-ofp_queue_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_queue_stats, - 'request': 'lib-ofctl-ofp_queue_stats_request.packet3.json', - 'reply': '3-38-ofp_queue_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_queue_config, - 'request': '3-35-ofp_queue_get_config_request.packet.json', - 'reply': '3-36-ofp_queue_get_config_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_queue_config, - 'request': 'lib-ofctl-ofp_queue_get_config_request.packet.json', - 'reply': '3-36-ofp_queue_get_config_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_flow_stats, - 'request': '3-11-ofp_flow_stats_request.packet.json', - 'reply': '3-12-ofp_flow_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_aggregate_flow_stats, - 'request': '3-25-ofp_aggregate_stats_request.packet.json', - 'reply': '3-26-ofp_aggregate_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_table_stats, - 'request': '3-27-ofp_table_stats_request.packet.json', - 'reply': '3-28-ofp_table_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_port_stats, - 'request': '3-29-ofp_port_stats_request.packet.json', - 'reply': '3-30-ofp_port_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_port_stats, - 'request': 'lib-ofctl-ofp_port_stats_request.packet.json', - 'reply': '3-30-ofp_port_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_group_stats, - 'request': '3-61-ofp_group_stats_request.packet.json', - 'reply': '3-62-ofp_group_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_group_stats, - 'request': 'lib-ofctl-ofp_group_stats_request.packet.json', - 'reply': '3-62-ofp_group_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_group_features, - 'request': '3-31-ofp_group_features_stats_request.packet.json', - 'reply': '3-32-ofp_group_features_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_2.get_group_desc, - 'request': '3-33-ofp_group_desc_stats_request.packet.json', - 'reply': '3-34-ofp_group_desc_stats_reply.packet.json' - }, - # In OpenFlow 1.2, ofp_port_desc is not defined. - # We use ofp_features_request to get ports description instead. - { - 'method': ofctl_v1_2.get_port_desc, - 'request': '3-5-ofp_features_request.packet.json', - 'reply': '3-6-ofp_features_reply.packet.json' - }, - { - 'method': ofctl_v1_2.mod_flow_entry, - 'request': '3-2-ofp_flow_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_2.mod_group_entry, - 'request': '3-21-ofp_group_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_2.mod_port_behavior, - 'request': '3-22-ofp_port_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_2.send_experimenter, - 'request': '3-16-ofp_experimenter.packet.json', - 'reply': None - }, - ], - 'of13': [ - { - 'method': ofctl_v1_3.get_desc_stats, - 'request': '4-24-ofp_desc_request.packet.json', - 'reply': '4-0-ofp_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_queue_stats, - 'request': '4-37-ofp_queue_stats_request.packet.json', - 'reply': '4-38-ofp_queue_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_queue_stats, - 'request': 'lib-ofctl-ofp_queue_stats_request.packet1.json', - 'reply': '4-38-ofp_queue_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_queue_stats, - 'request': 'lib-ofctl-ofp_queue_stats_request.packet2.json', - 'reply': '4-38-ofp_queue_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_queue_stats, - 'request': 'lib-ofctl-ofp_queue_stats_request.packet3.json', - 'reply': '4-38-ofp_queue_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_queue_config, - 'request': '4-35-ofp_queue_get_config_request.packet.json', - 'reply': '4-36-ofp_queue_get_config_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_queue_config, - 'request': 'lib-ofctl-ofp_queue_get_config_request.packet.json', - 'reply': '4-36-ofp_queue_get_config_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_flow_stats, - 'request': '4-11-ofp_flow_stats_request.packet.json', - 'reply': '4-12-ofp_flow_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_aggregate_flow_stats, - 'request': '4-25-ofp_aggregate_stats_request.packet.json', - 'reply': '4-26-ofp_aggregate_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_table_stats, - 'request': '4-27-ofp_table_stats_request.packet.json', - 'reply': '4-28-ofp_table_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_table_features, - 'request': 'lib-ofctl-ofp_table_features_request.packet.json', - 'reply': '4-56-ofp_table_features_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_port_stats, - 'request': '4-29-ofp_port_stats_request.packet.json', - 'reply': '4-30-ofp_port_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_port_stats, - 'request': 'lib-ofctl-ofp_port_stats_request.packet.json', - 'reply': '4-30-ofp_port_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_meter_stats, - 'request': '4-49-ofp_meter_stats_request.packet.json', - 'reply': '4-50-ofp_meter_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_meter_stats, - 'request': 'lib-ofctl-ofp_meter_stats_request.packet.json', - 'reply': '4-50-ofp_meter_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_meter_features, - 'request': '4-51-ofp_meter_features_request.packet.json', - 'reply': '4-52-ofp_meter_features_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_meter_config, - 'request': '4-47-ofp_meter_config_request.packet.json', - 'reply': '4-48-ofp_meter_config_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_meter_config, - 'request': 'lib-ofctl-ofp_meter_config_request.packet.json', - 'reply': '4-48-ofp_meter_config_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_group_stats, - 'request': '4-57-ofp_group_stats_request.packet.json', - 'reply': '4-58-ofp_group_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_group_stats, - 'request': 'lib-ofctl-ofp_group_stats_request.packet.json', - 'reply': '4-58-ofp_group_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_group_features, - 'request': '4-31-ofp_group_features_request.packet.json', - 'reply': '4-32-ofp_group_features_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_group_desc, - 'request': '4-33-ofp_group_desc_request.packet.json', - 'reply': '4-34-ofp_group_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_3.get_port_desc, - 'request': '4-53-ofp_port_desc_request.packet.json', - 'reply': '4-54-ofp_port_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_3.mod_flow_entry, - 'request': '4-2-ofp_flow_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_3.mod_meter_entry, - 'request': '4-45-ofp_meter_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_3.mod_group_entry, - 'request': '4-21-ofp_group_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_3.mod_port_behavior, - 'request': '4-22-ofp_port_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_3.send_experimenter, - 'request': '4-16-ofp_experimenter.packet.json', - 'reply': None - }, - ], - 'of14': [ - { - 'method': ofctl_v1_4.get_desc_stats, - 'request': '5-24-ofp_desc_request.packet.json', - 'reply': '5-0-ofp_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_queue_stats, - 'request': '5-35-ofp_queue_stats_request.packet.json', - 'reply': '5-36-ofp_queue_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_queue_desc, - 'request': '5-63-ofp_queue_desc_request.packet.json', - 'reply': '5-64-ofp_queue_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_flow_stats, - 'request': '5-11-ofp_flow_stats_request.packet.json', - 'reply': '5-12-ofp_flow_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_aggregate_flow_stats, - 'request': '5-25-ofp_aggregate_stats_request.packet.json', - 'reply': '5-26-ofp_aggregate_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_table_stats, - 'request': '5-27-ofp_table_stats_request.packet.json', - 'reply': '5-28-ofp_table_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_table_features, - 'request': 'lib-ofctl-ofp_table_features_request.packet.json', - 'reply': '5-54-ofp_table_features_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_port_stats, - 'request': '5-29-ofp_port_stats_request.packet.json', - 'reply': '5-30-ofp_port_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_meter_stats, - 'request': '5-47-ofp_meter_stats_request.packet.json', - 'reply': '5-48-ofp_meter_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_meter_features, - 'request': '5-49-ofp_meter_features_request.packet.json', - 'reply': '5-50-ofp_meter_features_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_meter_config, - 'request': '5-45-ofp_meter_config_request.packet.json', - 'reply': '5-46-ofp_meter_config_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_group_stats, - 'request': '5-55-ofp_group_stats_request.packet.json', - 'reply': '5-56-ofp_group_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_group_features, - 'request': '5-31-ofp_group_features_request.packet.json', - 'reply': '5-32-ofp_group_features_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_group_desc, - 'request': '5-33-ofp_group_desc_request.packet.json', - 'reply': '5-34-ofp_group_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_4.get_port_desc, - 'request': '5-51-ofp_port_desc_request.packet.json', - 'reply': '5-52-ofp_port_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_4.mod_flow_entry, - 'request': '5-2-ofp_flow_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_4.mod_meter_entry, - 'request': '5-43-ofp_meter_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_4.mod_group_entry, - 'request': '5-21-ofp_group_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_4.mod_port_behavior, - 'request': '5-22-ofp_port_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_4.send_experimenter, - 'request': '5-16-ofp_experimenter.packet.json', - 'reply': None - }, - ], - 'of15': [ - { - 'method': ofctl_v1_5.get_desc_stats, - 'request': 'libofproto-OFP15-desc_request.packet.json', - 'reply': 'libofproto-OFP15-desc_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_queue_stats, - 'request': 'lib-ofctl-ofp_queue_stats_request.packet.json', - 'reply': 'libofproto-OFP15-queue_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_queue_desc, - 'request': 'libofproto-OFP15-queue_desc_request.packet.json', - 'reply': 'libofproto-OFP15-queue_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_flow_stats, - 'request': 'libofproto-OFP15-flow_stats_request.packet.json', - 'reply': 'libofproto-OFP15-flow_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_flow_desc_stats, - 'request': 'libofproto-OFP15-flow_desc_request.packet.json', - 'reply': 'libofproto-OFP15-flow_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_flow_desc_stats, - 'request': 'lib-ofctl-OFP15-flow_desc_request.packet.json', - 'reply': 'lib-ofctl-OFP15-flow_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_aggregate_flow_stats, - 'request': 'libofproto-OFP15-aggregate_stats_request.packet.json', - 'reply': 'libofproto-OFP15-aggregate_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_table_stats, - 'request': 'libofproto-OFP15-table_stats_request.packet.json', - 'reply': 'libofproto-OFP15-table_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_table_features, - 'request': 'lib-ofctl-ofp_table_features_request.packet.json', - 'reply': 'libofproto-OFP15-table_features_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_port_stats, - 'request': 'libofproto-OFP15-port_stats_request.packet.json', - 'reply': 'libofproto-OFP15-port_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_meter_stats, - 'request': 'libofproto-OFP15-meter_stats_request.packet.json', - 'reply': 'libofproto-OFP15-meter_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_meter_features, - 'request': 'libofproto-OFP15-meter_features_request.packet.json', - 'reply': 'libofproto-OFP15-meter_features_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_meter_desc, - 'request': 'libofproto-OFP15-meter_desc_request.packet.json', - 'reply': 'libofproto-OFP15-meter_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_group_stats, - 'request': 'libofproto-OFP15-group_stats_request.packet.json', - 'reply': 'libofproto-OFP15-group_stats_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_group_features, - 'request': 'libofproto-OFP15-group_features_request.packet.json', - 'reply': 'libofproto-OFP15-group_features_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_group_desc, - 'request': 'libofproto-OFP15-group_desc_request.packet.json', - 'reply': 'libofproto-OFP15-group_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_5.get_port_desc, - 'request': 'libofproto-OFP15-port_desc_request.packet.json', - 'reply': 'libofproto-OFP15-port_desc_reply.packet.json' - }, - { - 'method': ofctl_v1_5.mod_flow_entry, - 'request': 'libofproto-OFP15-flow_mod_no_nx.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_5.mod_flow_entry, - 'request': 'lib-ofctl-OFP15-flow_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_5.mod_meter_entry, - 'request': 'libofproto-OFP15-meter_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_5.mod_group_entry, - 'request': 'libofproto-OFP15-group_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_5.mod_port_behavior, - 'request': 'libofproto-OFP15-port_mod.packet.json', - 'reply': None - }, - { - 'method': ofctl_v1_5.send_experimenter, - 'request': 'libofproto-OFP15-experimenter.packet.json', - 'reply': None - } - ], - } - - def _jsonfile_to_msg(datapath, jsonfile): - return ofproto_parser.ofp_msg_from_jsondict( - datapath, json.load(open(jsonfile))) - - this_dir = os.path.dirname(sys.modules[__name__].__file__) - parser_json_root = os.path.join(this_dir, '../ofproto/json/') - ofctl_json_root = os.path.join(this_dir, 'ofctl_json/') - - for ofp_ver, tests in _test_cases.items(): - dp = DummyDatapath(_ofp_vers[ofp_ver]) - parser_json_dir = os.path.join(parser_json_root, ofp_ver) - ofctl_json_dir = os.path.join(ofctl_json_root, ofp_ver) - for test in tests: - name = 'test_ofctl_' + ofp_ver + '_' + test['request'] - print('adding %s ...' % name) - args = {} - args_json_path = os.path.join(ofctl_json_dir, test['request']) - if os.path.exists(args_json_path): - args = json.load(open(args_json_path)) - request = _jsonfile_to_msg( - dp, os.path.join(parser_json_dir, test['request'])) - reply = None - expected = None - if test['reply']: - reply = _jsonfile_to_msg( - dp, os.path.join(parser_json_dir, test['reply'])) - expected = json.load( - open(os.path.join(ofctl_json_dir, test['reply']))) - f = functools.partial( - Test_ofctl._test, name=name, dp=dp, method=test['method'], - args=args, request=request, reply=reply, expected=expected) - test_lib.add_method(Test_ofctl, name, f) - - -_add_tests() - -if __name__ == "__main__": - unittest.main() diff --git a/ryu/tests/unit/lib/test_ofctl_action_match.py b/ryu/tests/unit/lib/test_ofctl_action_match.py deleted file mode 100644 index 11e27f78..00000000 --- a/ryu/tests/unit/lib/test_ofctl_action_match.py +++ /dev/null @@ -1,868 +0,0 @@ -# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import unittest -import logging -import netaddr -import functools -import inspect - -from nose.tools import * - -from ryu.lib import addrconv -from ryu.lib import ofctl_v1_0 -from ryu.ofproto import ofproto_v1_0, ofproto_v1_0_parser -from ryu.lib import ofctl_v1_2 -from ryu.ofproto import ofproto_v1_2, ofproto_v1_2_parser -from ryu.lib import ofctl_v1_3 -from ryu.ofproto import ofproto_v1_3, ofproto_v1_3_parser -from ryu.ofproto import ofproto_protocol -from ryu.ofproto import inet -from ryu.tests import test_lib - -LOG = logging.getLogger('test_ofctl_v1_2, v1_3') - -""" Common Functions """ - - -def _str_to_int(v): - try: - return int(v, 0) - except (ValueError, TypeError): - return v - - -def _to_match_eth(value): - if '/' in value: - value = value.split('/') - return value[0], value[1] - else: - return value, None - - -def _to_match_ip(value): - if '/' in value: - ip = netaddr.ip.IPNetwork(value) - ip_addr = str(ip.network) - ip_mask = str(ip.netmask) - return ip_addr, ip_mask - else: - return value, None - - -def _to_match_masked_int(value): - if isinstance(value, str) and '/' in value: - value = value.split('/') - return _str_to_int(value[0]), _str_to_int(value[1]) - else: - return _str_to_int(value), None - - -def _to_masked_int_str(value): - v, m = _to_match_masked_int(value) - v &= m - return '%d/%d' % (v, m) - - -conv_of10_to_of12_dict = { - 'dl_dst': 'eth_dst', - 'dl_src': 'eth_src', - 'dl_type': 'eth_type', - 'dl_vlan': 'vlan_vid', - 'nw_src': 'ipv4_src', - 'nw_dst': 'ipv4_dst', - 'nw_proto': 'ip_proto' -} - - -conv_of12_to_of10_dict = { - 'eth_src': 'dl_src', - 'eth_dst': 'dl_dst', - 'eth_type': 'dl_type', - 'ipv4_dst': 'nw_dst', - 'ipv4_src': 'nw_src', - 'ip_proto': 'nw_proto', - 'vlan_vid': 'dl_vlan', - 'tcp_src': 'tp_src', - 'tcp_dst': 'tp_dst', - 'udp_src': 'tp_src', - 'udp_dst': 'tp_dst' -} - -""" Test_ofctl """ - - -class Test_ofctl(unittest.TestCase): - - def __init__(self, methodName): - super(Test_ofctl, self).__init__(methodName) - - def setUp(self): - pass - - def tearDown(self): - pass - - def _test_actions(self, act, test): - dp = ofproto_protocol.ProtocolDesc(version=test.ver) - act_type = act["type"] - - # str -> action - insts = test.to_actions(dp, [act]) - - if test.ver == ofproto_v1_0.OFP_VERSION: - action = insts[0] - self._equal_str_to_act(action, act, act_type, test) - else: - inst = insts[0] - self._equal_str_to_inst(inst, act, act_type, test) - - # action -> str - inst_str = test.actions_to_str(insts) - if test.ver == ofproto_v1_0.OFP_VERSION: - act_str = inst_str - self._equal_act_to_str(act_str, act, act_type, test) - else: - self._equal_inst_to_str(inst_str, act, act_type, test) - - def _test_match(self, attrs, test): - dp = ofproto_protocol.ProtocolDesc(version=test.ver) - - # str -> match - match = test.to_match(dp, attrs) - - for key, value in attrs.items(): - key = self._conv_key(test, key, attrs) - self._equal_str_to_match(key, value, match, test) - - # match -> str - match_str = test.match_to_str(match) - - for key, value in attrs.items(): - if key in conv_of12_to_of10_dict: - key_old = conv_of12_to_of10_dict[key] - else: - key_old = key - self._equal_match_to_str(key_old, value, match_str, test) - - def _equal_str_to_inst(self, inst, act, act_type, test): - if act_type in test.supported_action: - cls = test.supported_action[act_type] - else: - cls = None - if act_type == 'GOTO_TABLE': - ok_(isinstance(inst, cls)) - eq_(inst.table_id, act["table_id"]) - elif act_type == 'WRITE_METADATA': - ok_(isinstance(inst, cls)) - eq_(inst.metadata, act["metadata"]) - eq_(inst.metadata_mask, act["metadata_mask"]) - elif act_type == 'METER': - ok_(isinstance(inst, cls)) - eq_(inst.meter_id, act["meter_id"]) - elif act_type == 'WRITE_ACTIONS': - ok_(isinstance(inst, cls)) - eq_(inst.type, test._ofproto.OFPIT_WRITE_ACTIONS) - self._equal_str_to_act(inst.actions[0], - act["actions"][0], - act["actions"][0]["type"], - test) - elif act_type == 'CLEAR_ACTIONS': - ok_(isinstance(inst, cls)) - eq_(inst.type, test._ofproto.OFPIT_CLEAR_ACTIONS) - else: - # APPLY_ACTIONS or Uknown Action Type - ok_(isinstance(inst, test._parser.OFPInstructionActions)) - eq_(inst.type, test._ofproto.OFPIT_APPLY_ACTIONS) - self._equal_str_to_act(inst.actions[0], act, - act_type, test) - - def _equal_str_to_act(self, action, act, act_type, test): - if act_type in test.supported_action: - cls = test.supported_action[act_type] - else: - cls = None - ok_(isinstance(action, cls)) - if act_type == 'OUTPUT': - eq_(action.port, act["port"]) - elif act_type == 'SET_VLAN_VID': - eq_(action.vlan_vid, act["vlan_vid"]) - elif act_type == 'SET_VLAN_PCP': - eq_(action.vlan_pcp, act["vlan_pcp"]) - elif act_type == 'SET_DL_SRC': - eq_(addrconv.mac.bin_to_text(action.dl_addr), - act["dl_src"]) - elif act_type == 'SET_DL_DST': - eq_(addrconv.mac.bin_to_text(action.dl_addr), - act["dl_dst"]) - elif act_type == 'SET_NW_SRC': - ip = netaddr.ip.IPAddress(action.nw_addr) - eq_(str(ip), act["nw_src"]) - elif act_type == 'SET_NW_DST': - ip = netaddr.ip.IPAddress(action.nw_addr) - eq_(str(ip), act["nw_dst"]) - elif act_type == 'SET_NW_TOS': - eq_(action.tos, act["nw_tos"]) - elif act_type == 'SET_TP_SRC': - eq_(action.tp, act["tp_src"]) - elif act_type == 'SET_TP_DST': - eq_(action.tp, act["tp_dst"]) - elif act_type == 'ENQUEUE': - eq_(action.queue_id, act["queue_id"]) - eq_(action.port, act["port"]) - elif act_type == 'SET_MPLS_TTL': - eq_(action.mpls_ttl, act["mpls_ttl"]) - elif act_type in ['PUSH_VLAN', 'PUSH_MPLS', - 'POP_MPLS', 'PUSH_PBB']: - eq_(action.ethertype, act["ethertype"]) - elif act_type == 'SET_QUEUE': - eq_(action.queue_id, act["queue_id"]) - elif act_type == 'GROUP': - eq_(action.group_id, act["group_id"]) - elif act_type == 'SET_NW_TTL': - eq_(action.nw_ttl, act["nw_ttl"]) - elif act_type == 'SET_FIELD': - eq_(action.key, act['field']) - eq_(action.value, act['value']) - elif act_type in ['STRIP_VLAN', 'COPY_TTL_OUT', - 'COPY_TTL_IN', 'DEC_MPLS_TTL', - 'POP_VLAN', 'DEC_NW_TTL', 'POP_PBB']: - pass - else: # Uknown Action Type - assert False - - def _equal_inst_to_str(self, inst_str, act, act_type, test): - if act_type == 'WRITE_ACTIONS': - act_str = inst_str[0]["WRITE_ACTIONS"] - act = act["actions"][0] - act_type = act["type"] - self._equal_act_to_str(act_str, act, act_type, test) - else: - inst_str_list = inst_str[0].split(':', 1) - eq_(inst_str_list[0], act_type) - if act_type == 'GOTO_TABLE': - eq_(int(inst_str_list[1]), act["table_id"]) - elif act_type == 'WRITE_METADATA': - met = inst_str_list[1].split('/') - eq_(int(met[0], 16), act["metadata"]) - eq_(int(met[1], 16), act["metadata_mask"]) - elif act_type == 'METER': - eq_(int(inst_str_list[1]), act["meter_id"]) - elif act_type == 'CLEAR_ACTIONS': - pass - else: - # APPLY_ACTIONS - act_str = inst_str - self._equal_act_to_str(act_str, act, act_type, test) - - def _equal_act_to_str(self, act_str, act, act_type, test): - act_str_list = act_str[0].split(':', 1) - eq_(act_str_list[0], act_type) - if act_type == 'OUTPUT': - eq_(int(act_str_list[1]), act["port"]) - elif act_type == 'SET_VLAN_VID': - eq_(int(act_str_list[1]), act["vlan_vid"]) - elif act_type == 'SET_VLAN_PCP': - eq_(int(act_str_list[1]), act["vlan_pcp"]) - elif act_type == 'SET_DL_SRC': - eq_(act_str_list[1], act["dl_src"]) - elif act_type == 'SET_DL_DST': - eq_(act_str_list[1], act["dl_dst"]) - elif act_type == 'SET_NW_SRC': - eq_(act_str_list[1], act["nw_src"]) - elif act_type == 'SET_NW_DST': - eq_(act_str_list[1], act["nw_dst"]) - elif act_type == 'SET_NW_TOS': - eq_(int(act_str_list[1]), act["nw_tos"]) - elif act_type == 'SET_TP_SRC': - eq_(int(act_str_list[1]), act["tp_src"]) - elif act_type == 'SET_TP_DST': - eq_(int(act_str_list[1]), act["tp_dst"]) - elif act_type == 'ENQUEUE': - enq = act_str_list[1].split(':') - eq_(int(enq[0], 10), act["port"]) - eq_(int(enq[1], 10), act["queue_id"]) - elif act_type == 'SET_MPLS_TTL': - eq_(int(act_str_list[1]), act["mpls_ttl"]) - elif act_type == 'PUSH_VLAN': - eq_(int(act_str_list[1]), act["ethertype"]) - elif act_type == 'PUSH_MPLS': - eq_(int(act_str_list[1]), act["ethertype"]) - elif act_type == 'POP_MPLS': - eq_(int(act_str_list[1]), act["ethertype"]) - elif act_type == 'SET_QUEUE': - eq_(int(act_str_list[1]), act["queue_id"]) - elif act_type == 'GROUP': - eq_(int(act_str_list[1]), act["group_id"]) - elif act_type == 'SET_NW_TTL': - eq_(int(act_str_list[1]), act["nw_ttl"]) - elif act_type == 'SET_FIELD': - field, value = act_str_list[1].split(':') - eq_(field.strip(' {'), act["field"]) - eq_(int(value.strip('} ')), act["value"]) - elif act_type == 'PUSH_PBB': - eq_(int(act_str_list[1]), act["ethertype"]) - elif act_type in ['STRIP_VLAN', 'COPY_TTL_OUT', - 'COPY_TTL_IN', 'DEC_MPLS_TTL', - 'POP_VLAN', 'DEC_NW_TTL', 'POP_PBB']: - pass - else: - assert False - - def _equal_str_to_match(self, key, value, match, test): - field_value = self._get_field_value(test, key, match) - - if key in ['eth_src', 'eth_dst', 'arp_sha', 'arp_tha']: - # MAC address - eth, mask = _to_match_eth(value) - if mask is not None: - # with mask - for i in range(0, len(mask)): - if mask[i] == 'f': - eq_(eth[i], field_value[0][i]) - eq_(mask, field_value[1]) - else: - # without mask - eq_(eth, field_value) - return - elif key in ['dl_src', 'dl_dst']: - eth, mask = _to_match_eth(value) - field_value = addrconv.mac.bin_to_text(field_value) - eq_(eth, field_value) - return - elif key in ['ipv4_src', 'ipv4_dst', 'arp_spa', 'arp_tpa']: - # IPv4 address - ipv4, mask = _to_match_ip(value) - if mask is not None: - # with mask - eq_(ipv4, field_value[0]) - eq_(mask, field_value[1]) - else: - # without mask - eq_(ipv4, field_value) - return - elif key in ['nw_src', 'nw_dst']: - # IPv4 address - ipv4, mask = _to_match_ip(value) - field_value = _to_match_ip(field_value) - if mask is not None: - # with mask - eq_(ipv4, field_value[0]) - eq_(mask, field_value[1]) - else: - # without mask - eq_(ipv4, field_value[0]) - return - elif key in ['ipv6_src', 'ipv6_dst']: - # IPv6 address - ipv6, mask = _to_match_ip(value) - if mask is not None: - # with mask - eq_(ipv6, field_value[0]) - eq_(mask, field_value[1]) - else: - # without mask - eq_(ipv6, field_value) - return - elif key == 'vlan_vid': - if test.ver == ofproto_v1_0.OFP_VERSION: - eq_(value, field_value) - else: - eq_(test.expected_value['vlan_vid'][ - value]['to_match'], field_value) - return - else: - if isinstance(value, str) and '/' in value: - # with mask - value, mask = _to_match_masked_int(value) - value &= mask - eq_(value, field_value[0]) - eq_(mask, field_value[1]) - else: - # without mask - eq_(_str_to_int(value), field_value) - return - - def _equal_match_to_str(self, key, value, match_str, test): - field_value = match_str[key] - if key in ['dl_src', 'dl_dst', 'arp_sha', 'arp_tha']: - # MAC address - eth, mask = _to_match_eth(value) - if mask is not None: - # with mask - field_value = field_value.split('/') - for i in range(0, len(mask)): - if mask[i] == 'f': - eq_(eth[i], field_value[0][i]) - eq_(mask, field_value[1]) - else: - # without mask - eq_(eth, field_value) - return - elif key in['nw_src', 'nw_dst', 'arp_spa', 'arp_tpa']: - # IPv4 address - if test.ver == ofproto_v1_0.OFP_VERSION: - ipv4, mask = _to_match_ip(value) - field_value = _to_match_ip(field_value) - if mask is not None: - # with mask - eq_(ipv4, field_value[0]) - eq_(mask, field_value[1]) - else: - # without mask - eq_(ipv4, field_value[0]) - else: - ipv4, mask = _to_match_ip(value) - if mask is not None: - # with mask - field_value = field_value.split('/') - eq_(ipv4, field_value[0]) - eq_(mask, field_value[1]) - else: - # without mask - eq_(ipv4, field_value) - return - elif key in ['ipv6_src', 'ipv6_dst']: - # IPv6 address - ipv6, mask = _to_match_ip(value) - if mask is not None: - # with mask - field_value = field_value.split('/') - eq_(ipv6, field_value[0]) - eq_(mask, field_value[1]) - else: - # without mask - eq_(ipv6, field_value) - return - elif key == 'dl_vlan': - if test.ver == ofproto_v1_0.OFP_VERSION: - eq_(value, field_value) - else: - eq_(test.expected_value['vlan_vid'][ - value]['to_str'], field_value) - return - else: - if isinstance(value, str) and '/' in value: - # with mask - value = _to_masked_int_str(value) - eq_(value, field_value) - else: - # without mask - eq_(_str_to_int(value), field_value) - return - - def _conv_key(self, test, key, attrs): - if test.ver != ofproto_v1_0.OFP_VERSION: - if key in conv_of10_to_of12_dict: - # For old field name - key = conv_of10_to_of12_dict[key] - elif key == 'tp_src' or key == 'tp_dst': - # TCP/UDP port - conv = {inet.IPPROTO_TCP: {'tp_src': 'tcp_src', - 'tp_dst': 'tcp_dst'}, - inet.IPPROTO_UDP: {'tp_src': 'udp_src', - 'tp_dst': 'udp_dst'}} - ip_proto = attrs.get('nw_proto', attrs.get('ip_proto', 0)) - key = conv[ip_proto][key] - - return key - - def _get_field_value(self, test, key, match): - if test.ver == ofproto_v1_0.OFP_VERSION: - members = inspect.getmembers(match) - for member in members: - if member[0] == key: - field_value = member[1] - elif member[0] == 'wildcards': - wildcards = member[1] - if key == 'nw_src': - field_value = test.nw_src_to_str(wildcards, field_value) - elif key == 'nw_dst': - field_value = test.nw_dst_to_str(wildcards, field_value) - else: - field_value = match[key] - - return field_value - - -class test_data_base(object): - # followings must be an attribute of subclass. - # _ofctl - # _ofproto - - def __init__(self): - self.ver = self._ofproto.OFP_VERSION - self.to_match = self._ofctl.to_match - self.match_to_str = self._ofctl.match_to_str - self.to_actions = self._ofctl.to_actions - self.actions_to_str = self._ofctl.actions_to_str - - -class test_data_v1_0(test_data_base): - """ Test_data for of_v1_0 """ - _ofctl = ofctl_v1_0 - _ofproto = ofproto_v1_0 - _parser = ofproto_v1_0_parser - - def __init__(self): - super(test_data_v1_0, self).__init__() - self.nw_src_to_str = self._ofctl.nw_src_to_str - self.nw_dst_to_str = self._ofctl.nw_dst_to_str - self.supported_action = {} - self.act_list = [ - {'type': 'OUTPUT', 'port': 3}, - {'type': 'SET_VLAN_VID', 'vlan_vid': 5}, - {'type': 'SET_VLAN_PCP', 'vlan_pcp': 3}, - {'type': 'STRIP_VLAN'}, - {'type': 'SET_DL_SRC', 'dl_src': 'aa:bb:cc:11:22:33'}, - {'type': 'SET_DL_DST', 'dl_dst': 'aa:bb:cc:11:22:33'}, - {'type': 'SET_NW_SRC', 'nw_src': '10.0.0.1'}, - {'type': 'SET_NW_DST', 'nw_dst': '10.0.0.1'}, - {'type': 'SET_NW_TOS', 'nw_tos': 184}, - {'type': 'SET_TP_SRC', 'tp_src': 8080}, - {'type': 'SET_TP_DST', 'tp_dst': 8080}, - {'type': 'ENQUEUE', 'queue_id': 3, 'port': 1} - ] - self.attr_list = [ - {'in_port': 7}, - {'dl_src': 'aa:bb:cc:11:22:33'}, - {'dl_dst': 'aa:bb:cc:11:22:33'}, - {'dl_vlan': 5}, - {'dl_vlan_pcp': 3}, - {'dl_type': 123}, - {'nw_tos': 16}, - {'nw_proto': 5}, - {'nw_src': '192.168.0.1'}, - {'nw_src': '192.168.0.1/24'}, - {'nw_dst': '192.168.0.1'}, - {'nw_dst': '192.168.0.1/24'}, - {'tp_src': 1}, - {'tp_dst': 2} - ] - self.set_action() - - def set_action(self): - self.supported_action.update( - { - 'OUTPUT': self._parser.OFPActionOutput, - 'SET_VLAN_VID': self._parser.OFPActionVlanVid, - 'SET_VLAN_PCP': self._parser.OFPActionVlanPcp, - 'STRIP_VLAN': self._parser.OFPActionStripVlan, - 'SET_DL_SRC': self._parser.OFPActionSetDlSrc, - 'SET_DL_DST': self._parser.OFPActionSetDlDst, - 'SET_NW_SRC': self._parser.OFPActionSetNwSrc, - 'SET_NW_DST': self._parser.OFPActionSetNwDst, - 'SET_NW_TOS': self._parser.OFPActionSetNwTos, - 'SET_TP_SRC': self._parser.OFPActionSetTpSrc, - 'SET_TP_DST': self._parser.OFPActionSetTpDst, - 'ENQUEUE': self._parser.OFPActionEnqueue - }) - - -class test_data_v1_2(test_data_base): - """ Test_data for of_v1_2 """ - _ofctl = ofctl_v1_2 - _ofproto = ofproto_v1_2 - _parser = ofproto_v1_2_parser - - def __init__(self): - super(test_data_v1_2, self).__init__() - self.supported_action = {} - self.act_list = [ - {'type': 'OUTPUT', 'port': 3}, - {'type': 'COPY_TTL_OUT'}, - {'type': 'COPY_TTL_IN'}, - {'type': 'SET_MPLS_TTL', 'mpls_ttl': 64}, - {'type': 'DEC_MPLS_TTL'}, - {'type': 'PUSH_VLAN', 'ethertype': 0x0800}, - {'type': 'POP_VLAN'}, - {'type': 'PUSH_MPLS', 'ethertype': 0x0800}, - {'type': 'POP_MPLS', 'ethertype': 0x0800}, - {'type': 'SET_QUEUE', 'queue_id': 7}, - {'type': 'GROUP', 'group_id': 5}, - {'type': 'SET_NW_TTL', 'nw_ttl': 64}, - {'type': 'DEC_NW_TTL'}, - {"type": "CLEAR_ACTIONS"}, - {"type": "WRITE_ACTIONS", - "actions": [{"type": "OUTPUT", "port": 4}]}, - {'type': 'GOTO_TABLE', 'table_id': 8}, - {'type': 'WRITE_METADATA', 'metadata': 8, - 'metadata_mask': (1 << 64) - 1}, - ] - self.attr_list = [ - {'in_port': 7}, - {'in_phy_port': 5, 'in_port': 3}, - {'metadata': 12345}, - {'metadata': '0x1212121212121212'}, - {'metadata': '0x19af28be37fa91b/0x1010101010101010'}, - {'dl_src': "aa:bb:cc:11:22:33"}, - {'dl_src': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff"}, - {'dl_dst': "aa:bb:cc:11:22:33"}, - {'dl_dst': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff"}, - {'dl_type': 123}, - {'eth_src': "aa:bb:cc:11:22:33"}, - {'eth_src': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff"}, - {'eth_dst': "aa:bb:cc:11:22:33"}, - {'eth_dst': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff"}, - {'eth_type': 0x800}, - {'dl_vlan': 0}, - {'dl_vlan': 3}, - {'dl_vlan': 4095}, - {'dl_vlan': "0"}, - {'dl_vlan': "3"}, - {'dl_vlan': "4095"}, - {'dl_vlan': "0x0000"}, - {'dl_vlan': "0x0003"}, - {'dl_vlan': "0x0fff"}, - {'dl_vlan': "0x1000"}, - {'dl_vlan': "0x1003"}, - {'dl_vlan': "0x1fff"}, - {'dl_vlan': "4096/4096"}, - {'dl_vlan': "4096/4097"}, - {'dl_vlan': "2744/2748"}, - {'dl_vlan': "2748/2748"}, - {'dl_vlan': "2748/2749"}, - {'dl_vlan': "0x1000/0x1000"}, - {'dl_vlan': "0x1000/0x1001"}, - {'dl_vlan': "0x0ab8/0x0abc"}, - {'dl_vlan': "0x0abc/0x0abc"}, - {'dl_vlan': "0x0abc/0x0abd"}, - {'vlan_pcp': 3, 'vlan_vid': 3}, - {'ip_dscp': 3, 'eth_type': 0x0800}, - {'ip_ecn': 4, 'eth_type': 0x86dd}, - {'nw_src': "192.168.0.1", 'eth_type': 0x0800}, - {'nw_src': "192.168.0.1/24", 'eth_type': 0x0800}, - {'nw_src': "192.168.10.10/255.255.0.0", 'eth_type': 0x0800}, - {'nw_dst': "192.168.0.1", 'eth_type': 0x0800}, - {'nw_dst': "192.168.0.1/24", 'eth_type': 0x0800}, - {'nw_dst': "192.168.10.10/255.255.255.0"}, - {'nw_proto': 5, 'eth_type': 0x0800}, - {'ip_proto': 5, 'eth_type': 0x86dd}, - {'ipv4_src': "192.168.0.1", 'eth_type': 0x0800}, - {'ipv4_src': "192.168.0.1/24", 'eth_type': 0x0800}, - {'ipv4_src': "192.168.10.10/255.255.0.0", 'eth_type': 0x0800}, - {'ipv4_dst': "192.168.0.1", 'eth_type': 0x0800}, - {'ipv4_dst': "192.168.0.1/24", 'eth_type': 0x0800}, - {'ipv4_dst': "192.168.10.10/255.255.255.0", 'eth_type': 0x0800}, - {'tp_src': 1, 'ip_proto': 6}, - {'tp_dst': 2, 'ip_proto': 6}, - {'tp_src': 3, 'ip_proto': 17}, - {'tp_dst': 4, 'ip_proto': 17}, - {'vlan_vid': 0}, - {'vlan_vid': 3}, - {'vlan_vid': 4095}, - {'vlan_vid': "0"}, - {'vlan_vid': "3"}, - {'vlan_vid': "4095"}, - {'vlan_vid': "0x0000"}, - {'vlan_vid': "0x0003"}, - {'vlan_vid': "0x0fff"}, - {'vlan_vid': "0x1000"}, - {'vlan_vid': "0x1003"}, - {'vlan_vid': "0x1fff"}, - {'vlan_vid': "4096/4096"}, - {'vlan_vid': "4096/4097"}, - {'vlan_vid': "2744/2748"}, - {'vlan_vid': "2748/2748"}, - {'vlan_vid': "2748/2749"}, - {'vlan_vid': "0x1000/0x1000"}, - {'vlan_vid': "0x1000/0x1001"}, - {'vlan_vid': "0x0ab8/0x0abc"}, - {'vlan_vid': "0x0abc/0x0abc"}, - {'vlan_vid': "0x0abc/0x0abd"}, - {'tcp_src': 3, 'ip_proto': 6}, - {'tcp_dst': 5, 'ip_proto': 6}, - {'udp_src': 2, 'ip_proto': 17}, - {'udp_dst': 6, 'ip_proto': 17}, - {'sctp_src': 99, 'ip_proto': 132}, - {'sctp_dst': 99, 'ip_proto': 132}, - {'icmpv4_type': 5, 'ip_proto': 1}, - {'icmpv4_code': 6, 'ip_proto': 1}, - {'arp_op': 3, 'eth_type': 0x0806}, - {'arp_spa': "192.168.0.11", 'eth_type': 0x0806}, - {'arp_spa': "192.168.0.22/24", 'eth_type': 0x0806}, - {'arp_tpa': "192.168.0.33", 'eth_type': 0x0806}, - {'arp_tpa': "192.168.0.44/24", 'eth_type': 0x0806}, - {'arp_sha': "aa:bb:cc:11:22:33", 'eth_type': 0x0806}, - {'arp_sha': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff", - 'eth_type': 0x0806}, - {'arp_tha': "aa:bb:cc:11:22:33", 'eth_type': 0x0806}, - {'arp_tha': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff", - 'eth_type': 0x0806}, - {'ipv6_src': '2001::aaaa:bbbb:cccc:1111', 'eth_type': 0x86dd}, - {'ipv6_src': '2001::aaaa:bbbb:cccc:1111/64', 'eth_type': 0x86dd}, - {'ipv6_dst': '2001::ffff:cccc:bbbb:1111', 'eth_type': 0x86dd}, - {'ipv6_dst': '2001::ffff:cccc:bbbb:1111/64', 'eth_type': 0x86dd}, - {'ipv6_flabel': 2, 'eth_type': 0x86dd}, - {'icmpv6_type': 3, 'ip_proto': 58}, - {'icmpv6_code': 4, 'ip_proto': 58}, - {'ipv6_nd_target': '2001::ffff:cccc:bbbb:1111', - 'icmpv6_type': 135, 'ip_proto': 58}, - {'ipv6_nd_sll': "aa:bb:cc:11:22:33", - 'icmpv6_type': 135, 'ip_proto': 58}, - {'ipv6_nd_tll': "aa:bb:cc:11:22:33", - 'icmpv6_type': 136, 'ip_proto': 58}, - {'mpls_label': 3, 'eth_type': 0x8848}, - {'mpls_tc': 2, 'eth_type': 0x8848} - ] - self.supported_action.update( - { - 'OUTPUT': self._parser.OFPActionOutput, - 'COPY_TTL_OUT': self._parser.OFPActionCopyTtlOut, - 'COPY_TTL_IN': self._parser.OFPActionCopyTtlIn, - 'SET_MPLS_TTL': self._parser.OFPActionSetMplsTtl, - 'DEC_MPLS_TTL': self._parser.OFPActionDecMplsTtl, - 'PUSH_VLAN': self._parser.OFPActionPushVlan, - 'POP_VLAN': self._parser.OFPActionPopVlan, - 'PUSH_MPLS': self._parser.OFPActionPushMpls, - 'POP_MPLS': self._parser.OFPActionPopMpls, - 'SET_QUEUE': self._parser.OFPActionSetQueue, - 'GROUP': self._parser.OFPActionGroup, - 'SET_NW_TTL': self._parser.OFPActionSetNwTtl, - 'DEC_NW_TTL': self._parser.OFPActionDecNwTtl, - 'SET_FIELD': self._parser.OFPActionSetField, - 'GOTO_TABLE': self._parser.OFPInstructionGotoTable, - 'WRITE_METADATA': self._parser.OFPInstructionWriteMetadata, - 'WRITE_ACTIONS': self._parser.OFPInstructionActions, - 'CLEAR_ACTIONS': self._parser.OFPInstructionActions, - }) - self.set_expected_value() - - def set_expected_value(self): - vid_present = self._ofproto.OFPVID_PRESENT - self.expected_value = { - "vlan_vid": { - 0: {"to_match": 0 | vid_present, "to_str": "0"}, - 3: {"to_match": 3 | vid_present, "to_str": "3"}, - 4095: {"to_match": 4095 | vid_present, "to_str": "4095"}, - "0": {"to_match": 0 | vid_present, "to_str": "0"}, - "3": {"to_match": 3 | vid_present, "to_str": "3"}, - "4095": {"to_match": 4095 | vid_present, "to_str": "4095"}, - "0x0000": {"to_match": 0x0000, "to_str": "0x0000"}, - "0x0003": {"to_match": 0x0003, "to_str": "0x0003"}, - "0x0fff": {"to_match": 0x0fff, "to_str": "0x0fff"}, - "0x1000": {"to_match": 0x1000, "to_str": "0"}, - "0x1003": {"to_match": 0x1003, "to_str": "3"}, - "0x1fff": {"to_match": 0x1fff, "to_str": "4095"}, - "4096/4096": {"to_match": (4096, 4096), - "to_str": "0x1000/0x1000"}, - "4096/4097": {"to_match": (4096, 4097), - "to_str": "0x1000/0x1001"}, - "2744/2748": {"to_match": (2744, 2748), - "to_str": "0x0ab8/0x0abc"}, - "2748/2748": {"to_match": (2748, 2748), - "to_str": "0x0abc/0x0abc"}, - "2748/2749": {"to_match": (2748, 2749), - "to_str": "0x0abc/0x0abd"}, - "0x1000/0x1000": {"to_match": (0x1000, 0x1000), - "to_str": "0x1000/0x1000"}, - "0x1000/0x1001": {"to_match": (0x1000, 0x1001), - "to_str": "0x1000/0x1001"}, - "0x0ab8/0x0abc": {"to_match": (0x0ab8, 0x0abc), - "to_str": "0x0ab8/0x0abc"}, - "0x0abc/0x0abc": {"to_match": (0x0abc, 0x0abc), - "to_str": "0x0abc/0x0abc"}, - "0x0abc/0x0abd": {"to_match": (0x0abc, 0x0abd), - "to_str": "0x0abc/0x0abd"} - } - } - - -class test_data_v1_3(test_data_v1_2): - """ Test_data for of_v1_3 """ - _ofctl = ofctl_v1_3 - _ofproto = ofproto_v1_3 - _parser = ofproto_v1_3_parser - - def __init__(self): - super(test_data_v1_3, self).__init__() - self.act_list.extend( - [ - {'type': 'PUSH_PBB', 'ethertype': 0x0800}, - {'type': 'POP_PBB'}, - {'type': 'METER', 'meter_id': 3}, - ] - ) - self.attr_list.extend( - [ - {'mpls_bos': 3, 'eth_type': 0x8848}, - {'pbb_isid': 5, 'eth_type': 0x88E7}, - {'pbb_isid': "0x05", 'eth_type': 0x88E7}, - {'pbb_isid': "0x05/0xff", 'eth_type': 0x88E7}, - {'tunnel_id': 7}, - {'tunnel_id': "0x07"}, - {'tunnel_id': "0x07/0xff"}, - {'ipv6_exthdr': 3, 'eth_type': 0x86dd}, - {'ipv6_exthdr': "0x40", 'eth_type': 0x86dd}, - {'ipv6_exthdr': "0x40/0x1F0", 'eth_type': 0x86dd}, - ] - ) - self.supported_action.update( - { - 'PUSH_PBB': self._parser.OFPActionPushPbb, - 'POP_PBB': self._parser.OFPActionPopPbb, - 'METER': self._parser.OFPInstructionMeter, - }) - self.set_expected_value() - - -def _add_tests_actions(cls): - for act in cls.act_list: - method_name = 'test_' + str(cls.ver) + '_' + act["type"] + '_action' - - def _run(self, name, act, cls): - print('processing %s ...' % name) - cls_ = Test_ofctl(name) - cls_._test_actions(act, cls) - print('adding %s ...' % method_name) - func = functools.partial(_run, name=method_name, act=act, cls=cls) - test_lib.add_method(Test_ofctl, method_name, func) - - -def _add_tests_match(cls): - for attr in cls.attr_list: - for key, value in attr.items(): - method_name = 'test_' + \ - str(cls.ver) + '_' + key + '_' + str( - value) + str(type(value)) + '_match' - - def _run(self, name, attr, cls): - print('processing %s ...' % name) - cls_ = Test_ofctl(name) - cls_._test_match(attr, cls) - print('adding %s ...' % method_name) - func = functools.partial( - _run, name=method_name, attr=attr, cls=cls) - test_lib.add_method(Test_ofctl, method_name, func) - - -""" Test case """ - -# for of10 -cls = test_data_v1_0() -_add_tests_actions(cls) -_add_tests_match(cls) - -# for of12 -cls = test_data_v1_2() -_add_tests_actions(cls) -_add_tests_match(cls) - -# for of13 -cls = test_data_v1_3() -_add_tests_actions(cls) -_add_tests_match(cls) diff --git a/ryu/tests/unit/lib/test_ofctl_string.py b/ryu/tests/unit/lib/test_ofctl_string.py deleted file mode 100644 index fb491e39..00000000 --- a/ryu/tests/unit/lib/test_ofctl_string.py +++ /dev/null @@ -1,151 +0,0 @@ -# Copyright (C) 2017 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - -from ryu.lib import ofctl_string -from ryu.ofproto import ofproto_parser -from ryu.ofproto.ofproto_protocol import ProtocolDesc -from ryu.ofproto import ofproto_v1_5 - - -class Test_OfctlString(unittest.TestCase): - """Test cases for ryu.ofproto.ofp_instruction_from_str. - """ - - def __init__(self, methodName): - print('init %s' % methodName) - self.fake_dp_of15 = ProtocolDesc(ofproto_v1_5.OFP_VERSION) - self.maxDiff = None - super(Test_OfctlString, self).__init__(methodName) - - def _test_str(self, dp, ofctl_str, *jsondict): - json = ofctl_string.ofp_instruction_from_str( - ofproto_v1_5, ofctl_str) - inst = ofproto_parser.ofp_instruction_from_jsondict(dp, json) - self.assertEqual(len(inst), len(jsondict)) - for i in range(len(inst)): - self.assertEqual(jsondict[i], inst[i].to_jsondict()) - - def test_drop(self): - inst = ofctl_string.ofp_instruction_from_str( - ofproto_v1_5, 'drop') - self.assertEqual(inst, []) - - def test_conjunction(self): - self._test_str(self.fake_dp_of15, - 'conjunction(0x234, 1/3),conjunction(0xdea, 2/2)', - {'OFPInstructionActions': { - 'actions': [ - {'NXActionConjunction': {'clause': 0, - 'experimenter': 8992, - 'id': 0x234, - 'len': None, - 'n_clauses': 3, - 'subtype': 34, - 'type': 65535}}, - {'NXActionConjunction': {'clause': 1, - 'experimenter': 8992, - 'id': 0xdea, - 'len': None, - 'n_clauses': 2, - 'subtype': 34, - 'type': 65535}}], - 'type': 4}}) - - def test_ct(self): - self._test_str(self.fake_dp_of15, - 'ct(commit)', - {'OFPInstructionActions': { - 'actions': [{'NXActionCT': {'actions': [], - 'alg': 0, - 'experimenter': 8992, - 'flags': 1, - 'len': None, - 'recirc_table': 255, - 'subtype': 35, - 'type': 65535, - 'zone_ofs_nbits': 0, - 'zone_src': u''}}], - 'type': 4}}) - - def test_ct_2(self): - self._test_str(self.fake_dp_of15, - 'ct(commit,zone=NXM_NX_REG8[0..15],' - 'exec(set_field:1->ct_mark))', - {'OFPInstructionActions': { - 'actions': [{'NXActionCT': { - 'actions': [ - {'OFPActionSetField': { - 'field': {'OXMTlv': {'field': 'ct_mark', - 'mask': None, - 'value': 1}}, - 'len': 8, - 'type': 25}}], - 'alg': 0, - 'experimenter': 8992, - 'flags': 1, - 'len': None, - 'recirc_table': 255, - 'subtype': 35, - 'type': 65535, - 'zone_ofs_nbits': 15, - 'zone_src': u'reg8'}}], - 'type': 4}}) - - def test_resubmit(self): - self._test_str(self.fake_dp_of15, - 'resubmit(,10)', - {'OFPInstructionActions': - {'actions': [{'NXActionResubmitTable': { - 'experimenter': 8992, - 'in_port': 65528, - 'len': None, - 'subtype': 14, - 'table_id': 10, - 'type': 65535}}], - 'type': 4}}) - - def test_set_field(self): - self._test_str(self.fake_dp_of15, - 'set_field:10/0xff->tun_id', - {'OFPInstructionActions': - {'actions': [{'OFPActionSetField': { - 'field': {'OXMTlv': {'field': 'tunnel_id', - 'mask': 255, - 'value': 10}}, - 'len': 8, - 'type': 25}}], - 'type': 4}}) - - def test_pop_vlan(self): - self._test_str(self.fake_dp_of15, - 'pop_vlan', - {'OFPInstructionActions': - {'actions': [{'OFPActionPopVlan': {'len': 8, - 'type': 18}}], - 'type': 4}}) - - def test_multi(self): - self._test_str(self.fake_dp_of15, - 'pop_vlan,goto_table:33', - {'OFPInstructionActions': - {'actions': [{'OFPActionPopVlan': {'len': 8, - 'type': 18}}], - 'type': 4}}, - {'OFPInstructionGotoTable': - {'len': 8, - 'table_id': 33, - 'type': 1}}) diff --git a/ryu/tests/unit/lib/test_ofctl_utils.py b/ryu/tests/unit/lib/test_ofctl_utils.py deleted file mode 100644 index 2f02f43b..00000000 --- a/ryu/tests/unit/lib/test_ofctl_utils.py +++ /dev/null @@ -1,142 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import unittest - -from ryu.lib import ofctl_utils -from ryu.ofproto import ofproto_v1_3 - - -LOG = logging.getLogger(__name__) - - -class Test_ofctl_utils(unittest.TestCase): - # prepare test target - util = ofctl_utils.OFCtlUtil(ofproto_v1_3) - - def _test_str_to_int(self, input_value, expected_value): - output_value = ofctl_utils.str_to_int(input_value) - self.assertEqual(expected_value, output_value) - - def test_str_to_int(self): - self._test_str_to_int(1, 1) # int - self._test_str_to_int('0b10', 2) # binary digit - self._test_str_to_int('0o10', 8) # octal digit - self._test_str_to_int('0x10', 16) # hexadecimal digit - - def test_ofp_port_from_user(self): - self.assertEqual( - ofproto_v1_3.OFPP_CONTROLLER, - self.util.ofp_port_from_user(ofproto_v1_3.OFPP_CONTROLLER) # int - ) - self.assertEqual( - ofproto_v1_3.OFPP_CONTROLLER, - self.util.ofp_port_from_user('CONTROLLER') # str without prefix - ) - self.assertEqual( - ofproto_v1_3.OFPP_CONTROLLER, - self.util.ofp_port_from_user('OFPP_CONTROLLER') # str with prefix - ) - - def test_ofp_port_to_user(self): - self.assertEqual( - 'CONTROLLER', - self.util.ofp_port_to_user(ofproto_v1_3.OFPP_CONTROLLER) - ) - self.assertEqual( - 1, - self.util.ofp_port_to_user(1) # not matched - ) - - def test_ofp_table_from_user(self): - self.assertEqual( - ofproto_v1_3.OFPTT_ALL, - self.util.ofp_table_from_user('ALL') - ) - - def test_ofp_table_to_user(self): - self.assertEqual( - 'ALL', - self.util.ofp_table_to_user(ofproto_v1_3.OFPTT_ALL) - ) - - def test_ofp_cml_from_user(self): - self.assertEqual( - ofproto_v1_3.OFPCML_NO_BUFFER, - self.util.ofp_cml_from_user('NO_BUFFER') - ) - - def test_ofp_cml_to_user(self): - self.assertEqual( - 'NO_BUFFER', - self.util.ofp_cml_to_user(ofproto_v1_3.OFPCML_NO_BUFFER) - ) - - def test_ofp_group_from_user(self): - self.assertEqual( - ofproto_v1_3.OFPG_ANY, - self.util.ofp_group_from_user('ANY') - ) - - def test_ofp_group_to_user(self): - self.assertEqual( - 'ANY', - self.util.ofp_group_to_user(ofproto_v1_3.OFPG_ANY) - ) - - def test_ofp_buffer_from_user(self): - self.assertEqual( - ofproto_v1_3.OFP_NO_BUFFER, - self.util.ofp_buffer_from_user('NO_BUFFER') - ) - self.assertEqual( - 1, - self.util.ofp_buffer_from_user(1) # not matched - ) - - def test_ofp_buffer_to_user(self): - self.assertEqual( - 'NO_BUFFER', - self.util.ofp_buffer_to_user(ofproto_v1_3.OFP_NO_BUFFER) - ) - self.assertEqual( - 1, - self.util.ofp_buffer_to_user(1) # not matched - ) - - def test_ofp_meter_from_user(self): - self.assertEqual( - ofproto_v1_3.OFPM_ALL, - self.util.ofp_meter_from_user('ALL') - ) - - def test_ofp_meter_to_user(self): - self.assertEqual( - 'ALL', - self.util.ofp_meter_to_user(ofproto_v1_3.OFPM_ALL) - ) - - def test_ofp_queue_from_user(self): - self.assertEqual( - ofproto_v1_3.OFPQ_ALL, - self.util.ofp_queue_from_user('ALL') - ) - - def test_ofp_queue_to_user(self): - self.assertEqual( - 'ALL', - self.util.ofp_queue_to_user(ofproto_v1_3.OFPQ_ALL) - ) diff --git a/ryu/tests/unit/lib/test_ofctl_v1_3.py b/ryu/tests/unit/lib/test_ofctl_v1_3.py deleted file mode 100644 index 81cfacbf..00000000 --- a/ryu/tests/unit/lib/test_ofctl_v1_3.py +++ /dev/null @@ -1,54 +0,0 @@ -# Copyright (C) 2013 Stratosphere Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -from nose.tools import * - -from ryu.lib import ofctl_v1_3 -from ryu.ofproto import ofproto_v1_3, ofproto_v1_3_parser -from ryu.ofproto import ofproto_protocol -from ryu.ofproto.ofproto_v1_3_parser import OFPActionPopMpls - -LOG = logging.getLogger('test_ofctl_v1_3') - - -class Test_ofctl_v1_3(unittest.TestCase): - - """ Test case for ofctl_v1_3 - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_to_actions_pop_mpls(self): - dp = ofproto_protocol.ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) - - acts = [ - { - 'type': 'POP_MPLS', - 'ethertype': 0x0800 - } - ] - result = ofctl_v1_3.to_actions(dp, acts) - insts = result[0] - act = insts.actions[0] - ok_(isinstance(act, OFPActionPopMpls)) - eq_(act.ethertype, 0x0800) diff --git a/ryu/tests/unit/lib/test_ofp_pktinfilter.py b/ryu/tests/unit/lib/test_ofp_pktinfilter.py deleted file mode 100644 index 2c037737..00000000 --- a/ryu/tests/unit/lib/test_ofp_pktinfilter.py +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright (C) 2013 Stratosphere Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import six - -from nose.tools import * - -from ryu.controller import ofp_event -from ryu.controller.handler import ( - set_ev_cls, - MAIN_DISPATCHER, -) -from ryu.lib.packet import vlan, ethernet, ipv4 -from ryu.lib.ofp_pktinfilter import packet_in_filter, RequiredTypeFilter -from ryu.lib import mac -from ryu.ofproto import ether, ofproto_v1_3, ofproto_v1_3_parser -from ryu.ofproto.ofproto_protocol import ProtocolDesc - - -LOG = logging.getLogger('test_pktinfilter') - - -class _PacketInFilterApp(object): - @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) - @packet_in_filter(RequiredTypeFilter, {'types': [ - vlan.vlan, - ]}) - def packet_in_handler(self, ev): - return True - - -class Test_packet_in_filter(unittest.TestCase): - - """ Test case for pktinfilter - """ - - def setUp(self): - self.app = _PacketInFilterApp() - - def tearDown(self): - pass - - def test_pkt_in_filter_pass(self): - datapath = ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) - e = ethernet.ethernet(mac.BROADCAST_STR, - mac.BROADCAST_STR, - ether.ETH_TYPE_8021Q) - v = vlan.vlan() - i = ipv4.ipv4() - pkt = (e / v / i) - pkt.serialize() - pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, - data=six.binary_type(pkt.data)) - ev = ofp_event.EventOFPPacketIn(pkt_in) - ok_(self.app.packet_in_handler(ev)) - - def test_pkt_in_filter_discard(self): - datapath = ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) - e = ethernet.ethernet(mac.BROADCAST_STR, - mac.BROADCAST_STR, - ether.ETH_TYPE_IP) - i = ipv4.ipv4() - pkt = (e / i) - pkt.serialize() - pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, - data=six.binary_type(pkt.data)) - ev = ofp_event.EventOFPPacketIn(pkt_in) - ok_(not self.app.packet_in_handler(ev)) - - def test_pkt_in_filter_truncated(self): - datapath = ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) - truncated_data = '' - pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, - data=truncated_data) - ev = ofp_event.EventOFPPacketIn(pkt_in) - ok_(not self.app.packet_in_handler(ev)) diff --git a/ryu/tests/unit/lib/test_pack_utils.py b/ryu/tests/unit/lib/test_pack_utils.py deleted file mode 100644 index 5bc99513..00000000 --- a/ryu/tests/unit/lib/test_pack_utils.py +++ /dev/null @@ -1,59 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -import six -import struct - -from nose.tools import ok_, eq_ - -from ryu.lib import pack_utils - - -class TestMsgPackInto(unittest.TestCase): - """ Test case for msg_pack_into - """ - - def _test_msg_pack_into(self, offset_type='e'): - fmt = '!HH' - len_ = struct.calcsize(fmt) - buf = bytearray(len_) - offset = len_ - arg1 = 1 - arg2 = 2 - - if offset_type == 'l': - offset += 1 - elif offset_type == 'g': - offset -= 1 - - pack_utils.msg_pack_into(fmt, buf, offset, arg1, arg2) - - check_offset = len(buf) - len_ - res = struct.unpack_from(fmt, six.binary_type(buf), check_offset) - - eq_(arg1, res[0]) - eq_(arg2, res[1]) - - return True - - def test_msg_pack_into(self): - ok_(self._test_msg_pack_into()) - - def test_msg_pack_into_less(self): - ok_(self._test_msg_pack_into('l')) - - def test_msg_pack_into_greater(self): - ok_(self._test_msg_pack_into('g')) diff --git a/ryu/tests/unit/lib/test_pcaplib.py b/ryu/tests/unit/lib/test_pcaplib.py deleted file mode 100644 index ac86904e..00000000 --- a/ryu/tests/unit/lib/test_pcaplib.py +++ /dev/null @@ -1,230 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import logging -import os -import struct -import sys -import unittest - -try: - import mock # Python 2 -except ImportError: - from unittest import mock # Python 3 - -from nose.tools import eq_ -from nose.tools import raises - -from ryu.utils import binary_str -from ryu.lib import pcaplib - -LOG = logging.getLogger(__name__) - -PCAP_PACKET_DATA_DIR = os.path.join( - os.path.dirname(sys.modules[__name__].__file__), - '../../packet_data/pcap/') - - -class Test_PcapFileHdr(unittest.TestCase): - """ - Test case for pcaplib.PcapFileHdr class - """ - hdr = pcaplib.PcapFileHdr( - magic=None, # temporary default - version_major=2, - version_minor=4, - thiszone=0x11223344, - sigfigs=0x22334455, - snaplen=0x33445566, - network=0x44556677, - ) - - buf_big = ( - b'\xa1\xb2\xc3\xd4' # magic (Big Endian) - b'\x00\x02\x00\x04' # version_major, version_minor - b'\x11\x22\x33\x44' # thiszone - b'\x22\x33\x44\x55' # sigfigs - b'\x33\x44\x55\x66' # snaplen - b'\x44\x55\x66\x77' # network - ) - - buf_little = ( - b'\xd4\xc3\xb2\xa1' # magic (Little Endian) - b'\x02\x00\x04\x00' # version_major, version_minor - b'\x44\x33\x22\x11' # thiszone - b'\x55\x44\x33\x22' # sigfigs - b'\x66\x55\x44\x33' # snaplen - b'\x77\x66\x55\x44' # network - ) - - buf_invalid = ( - b'\xff\xff\xff\xff' # magic (Invalid) - b'\x02\x00\x04\x00' # version_major, version_minor - b'\x44\x33\x22\x11' # thiszone - b'\x55\x44\x33\x22' # sigfigs - b'\x66\x55\x44\x33' # snaplen - b'\x77\x66\x55\x44' # network - ) - - def _assert(self, magic, ret): - self.hdr.magic = magic - eq_(self.hdr.__dict__, ret.__dict__) - - def test_parser_with_big_endian(self): - ret, byteorder = pcaplib.PcapFileHdr.parser(self.buf_big) - self._assert(pcaplib.PcapFileHdr.MAGIC_NUMBER_IDENTICAL, ret) - eq_('big', byteorder) - - def test_parser_with_little_endian(self): - ret, byteorder = pcaplib.PcapFileHdr.parser(self.buf_little) - self._assert(pcaplib.PcapFileHdr.MAGIC_NUMBER_SWAPPED, ret) - eq_('little', byteorder) - - @mock.patch('sys.byteorder', 'big') - def test_serialize_with_big_endian(self): - buf = self.hdr.serialize() - eq_(binary_str(self.buf_big), binary_str(buf)) - - @mock.patch('sys.byteorder', 'little') - def test_serialize_with_little_endian(self): - buf = self.hdr.serialize() - eq_(binary_str(self.buf_little), binary_str(buf)) - - @raises(struct.error) - def test_parser_with_invalid_magic_number(self): - pcaplib.PcapFileHdr.parser(self.buf_invalid) - - -class Test_PcapPktHdr(unittest.TestCase): - """ - Test case for pcaplib.PcapPktHdr class - """ - expected_buf = b'test_data' - - hdr = pcaplib.PcapPktHdr( - ts_sec=0x11223344, - ts_usec=0x22334455, - incl_len=len(expected_buf), - orig_len=0x44556677, - ) - - buf_big = ( - b'\x11\x22\x33\x44' # ts_sec - b'\x22\x33\x44\x55' # ts_usec - b'\x00\x00\x00\x09' # incl_len = len(expected_buf) - b'\x44\x55\x66\x77' # orig_len - ) - - buf_little = ( - b'\x44\x33\x22\x11' # ts_sec - b'\x55\x44\x33\x22' # ts_usec - b'\x09\x00\x00\x00' # incl_len = len(expected_buf) - b'\x77\x66\x55\x44' # orig_len - ) - - def test_parser_with_big_endian(self): - ret, buf = pcaplib.PcapPktHdr.parser( - self.buf_big + self.expected_buf, 'big') - eq_(self.hdr.__dict__, ret.__dict__) - eq_(self.expected_buf, buf) - - def test_parser_with_little_endian(self): - ret, buf = pcaplib.PcapPktHdr.parser( - self.buf_little + self.expected_buf, 'little') - eq_(self.hdr.__dict__, ret.__dict__) - eq_(self.expected_buf, buf) - - @mock.patch('sys.byteorder', 'big') - def test_serialize_with_big_endian(self): - buf = self.hdr.serialize() - eq_(binary_str(self.buf_big), binary_str(buf)) - - @mock.patch('sys.byteorder', 'little') - def test_serialize_with_little_endian(self): - buf = self.hdr.serialize() - eq_(binary_str(self.buf_little), binary_str(buf)) - - -class Test_pcaplib_Reader(unittest.TestCase): - """ - Test case for pcaplib.Reader class - """ - - expected_outputs = [ - (0x1234 + (0x5678 / 1e6), b'test_data_1'), # sec=0x1234, usec=0x5678 - (0x2345 + (0x6789 / 1e6), b'test_data_2'), # sec=0x2345, usec=0x6789 - ] - - def _test(self, file_name): - outputs = [] - for ts, buf in pcaplib.Reader(open(file_name, 'rb')): - outputs.append((ts, buf)) - - eq_(self.expected_outputs, outputs) - - def test_with_big_endian(self): - self._test(os.path.join(PCAP_PACKET_DATA_DIR, 'big_endian.pcap')) - - def test_with_little_endian(self): - self._test(os.path.join(PCAP_PACKET_DATA_DIR, 'little_endian.pcap')) - - -class DummyFile(object): - - def __init__(self): - self.buf = b'' - - def write(self, buf): - self.buf += buf - - def close(self): - pass - - -class Test_pcaplib_Writer(unittest.TestCase): - """ - Test case for pcaplib.Writer class - """ - - @staticmethod - def _test(file_name): - expected_buf = open(file_name, 'rb').read() - f = DummyFile() - w = pcaplib.Writer(f) - w.write_pkt(b'test_data_1', ts=(0x1234 + (0x5678 / 1e6))) - w.write_pkt(b'test_data_2', ts=(0x2345 + (0x6789 / 1e6))) - eq_(expected_buf, f.buf) - - @mock.patch('sys.byteorder', 'big') - def test_with_big_endian(self): - self._test(os.path.join(PCAP_PACKET_DATA_DIR, 'big_endian.pcap')) - - @mock.patch('sys.byteorder', 'little') - def test_with_little_endian(self): - self._test(os.path.join(PCAP_PACKET_DATA_DIR, 'little_endian.pcap')) - - @staticmethod - @mock.patch.object(pcaplib.Writer, '_write_pcap_file_hdr', mock.MagicMock) - @mock.patch.object(pcaplib.Writer, '_write_pkt_hdr', mock.MagicMock) - def test_with_longer_buf(): - f = DummyFile() - snaplen = 4 - w = pcaplib.Writer(f, snaplen=snaplen) - w.write_pkt(b'hogehoge', ts=0) - expected_buf = b'hoge' # b'hogehoge'[:snaplen] - eq_(expected_buf, f.buf) - eq_(snaplen, len(f.buf)) diff --git a/ryu/tests/unit/lib/test_rpc.py b/ryu/tests/unit/lib/test_rpc.py deleted file mode 100644 index 2df123ee..00000000 --- a/ryu/tests/unit/lib/test_rpc.py +++ /dev/null @@ -1,360 +0,0 @@ -# Copyright (C) 2013-2015 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013-2015 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import numbers -import socket -import struct -import unittest - -from nose.tools import raises -import six - -from ryu.lib import hub -from ryu.lib import rpc - - -class MyException(BaseException): - pass - - -class Test_rpc(unittest.TestCase): - """ Test case for ryu.lib.rpc - """ - - def _handle_request(self, m): - e = self._server_endpoint - msgid, method, params = m - if method == 'resp': - e.send_response(msgid, result=params[0]) - elif method == 'err': - e.send_response(msgid, error=params[0]) - elif method == 'callback': - n, cb, v = params - assert n > 0 - self._requests.add(e.send_request(cb, [msgid, n, cb, v])) - elif method == 'notify1': - e.send_notification(params[1], params[2]) - e.send_response(msgid, result=params[0]) - elif method == 'shutdown': - how = getattr(socket, params[0]) - self._server_sock.shutdown(how) - e.send_response(msgid, result=method) - else: - raise Exception("unknown method %s" % method) - - def _handle_notification(self, m): - e = self._server_endpoint - method, params = m - if method == 'notify2': - e.send_notification(params[0], params[1]) - - def _handle_response(self, m): - e = self._server_endpoint - msgid, error, result = m - assert error is None - self._requests.remove(msgid) - omsgid, n, cb, v = result - assert n >= 0 - if n == 0: - e.send_response(omsgid, result=v) - else: - self._requests.add(e.send_request(cb, [omsgid, n, cb, v])) - - def setUp(self): - self._server_sock, self._client_sock = socket.socketpair() - table = { - rpc.MessageType.REQUEST: self._handle_request, - rpc.MessageType.RESPONSE: self._handle_response, - rpc.MessageType.NOTIFY: self._handle_notification - } - self._requests = set() - self._server_sock.setblocking(0) - self._server_endpoint = rpc.EndPoint(self._server_sock, - disp_table=table) - self._server_thread = hub.spawn(self._server_endpoint.serve) - - def tearDown(self): - hub.kill(self._server_thread) - hub.joinall([self._server_thread]) - - def test_0_call_str(self): - c = rpc.Client(self._client_sock) - obj = 'hoge' - result = c.call('resp', [obj]) - assert result == obj - assert isinstance(result, str) - - def test_0_call_int(self): - c = rpc.Client(self._client_sock) - obj = 12345 - assert isinstance(obj, int) - result = c.call('resp', [obj]) - assert result == obj - assert isinstance(result, numbers.Integral) - - def test_0_call_int2(self): - c = rpc.Client(self._client_sock) - obj = six.MAXSIZE - assert isinstance(obj, int) - result = c.call('resp', [obj]) - assert result == obj - assert isinstance(result, numbers.Integral) - - def test_0_call_int3(self): - c = rpc.Client(self._client_sock) - obj = - six.MAXSIZE - 1 - assert isinstance(obj, int) - result = c.call('resp', [obj]) - assert result == obj - assert isinstance(result, numbers.Integral) - - def test_0_call_long(self): - c = rpc.Client(self._client_sock) - obj = 0xffffffffffffffff # max value for msgpack - assert isinstance(obj, numbers.Integral) - result = c.call('resp', [obj]) - assert result == obj - assert isinstance(result, numbers.Integral) - - def test_0_call_long2(self): - c = rpc.Client(self._client_sock) - # Note: the python type of this value is int for 64-bit arch - obj = -0x8000000000000000 # min value for msgpack - assert isinstance(obj, numbers.Integral) - result = c.call('resp', [obj]) - assert result == obj - assert isinstance(result, numbers.Integral) - - @raises(TypeError) - def test_0_call_bytearray(self): - c = rpc.Client(self._client_sock) - obj = bytearray(b'foo') - result = c.call('resp', [obj]) - assert result == obj - assert isinstance(result, str) - - def test_1_shutdown_wr(self): - # test if the server shutdown on disconnect - self._client_sock.shutdown(socket.SHUT_WR) - hub.joinall([self._server_thread]) - - @raises(EOFError) - def test_1_client_shutdown_wr(self): - c = rpc.Client(self._client_sock) - c.call('shutdown', ['SHUT_WR']) - - def test_1_call_True(self): - c = rpc.Client(self._client_sock) - obj = True - assert c.call('resp', [obj]) == obj - - def test_2_call_None(self): - c = rpc.Client(self._client_sock) - obj = None - assert c.call('resp', [obj]) is None - - def test_2_call_False(self): - c = rpc.Client(self._client_sock) - obj = False - assert c.call('resp', [obj]) == obj - - def test_2_call_dict(self): - c = rpc.Client(self._client_sock) - obj = {'hoge': 1, 'fuga': 2} - assert c.call('resp', [obj]) == obj - - def test_2_call_empty_dict(self): - c = rpc.Client(self._client_sock) - obj = {} - assert c.call('resp', [obj]) == obj - - def test_2_call_array(self): - c = rpc.Client(self._client_sock) - obj = [1, 2, 3, 4] - assert c.call('resp', [obj]) == obj - - def test_2_call_empty_array(self): - c = rpc.Client(self._client_sock) - obj = [] - assert c.call('resp', [obj]) == obj - - def test_2_call_tuple(self): - c = rpc.Client(self._client_sock) - # Note: msgpack library implicitly convert a tuple into a list - obj = (1, 2, 3) - assert c.call('resp', [obj]) == list(obj) - - def test_2_call_unicode(self): - c = rpc.Client(self._client_sock) - # Note: We use encoding='utf-8' option in msgpack.Packer/Unpacker - # in order to support Python 3. - # With this option, utf-8 encoded bytes will be decoded into unicode - # type in Python 2 and str type in Python 3. - obj = u"hoge" - result = c.call('resp', [obj]) - assert result == obj - assert isinstance(result, six.text_type) - - def test_2_call_small_binary(self): - c = rpc.Client(self._client_sock) - obj = struct.pack("100x") - result = c.call('resp', [obj]) - assert result == obj - assert isinstance(result, six.binary_type) - - def test_3_call_complex(self): - c = rpc.Client(self._client_sock) - obj = [1, 'hoge', {'foo': 1, 3: 'bar'}] - assert c.call('resp', [obj]) == obj - - @unittest.skip("doesn't work with eventlet 0.18 and later") - def test_4_call_large_binary(self): - c = rpc.Client(self._client_sock) - obj = struct.pack("10000000x") - result = c.call('resp', [obj]) - assert result == obj - assert isinstance(result, six.binary_type) - - def test_0_notification1(self): - l = [] - - def callback(n): - l.append(n) - c = rpc.Client(self._client_sock, notification_callback=callback) - obj = 'hogehoge' - robj = 'fugafuga' - assert c.call('notify1', [robj, 'notify_hoge', [obj]]) == robj - c.receive_notification() - assert len(l) == 1 - n = l.pop(0) - assert n is not None - method, params = n - assert method == 'notify_hoge' - assert params[0] == obj - - def test_0_notification2(self): - l = [] - - def callback(n): - l.append(n) - c = rpc.Client(self._client_sock, notification_callback=callback) - obj = 'hogehogehoge' - c.send_notification('notify2', ['notify_hoge', [obj]]) - c.receive_notification() - assert len(l) == 1 - n = l.pop(0) - assert n is not None - method, params = n - assert method == 'notify_hoge' - assert params[0] == obj - - def test_0_call_error(self): - c = rpc.Client(self._client_sock) - obj = 'hoge' - try: - c.call('err', [obj]) - raise Exception("unexpected") - except rpc.RPCError as e: - assert e.get_value() == obj - - def test_0_call_error_notification(self): - l = [] - - def callback(n): - l.append(n) - c = rpc.Client(self._client_sock, notification_callback=callback) - c.send_notification('notify2', ['notify_foo', []]) - hub.sleep(0.5) # give the peer a chance to run - obj = 'hoge' - try: - c.call('err', [obj]) - raise Exception("unexpected") - except rpc.RPCError as e: - assert e.get_value() == obj - assert len(l) == 1 - n = l.pop(0) - method, params = n - assert method == 'notify_foo' - assert params == [] - - def test_4_async_call(self): - """send a bunch of requests and then wait for responses - """ - num_calls = 9999 - old_blocking = self._client_sock.setblocking(0) - try: - e = rpc.EndPoint(self._client_sock) - s = set() - for i in range(1, num_calls + 1): - s.add(e.send_request('resp', [i])) - sum = 0 - while s: - e.block() - e.process() - done = set() - for x in s: - r = e.get_response(x) - if r is None: - continue - res, error = r - assert error is None - sum += res - done.add(x) - assert done.issubset(s) - s -= done - assert sum == (1 + num_calls) * num_calls / 2 - finally: - self._client_sock.setblocking(old_blocking) - - def test_4_async_call2(self): - """both sides act as rpc client and server - """ - assert not self._requests - num_calls = 100 - old_blocking = self._client_sock.setblocking(0) - try: - e = rpc.EndPoint(self._client_sock) - s = set() - for i in range(1, num_calls + 1): - s.add(e.send_request('callback', [i, 'ourcallback', 0])) - sum = 0 - while s: - e.block() - e.process() - done = set() - for x in s: - r = e.get_response(x) - if r is None: - continue - res, error = r - assert error is None - sum += res - done.add(x) - assert done.issubset(s) - s -= done - r = e.get_request() - if r is not None: - msgid, method, params = r - assert method == 'ourcallback' - omsgid, n, cb, v = params - assert omsgid in s - assert cb == 'ourcallback' - assert n > 0 - e.send_response(msgid, result=[omsgid, n - 1, cb, v + 1]) - assert sum == (1 + num_calls) * num_calls / 2 - finally: - self._client_sock.setblocking(old_blocking) - assert not self._requests diff --git a/ryu/tests/unit/lib/test_stringify.py b/ryu/tests/unit/lib/test_stringify.py deleted file mode 100644 index 46fb21f0..00000000 --- a/ryu/tests/unit/lib/test_stringify.py +++ /dev/null @@ -1,75 +0,0 @@ -# Copyright (C) 2013-2015 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013-2015 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import base64 -import six -import unittest -from nose.tools import eq_ - -from ryu.lib import stringify - - -class C1(stringify.StringifyMixin): - def __init__(self, a, c): - print("init %s %s" % (a, c)) - self.a = a - self._b = 'B' - self.c = c - - -class Test_stringify(unittest.TestCase): - """ Test case for ryu.lib.stringify - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_jsondict(self): - if six.PY3: - def b64encode(s): - return base64.b64encode(s).decode('ascii') - else: - b64encode = base64.b64encode - j = {'C1': {'a': 'QUFB', 'c': 'Q0ND'}} - eq_(j['C1']['a'], b64encode(b'AAA')) - eq_(j['C1']['c'], b64encode(b'CCC')) - c = C1(a=b'AAA', c=b'CCC') - c2 = C1.from_jsondict(j['C1']) - eq_(c.__class__, c2.__class__) - eq_(c.__dict__, c2.__dict__) - eq_(j, c.to_jsondict()) - - def test_jsondict2(self): - - def my_encode(x): - return x.lower() - - def my_decode(x): - return x.upper() - - j = {'C1': {'a': 'aaa', 'c': 'ccc'}} - eq_(j['C1']['a'], my_encode('AAA')) - eq_(j['C1']['c'], my_encode('CCC')) - c = C1(a='AAA', c='CCC') - c2 = C1.from_jsondict(j['C1'], decode_string=my_decode) - eq_(c.__class__, c2.__class__) - eq_(c.__dict__, c2.__dict__) - eq_(j, c.to_jsondict(encode_string=my_encode)) diff --git a/ryu/tests/unit/ofproto/__init__.py b/ryu/tests/unit/ofproto/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/ofproto/json/of10/1-1-ofp_packet_out.packet.json b/ryu/tests/unit/ofproto/json/of10/1-1-ofp_packet_out.packet.json deleted file mode 100644 index 0dc98f49..00000000 --- a/ryu/tests/unit/ofproto/json/of10/1-1-ofp_packet_out.packet.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "OFPPacketOut": { - "actions": [ - { - "OFPActionOutput": { - "max_len": 65535, - "port": 65532 - } - } - ], - "buffer_id": 4294967295, - "data": "8guk0D9w8gukffjqCABFAABU+BoAAP8Br4sKAAABCgAAAggAAgj3YAAAMdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", - "in_port": 65533 - } -} diff --git a/ryu/tests/unit/ofproto/json/of10/1-2-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of10/1-2-ofp_flow_mod.packet.json deleted file mode 100644 index 4a63685e..00000000 --- a/ryu/tests/unit/ofproto/json/of10/1-2-ofp_flow_mod.packet.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "OFPFlowMod": { - "actions": [ - { - "OFPActionOutput": { - "max_len": 65535, - "port": 6 - } - } - ], - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "match": { - "OFPMatch": { - "dl_dst": "f2:0b:a4:7d:f8:ea", - "dl_src": "00:00:00:00:00:00", - "dl_type": 0, - "dl_vlan": 0, - "dl_vlan_pcp": 0, - "in_port": 0, - "nw_dst": "0.0.0.0", - "nw_proto": 0, - "nw_src": "0.0.0.0", - "nw_tos": 0, - "tp_dst": 0, - "tp_src": 0, - "wildcards": 4194295 - } - }, - "out_port": 65532, - "priority": 123 - } -} diff --git a/ryu/tests/unit/ofproto/json/of10/1-4-ofp_packet_in.packet.json b/ryu/tests/unit/ofproto/json/of10/1-4-ofp_packet_in.packet.json deleted file mode 100644 index 6ccd2fb8..00000000 --- a/ryu/tests/unit/ofproto/json/of10/1-4-ofp_packet_in.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "OFPPacketIn": { - "buffer_id": 2, - "data": "////////8gukffjqCAYAAQgABgQAAfILpH346goAAAEAAAAAAAAKAAAD", - "in_port": 99, - "reason": 1, - "total_len": 42 - } -} diff --git a/ryu/tests/unit/ofproto/json/of10/1-5-features_request.packet.json b/ryu/tests/unit/ofproto/json/of10/1-5-features_request.packet.json deleted file mode 100644 index 8f48ad5a..00000000 --- a/ryu/tests/unit/ofproto/json/of10/1-5-features_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPFeaturesRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of10/1-6-ofp_switch_features.packet.json b/ryu/tests/unit/ofproto/json/of10/1-6-ofp_switch_features.packet.json deleted file mode 100644 index 208431f7..00000000 --- a/ryu/tests/unit/ofproto/json/of10/1-6-ofp_switch_features.packet.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "OFPSwitchFeatures": { - "actions": 2115, - "capabilities": 169, - "datapath_id": 1095522080376, - "n_buffers": 0, - "n_tables": 255, - "ports": { - "6": { - "OFPPhyPort": { - "advertised": 640, - "config": 0, - "curr": 648, - "hw_addr": "f2:0b:a4:7d:f8:ea", - "name": "Port6", - "peer": 648, - "port_no": 6, - "state": 2, - "supported": 648 - } - }, - "7": { - "OFPPhyPort": { - "advertised": 640, - "config": 0, - "curr": 648, - "hw_addr": "f2:0b:a4:d0:3f:70", - "name": "Port7", - "peer": 648, - "port_no": 7, - "state": 16, - "supported": 648 - } - } - } - } -} diff --git a/ryu/tests/unit/ofproto/json/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet.json b/ryu/tests/unit/ofproto/json/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet.json deleted file mode 100644 index f8e38d71..00000000 --- a/ryu/tests/unit/ofproto/json/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "OFPPacketOut": { - "actions": [ - { - "OFPActionOutput": { - "max_len": 65535, - "port": 65532 - } - } - ], - "buffer_id": 4294967295, - "data": { - "Packet": { - "protocols": [ - { - "ethernet": { - "dst": "f2:0b:a4:d0:3f:70", - "ethertype": 2048, - "src": "f2:0b:a4:7d:f8:ea" - } - }, - { - "ipv4": { - "csum": 44939, - "dst": "10.0.0.2", - "flags": 0, - "header_length": 5, - "identification": 63514, - "offset": 0, - "option": null, - "proto": 1, - "src": "10.0.0.1", - "tos": 0, - "total_length": 84, - "ttl": 255, - "version": 4 - } - }, - { - "icmp": { - "code": 0, - "csum": 520, - "data": { - "echo": { - "data": "MdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", - "id": 63328, - "seq": 0 - } - }, - "type": 8 - } - } - ] - } - }, - "in_port": 65533 - } -} diff --git a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet.json b/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet.json deleted file mode 100644 index a41c2b64..00000000 --- a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "OFPFlowMod": { - "actions": [ - { - "NXActionDecMplsTtl": { - "subtype": 26, - "vendor": 8992 - } - } - ], - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "match": { - "OFPMatch": { - "dl_dst": "00:00:00:00:00:00", - "dl_src": "00:00:00:00:00:00", - "dl_type": 34887, - "dl_vlan": 0, - "dl_vlan_pcp": 0, - "in_port": 0, - "nw_dst": "0.0.0.0", - "nw_proto": 0, - "nw_src": "0.0.0.0", - "nw_tos": 0, - "tp_dst": 0, - "tp_src": 0, - "wildcards": 3678447 - } - }, - "out_port": 65535, - "priority": 100 - } -} diff --git a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet.json b/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet.json deleted file mode 100644 index 3f6806c8..00000000 --- a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "OFPFlowMod": { - "actions": [ - { - "NXActionDecTtl": { - "subtype": 18, - "vendor": 8992 - } - } - ], - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "match": { - "OFPMatch": { - "dl_dst": "00:00:00:00:00:00", - "dl_src": "00:00:00:00:00:00", - "dl_type": 34887, - "dl_vlan": 0, - "dl_vlan_pcp": 0, - "in_port": 0, - "nw_dst": "0.0.0.0", - "nw_proto": 0, - "nw_src": "0.0.0.0", - "nw_tos": 0, - "tp_dst": 0, - "tp_src": 0, - "wildcards": 3678447 - } - }, - "out_port": 65535, - "priority": 100 - } -} diff --git a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_pop_mpls.packet.json b/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_pop_mpls.packet.json deleted file mode 100644 index 69c0d70b..00000000 --- a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_pop_mpls.packet.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "OFPFlowMod": { - "actions": [ - { - "NXActionPopMpls": { - "ethertype": 2048, - "subtype": 24, - "vendor": 8992 - } - } - ], - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "match": { - "OFPMatch": { - "dl_dst": "00:00:00:00:00:00", - "dl_src": "00:00:00:00:00:00", - "dl_type": 34887, - "dl_vlan": 0, - "dl_vlan_pcp": 0, - "in_port": 0, - "nw_dst": "0.0.0.0", - "nw_proto": 0, - "nw_src": "0.0.0.0", - "nw_tos": 0, - "tp_dst": 0, - "tp_src": 0, - "wildcards": 3678447 - } - }, - "out_port": 65535, - "priority": 100 - } -} diff --git a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_push_mpls.packet.json b/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_push_mpls.packet.json deleted file mode 100644 index 9e7853cb..00000000 --- a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_push_mpls.packet.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "OFPFlowMod": { - "actions": [ - { - "NXActionPushMpls": { - "ethertype": 34887, - "subtype": 23, - "vendor": 8992 - } - } - ], - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "match": { - "OFPMatch": { - "dl_dst": "00:00:00:00:00:00", - "dl_src": "00:00:00:00:00:00", - "dl_type": 2048, - "dl_vlan": 0, - "dl_vlan_pcp": 0, - "in_port": 0, - "nw_dst": "0.0.0.0", - "nw_proto": 0, - "nw_src": "0.0.0.0", - "nw_tos": 0, - "tp_dst": 0, - "tp_src": 0, - "wildcards": 3678447 - } - }, - "out_port": 65535, - "priority": 100 - } -} diff --git a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_label.packet.json b/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_label.packet.json deleted file mode 100644 index 4cc001b2..00000000 --- a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_label.packet.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "OFPFlowMod": { - "actions": [ - { - "NXActionSetMplsLabel": { - "label": 10, - "subtype": 30, - "vendor": 8992 - } - } - ], - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "match": { - "OFPMatch": { - "dl_dst": "00:00:00:00:00:00", - "dl_src": "00:00:00:00:00:00", - "dl_type": 34887, - "dl_vlan": 0, - "dl_vlan_pcp": 0, - "in_port": 0, - "nw_dst": "0.0.0.0", - "nw_proto": 0, - "nw_src": "0.0.0.0", - "nw_tos": 0, - "tp_dst": 0, - "tp_src": 0, - "wildcards": 3678447 - } - }, - "out_port": 65535, - "priority": 100 - } -} diff --git a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_tc.packet.json b/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_tc.packet.json deleted file mode 100644 index 864fd7e7..00000000 --- a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_tc.packet.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "OFPFlowMod": { - "actions": [ - { - "NXActionSetMplsTc": { - "subtype": 31, - "tc": 10, - "vendor": 8992 - } - } - ], - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "match": { - "OFPMatch": { - "dl_dst": "00:00:00:00:00:00", - "dl_src": "00:00:00:00:00:00", - "dl_type": 34887, - "dl_vlan": 0, - "dl_vlan_pcp": 0, - "in_port": 0, - "nw_dst": "0.0.0.0", - "nw_proto": 0, - "nw_src": "0.0.0.0", - "nw_tos": 0, - "tp_dst": 0, - "tp_src": 0, - "wildcards": 3678447 - } - }, - "out_port": 65535, - "priority": 100 - } -} diff --git a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet.json b/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet.json deleted file mode 100644 index da6e86f9..00000000 --- a/ryu/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "OFPFlowMod": { - "actions": [ - { - "NXActionSetMplsTtl": { - "subtype": 25, - "ttl": 127, - "vendor": 8992 - } - } - ], - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "match": { - "OFPMatch": { - "dl_dst": "00:00:00:00:00:00", - "dl_src": "00:00:00:00:00:00", - "dl_type": 34887, - "dl_vlan": 0, - "dl_vlan_pcp": 0, - "in_port": 0, - "nw_dst": "0.0.0.0", - "nw_proto": 0, - "nw_src": "0.0.0.0", - "nw_tos": 0, - "tp_dst": 0, - "tp_src": 0, - "wildcards": 3678447 - } - }, - "out_port": 65535, - "priority": 100 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-0-ofp_desc_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-0-ofp_desc_stats_reply.packet.json deleted file mode 100644 index 4d5181ca..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-0-ofp_desc_stats_reply.packet.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "OFPStatsReply": { - "body": { - "OFPDescStats": { - "dp_desc": "dp", - "hw_desc": "hw", - "mfr_desc": "mfr", - "serial_num": "serial", - "sw_desc": "sw" - } - }, - "flags": 0, - "type": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-1-ofp_packet_out.packet.json b/ryu/tests/unit/ofproto/json/of12/3-1-ofp_packet_out.packet.json deleted file mode 100644 index efb39e2d..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-1-ofp_packet_out.packet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "OFPPacketOut": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 4294967292, - "type": 0 - } - } - ], - "actions_len": 16, - "buffer_id": 4294967295, - "data": "8guk0D9w8gukffjqCABFAABU+BoAAP8Br4sKAAABCgAAAggAAgj3YAAAMdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", - "in_port": 4294967293 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-10-ofp_hello.packet.json b/ryu/tests/unit/ofproto/json/of12/3-10-ofp_hello.packet.json deleted file mode 100644 index ce07cebd..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-10-ofp_hello.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPHello": {} -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-11-ofp_flow_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-11-ofp_flow_stats_request.packet.json deleted file mode 100644 index d12cac71..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-11-ofp_flow_stats_request.packet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "OFPFlowStatsRequest": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-12-ofp_flow_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-12-ofp_flow_stats_reply.packet.json deleted file mode 100644 index 5f802b45..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-12-ofp_flow_stats_reply.packet.json +++ /dev/null @@ -1,161 +0,0 @@ -{ - "OFPStatsReply": { - "body": [ - { - "OFPFlowStats": { - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115277000, - "duration_sec": 358, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [], - "length": 56, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "packet_count": 0, - "priority": 65535, - "table_id": 0 - } - }, - { - "OFPFlowStats": { - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115055000, - "duration_sec": 358, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 0, - "port": 4294967290, - "type": 0 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "length": 88, - "match": { - "OFPMatch": { - "length": 10, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - } - ], - "type": 1 - } - }, - "packet_count": 0, - "priority": 65534, - "table_id": 0 - } - }, - { - "OFPFlowStats": { - "byte_count": 238, - "cookie": 0, - "duration_nsec": 511582000, - "duration_sec": 316220, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 1, - "type": 1 - } - } - ], - "length": 80, - "match": { - "OFPMatch": { - "length": 22, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 6 - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "packet_count": 3, - "priority": 123, - "table_id": 0 - } - }, - { - "OFPFlowStats": { - "byte_count": 98, - "cookie": 0, - "duration_nsec": 980901000, - "duration_sec": 313499, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 4294967293, - "type": 0 - } - } - ], - "len": 24, - "type": 3 - } - } - ], - "length": 80, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "packet_count": 1, - "priority": 0, - "table_id": 0 - } - } - ], - "flags": 0, - "type": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-13-ofp_echo_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-13-ofp_echo_request.packet.json deleted file mode 100644 index e1f2af42..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-13-ofp_echo_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPEchoRequest": { - "data": "aG9nZQ==" - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-14-ofp_echo_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-14-ofp_echo_reply.packet.json deleted file mode 100644 index 2a573634..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-14-ofp_echo_reply.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPEchoReply": { - "data": "aG9nZQ==" - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-15-ofp_error_msg.packet.json b/ryu/tests/unit/ofproto/json/of12/3-15-ofp_error_msg.packet.json deleted file mode 100644 index e9ab2b5e..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-15-ofp_error_msg.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPErrorMsg": { - "code": 11, - "data": "ZnVnYWZ1Z2E=", - "type": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-16-ofp_experimenter.packet.json b/ryu/tests/unit/ofproto/json/of12/3-16-ofp_experimenter.packet.json deleted file mode 100644 index 4ad13c73..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-16-ofp_experimenter.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPExperimenter": { - "data": "bmF6bw==", - "exp_type": 123456789, - "experimenter": 98765432 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-17-ofp_barrier_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-17-ofp_barrier_request.packet.json deleted file mode 100644 index 2aae9ec3..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-17-ofp_barrier_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPBarrierRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-18-ofp_barrier_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-18-ofp_barrier_reply.packet.json deleted file mode 100644 index 11f8cfcc..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-18-ofp_barrier_reply.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPBarrierReply": {} -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-19-ofp_role_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-19-ofp_role_request.packet.json deleted file mode 100644 index 5cdbc2f1..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-19-ofp_role_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPRoleRequest": { - "generation_id": 17294086455919964160, - "role": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-2-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of12/3-2-ofp_flow_mod.packet.json deleted file mode 100644 index 43e0e3c9..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-2-ofp_flow_mod.packet.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 258 - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 6, - "type": 0 - } - } - ], - "len": 40, - "type": 3 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "01:02:03:04:05:06" - } - }, - "len": 16, - "type": 25 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-20-ofp_role_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-20-ofp_role_reply.packet.json deleted file mode 100644 index 3fd9a13f..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-20-ofp_role_reply.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPRoleReply": { - "generation_id": 17294086455919964160, - "role": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-21-ofp_group_mod.packet.json b/ryu/tests/unit/ofproto/json/of12/3-21-ofp_group_mod.packet.json deleted file mode 100644 index 1a3767da..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-21-ofp_group_mod.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "OFPGroupMod": { - "buckets": [ - { - "OFPBucket": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 2, - "type": 0 - } - } - ], - "len": 32, - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - } - ], - "command": 0, - "group_id": 1, - "type": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-22-ofp_port_mod.packet.json b/ryu/tests/unit/ofproto/json/of12/3-22-ofp_port_mod.packet.json deleted file mode 100644 index e334f5d8..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-22-ofp_port_mod.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "OFPPortMod": { - "advertise": 4096, - "config": 0, - "hw_addr": "00-11-00-00-11-11", - "mask": 0, - "port_no": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-23-ofp_table_mod.packet.json b/ryu/tests/unit/ofproto/json/of12/3-23-ofp_table_mod.packet.json deleted file mode 100644 index 5019c29b..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-23-ofp_table_mod.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPTableMod": { - "config": 0, - "table_id": 255 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-24-ofp_desc_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-24-ofp_desc_stats_request.packet.json deleted file mode 100644 index 6129d409..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-24-ofp_desc_stats_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPDescStatsRequest": { - "flags": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-25-ofp_aggregate_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-25-ofp_aggregate_stats_request.packet.json deleted file mode 100644 index cc3d76fd..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-25-ofp_aggregate_stats_request.packet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "OFPAggregateStatsRequest": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 255 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-26-ofp_aggregate_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-26-ofp_aggregate_stats_reply.packet.json deleted file mode 100644 index ed1473aa..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-26-ofp_aggregate_stats_reply.packet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "OFPStatsReply": { - "body": { - "OFPAggregateStatsReply": { - "byte_count": 574, - "flow_count": 6, - "packet_count": 7 - } - }, - "flags": 0, - "type": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-27-ofp_table_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-27-ofp_table_stats_request.packet.json deleted file mode 100644 index 03adedd1..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-27-ofp_table_stats_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPTableStatsRequest": { - "flags": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-28-ofp_table_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-28-ofp_table_stats_reply.packet.json deleted file mode 100644 index 7480fde4..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-28-ofp_table_stats_reply.packet.json +++ /dev/null @@ -1,5108 +0,0 @@ -{ - "OFPStatsReply": { - "body": [ - { - "OFPTableStats": { - "active_count": 4, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 4, - "match": 68719476733, - "matched_count": 4, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", - "table_id": 0, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 2, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 3, - "match": 68719476733, - "matched_count": 3, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x01", - "table_id": 1, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x02", - "table_id": 2, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x03", - "table_id": 3, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x04", - "table_id": 4, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x05", - "table_id": 5, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x06", - "table_id": 6, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x07", - "table_id": 7, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x08", - "table_id": 8, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x09", - "table_id": 9, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x0a", - "table_id": 10, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x0b", - "table_id": 11, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x0c", - "table_id": 12, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x0d", - "table_id": 13, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x0e", - "table_id": 14, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x0f", - "table_id": 15, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x10", - "table_id": 16, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x11", - "table_id": 17, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x12", - "table_id": 18, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x13", - "table_id": 19, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x14", - "table_id": 20, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x15", - "table_id": 21, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x16", - "table_id": 22, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x17", - "table_id": 23, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x18", - "table_id": 24, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x19", - "table_id": 25, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x1a", - "table_id": 26, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x1b", - "table_id": 27, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x1c", - "table_id": 28, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x1d", - "table_id": 29, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x1e", - "table_id": 30, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x1f", - "table_id": 31, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x20", - "table_id": 32, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x21", - "table_id": 33, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x22", - "table_id": 34, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x23", - "table_id": 35, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x24", - "table_id": 36, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x25", - "table_id": 37, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x26", - "table_id": 38, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x27", - "table_id": 39, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x28", - "table_id": 40, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x29", - "table_id": 41, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x2a", - "table_id": 42, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x2b", - "table_id": 43, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x2c", - "table_id": 44, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x2d", - "table_id": 45, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x2e", - "table_id": 46, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x2f", - "table_id": 47, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x30", - "table_id": 48, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x31", - "table_id": 49, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x32", - "table_id": 50, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x33", - "table_id": 51, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x34", - "table_id": 52, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x35", - "table_id": 53, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x36", - "table_id": 54, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x37", - "table_id": 55, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x38", - "table_id": 56, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x39", - "table_id": 57, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x3a", - "table_id": 58, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x3b", - "table_id": 59, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x3c", - "table_id": 60, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x3d", - "table_id": 61, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x3e", - "table_id": 62, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x3f", - "table_id": 63, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x40", - "table_id": 64, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x41", - "table_id": 65, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x42", - "table_id": 66, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x43", - "table_id": 67, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x44", - "table_id": 68, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x45", - "table_id": 69, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x46", - "table_id": 70, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x47", - "table_id": 71, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x48", - "table_id": 72, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x49", - "table_id": 73, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x4a", - "table_id": 74, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x4b", - "table_id": 75, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x4c", - "table_id": 76, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x4d", - "table_id": 77, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x4e", - "table_id": 78, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x4f", - "table_id": 79, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x50", - "table_id": 80, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x51", - "table_id": 81, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x52", - "table_id": 82, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x53", - "table_id": 83, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x54", - "table_id": 84, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x55", - "table_id": 85, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x56", - "table_id": 86, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x57", - "table_id": 87, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x58", - "table_id": 88, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x59", - "table_id": 89, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x5a", - "table_id": 90, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x5b", - "table_id": 91, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x5c", - "table_id": 92, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x5d", - "table_id": 93, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x5e", - "table_id": 94, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x5f", - "table_id": 95, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x60", - "table_id": 96, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x61", - "table_id": 97, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x62", - "table_id": 98, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x63", - "table_id": 99, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x64", - "table_id": 100, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x65", - "table_id": 101, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x66", - "table_id": 102, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x67", - "table_id": 103, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x68", - "table_id": 104, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x69", - "table_id": 105, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x6a", - "table_id": 106, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x6b", - "table_id": 107, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x6c", - "table_id": 108, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x6d", - "table_id": 109, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x6e", - "table_id": 110, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x6f", - "table_id": 111, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x70", - "table_id": 112, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x71", - "table_id": 113, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x72", - "table_id": 114, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x73", - "table_id": 115, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x74", - "table_id": 116, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x75", - "table_id": 117, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x76", - "table_id": 118, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x77", - "table_id": 119, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x78", - "table_id": 120, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x79", - "table_id": 121, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x7a", - "table_id": 122, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x7b", - "table_id": 123, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x7c", - "table_id": 124, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x7d", - "table_id": 125, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x7e", - "table_id": 126, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x7f", - "table_id": 127, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x80", - "table_id": 128, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x81", - "table_id": 129, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x82", - "table_id": 130, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x83", - "table_id": 131, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x84", - "table_id": 132, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x85", - "table_id": 133, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x86", - "table_id": 134, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x87", - "table_id": 135, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x88", - "table_id": 136, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x89", - "table_id": 137, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x8a", - "table_id": 138, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x8b", - "table_id": 139, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x8c", - "table_id": 140, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x8d", - "table_id": 141, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x8e", - "table_id": 142, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x8f", - "table_id": 143, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x90", - "table_id": 144, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x91", - "table_id": 145, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x92", - "table_id": 146, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x93", - "table_id": 147, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x94", - "table_id": 148, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x95", - "table_id": 149, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x96", - "table_id": 150, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x97", - "table_id": 151, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x98", - "table_id": 152, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x99", - "table_id": 153, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x9a", - "table_id": 154, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x9b", - "table_id": 155, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x9c", - "table_id": 156, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x9d", - "table_id": 157, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x9e", - "table_id": 158, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x9f", - "table_id": 159, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xa0", - "table_id": 160, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xa1", - "table_id": 161, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xa2", - "table_id": 162, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xa3", - "table_id": 163, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xa4", - "table_id": 164, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xa5", - "table_id": 165, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xa6", - "table_id": 166, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xa7", - "table_id": 167, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xa8", - "table_id": 168, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xa9", - "table_id": 169, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xaa", - "table_id": 170, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xab", - "table_id": 171, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xac", - "table_id": 172, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xad", - "table_id": 173, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xae", - "table_id": 174, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xaf", - "table_id": 175, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xb0", - "table_id": 176, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xb1", - "table_id": 177, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xb2", - "table_id": 178, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xb3", - "table_id": 179, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xb4", - "table_id": 180, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xb5", - "table_id": 181, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xb6", - "table_id": 182, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xb7", - "table_id": 183, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xb8", - "table_id": 184, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xb9", - "table_id": 185, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xba", - "table_id": 186, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xbb", - "table_id": 187, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xbc", - "table_id": 188, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xbd", - "table_id": 189, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xbe", - "table_id": 190, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xbf", - "table_id": 191, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xc0", - "table_id": 192, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xc1", - "table_id": 193, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xc2", - "table_id": 194, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xc3", - "table_id": 195, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xc4", - "table_id": 196, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xc5", - "table_id": 197, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xc6", - "table_id": 198, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xc7", - "table_id": 199, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xc8", - "table_id": 200, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xc9", - "table_id": 201, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xca", - "table_id": 202, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xcb", - "table_id": 203, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xcc", - "table_id": 204, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xcd", - "table_id": 205, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xce", - "table_id": 206, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xcf", - "table_id": 207, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xd0", - "table_id": 208, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xd1", - "table_id": 209, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xd2", - "table_id": 210, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xd3", - "table_id": 211, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xd4", - "table_id": 212, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xd5", - "table_id": 213, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xd6", - "table_id": 214, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xd7", - "table_id": 215, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xd8", - "table_id": 216, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xd9", - "table_id": 217, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xda", - "table_id": 218, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xdb", - "table_id": 219, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xdc", - "table_id": 220, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xdd", - "table_id": 221, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xde", - "table_id": 222, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xdf", - "table_id": 223, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xe0", - "table_id": 224, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xe1", - "table_id": 225, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xe2", - "table_id": 226, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xe3", - "table_id": 227, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xe4", - "table_id": 228, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xe5", - "table_id": 229, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xe6", - "table_id": 230, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xe7", - "table_id": 231, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xe8", - "table_id": 232, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xe9", - "table_id": 233, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xea", - "table_id": 234, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xeb", - "table_id": 235, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xec", - "table_id": 236, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xed", - "table_id": 237, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xee", - "table_id": 238, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xef", - "table_id": 239, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xf0", - "table_id": 240, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xf1", - "table_id": 241, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xf2", - "table_id": 242, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xf3", - "table_id": 243, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xf4", - "table_id": 244, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xf5", - "table_id": 245, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xf6", - "table_id": 246, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xf7", - "table_id": 247, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xf8", - "table_id": 248, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xf9", - "table_id": 249, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xfa", - "table_id": 250, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xfb", - "table_id": 251, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xfc", - "table_id": 252, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xfd", - "table_id": 253, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - }, - { - "OFPTableStats": { - "active_count": 0, - "apply_actions": 67082241, - "apply_setfields": 0, - "config": 0, - "instructions": 62, - "lookup_count": 0, - "match": 68719476733, - "matched_count": 0, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0xfe", - "table_id": 254, - "wildcards": 68719476733, - "write_actions": 67082241, - "write_setfields": 0 - } - } - ], - "flags": 0, - "type": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-29-ofp_port_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-29-ofp_port_stats_request.packet.json deleted file mode 100644 index 9a94ed8b..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-29-ofp_port_stats_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPPortStatsRequest": { - "flags": 0, - "port_no": 4294967295 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-3-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of12/3-3-ofp_flow_mod.packet.json deleted file mode 100644 index cd68b51f..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-3-ofp_flow_mod.packet.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 1, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 22, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 6 - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-30-ofp_port_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-30-ofp_port_stats_reply.packet.json deleted file mode 100644 index 9afd8cd4..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-30-ofp_port_stats_reply.packet.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "OFPStatsReply": { - "body": [ - { - "OFPPortStats": { - "collisions": 0, - "port_no": 7, - "rx_bytes": 0, - "rx_crc_err": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "rx_packets": 0, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - }, - { - "OFPPortStats": { - "collisions": 0, - "port_no": 6, - "rx_bytes": 336, - "rx_crc_err": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "rx_packets": 4, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - } - ], - "flags": 0, - "type": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-31-ofp_group_features_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-31-ofp_group_features_stats_request.packet.json deleted file mode 100644 index 03974d3e..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-31-ofp_group_features_stats_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPGroupFeaturesStatsRequest": { - "flags": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-32-ofp_group_features_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-32-ofp_group_features_stats_reply.packet.json deleted file mode 100644 index 7e867868..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-32-ofp_group_features_stats_reply.packet.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "OFPStatsReply": { - "body": { - "OFPGroupFeaturesStats": { - "actions": [ - 67082241, - 67082241, - 67082241, - 67082241 - ], - "capabilities": 5, - "length": 40, - "max_groups": [ - 16777216, - 16777216, - 16777216, - 16777216 - ], - "types": 15 - } - }, - "flags": 0, - "type": 8 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-33-ofp_group_desc_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-33-ofp_group_desc_stats_request.packet.json deleted file mode 100644 index e62fe9a0..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-33-ofp_group_desc_stats_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPGroupDescStatsRequest": { - "flags": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-34-ofp_group_desc_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-34-ofp_group_desc_stats_reply.packet.json deleted file mode 100644 index 5166d1ce..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-34-ofp_group_desc_stats_reply.packet.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "OFPStatsReply": { - "body": [ - { - "OFPGroupDescStats": { - "buckets": [ - { - "OFPBucket": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 2, - "type": 0 - } - } - ], - "len": 32, - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - } - ], - "group_id": 1, - "length": 40, - "type": 0 - } - } - ], - "flags": 0, - "type": 7 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-35-ofp_queue_get_config_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-35-ofp_queue_get_config_request.packet.json deleted file mode 100644 index a50308c0..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-35-ofp_queue_get_config_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPQueueGetConfigRequest": { - "port": 4294967295 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-36-ofp_queue_get_config_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-36-ofp_queue_get_config_reply.packet.json deleted file mode 100644 index 7d0a7bbe..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-36-ofp_queue_get_config_reply.packet.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "OFPQueueGetConfigReply": { - "port": 4294967295, - "queues": [ - { - "OFPPacketQueue": { - "len": 48, - "port": 77, - "properties": [ - { - "OFPQueuePropMinRate": { - "len": 16, - "property": 1, - "rate": 10 - } - }, - { - "OFPQueuePropMaxRate": { - "len": 16, - "property": 2, - "rate": 900 - } - } - ], - "queue_id": 99 - } - }, - { - "OFPPacketQueue": { - "len": 48, - "port": 77, - "properties": [ - { - "OFPQueuePropMinRate": { - "len": 16, - "property": 1, - "rate": 100 - } - }, - { - "OFPQueuePropMaxRate": { - "len": 16, - "property": 2, - "rate": 200 - } - } - ], - "queue_id": 88 - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-37-ofp_queue_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-37-ofp_queue_stats_request.packet.json deleted file mode 100644 index 5c7479d3..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-37-ofp_queue_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPQueueStatsRequest": { - "flags": 0, - "port_no": 4294967295, - "queue_id": 4294967295 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-38-ofp_queue_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-38-ofp_queue_stats_reply.packet.json deleted file mode 100644 index fb21c96a..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-38-ofp_queue_stats_reply.packet.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "OFPStatsReply": { - "body": [ - { - "OFPQueueStats": { - "port_no": 7, - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - }, - { - "OFPQueueStats": { - "port_no": 6, - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - }, - { - "OFPQueueStats": { - "port_no": 7, - "queue_id": 2, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - } - ], - "flags": 0, - "type": 5 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-39-ofp_port_status.packet.json b/ryu/tests/unit/ofproto/json/of12/3-39-ofp_port_status.packet.json deleted file mode 100644 index a842932e..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-39-ofp_port_status.packet.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "OFPPortStatus": { - "desc": { - "OFPPort": { - "advertised": 10240, - "config": 0, - "curr": 10248, - "curr_speed": 5000, - "hw_addr": "f2:0b:a4:d0:3f:70", - "max_speed": 5000, - "name": "\u79c1\u306e\u30dd\u30fc\u30c8", - "peer": 10248, - "port_no": 7, - "state": 4, - "supported": 10248 - } - }, - "reason": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-4-ofp_packet_in.packet.json b/ryu/tests/unit/ofproto/json/of12/3-4-ofp_packet_in.packet.json deleted file mode 100644 index b211934e..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-4-ofp_packet_in.packet.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "OFPPacketIn": { - "buffer_id": 2, - "data": "////////8gukffjqCAYAAQgABgQAAfILpH346goAAAEAAAAAAAAKAAAD", - "match": { - "OFPMatch": { - "length": 80, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 6 - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "ff:ff:ff:ff:ff:ff" - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_op", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "arp_spa", - "mask": null, - "value": "10.0.0.1" - } - }, - { - "OXMTlv": { - "field": "arp_tpa", - "mask": null, - "value": "10.0.0.3" - } - }, - { - "OXMTlv": { - "field": "arp_sha", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_tha", - "mask": null, - "value": "00:00:00:00:00:00" - } - } - ], - "type": 1 - } - }, - "reason": 1, - "table_id": 1, - "total_len": 42 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-40-ofp_flow_removed.packet.json b/ryu/tests/unit/ofproto/json/of12/3-40-ofp_flow_removed.packet.json deleted file mode 100644 index 994953e6..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-40-ofp_flow_removed.packet.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "OFPFlowRemoved": { - "byte_count": 86, - "cookie": 0, - "duration_nsec": 48825000, - "duration_sec": 3, - "hard_timeout": 0, - "idle_timeout": 3, - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "packet_count": 1, - "priority": 65535, - "reason": 0, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-41-ofp_error_msg_experimenter.packet.json b/ryu/tests/unit/ofproto/json/of12/3-41-ofp_error_msg_experimenter.packet.json deleted file mode 100644 index 37bfb6a9..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-41-ofp_error_msg_experimenter.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPErrorExperimenterMsg": { - "data": "amlra2VuIGRhdGE=", - "exp_type": 60000, - "experimenter": 999999, - "type": 65535 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-5-ofp_features_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-5-ofp_features_request.packet.json deleted file mode 100644 index 8f48ad5a..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-5-ofp_features_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPFeaturesRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-59-ofp_packet_in.packet.json b/ryu/tests/unit/ofproto/json/of12/3-59-ofp_packet_in.packet.json deleted file mode 100644 index 5b365a22..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-59-ofp_packet_in.packet.json +++ /dev/null @@ -1,262 +0,0 @@ -{ - "OFPPacketIn": { - "buffer_id": 4026531840, - "data": "", - "match": { - "OFPMatch": { - "length": 294, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 84281096 - } - }, - { - "OXMTlv": { - "field": "in_phy_port", - "mask": null, - "value": 16909060 - } - }, - { - "OXMTlv": { - "field": "metadata", - "mask": null, - "value": 283686952306183 - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "ff:ff:ff:ff:ff:ff" - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 999 - } - }, - { - "OXMTlv": { - "field": "ip_dscp", - "mask": null, - "value": 9 - } - }, - { - "OXMTlv": { - "field": "ip_ecn", - "mask": null, - "value": 3 - } - }, - { - "OXMTlv": { - "field": "ip_proto", - "mask": null, - "value": 99 - } - }, - { - "OXMTlv": { - "field": "ipv4_src", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "tcp_src", - "mask": null, - "value": 8080 - } - }, - { - "OXMTlv": { - "field": "tcp_dst", - "mask": null, - "value": 18080 - } - }, - { - "OXMTlv": { - "field": "udp_src", - "mask": null, - "value": 28080 - } - }, - { - "OXMTlv": { - "field": "udp_dst", - "mask": null, - "value": 55936 - } - }, - { - "OXMTlv": { - "field": "sctp_src", - "mask": null, - "value": 48080 - } - }, - { - "OXMTlv": { - "field": "sctp_dst", - "mask": null, - "value": 59328 - } - }, - { - "OXMTlv": { - "field": "icmpv4_type", - "mask": null, - "value": 100 - } - }, - { - "OXMTlv": { - "field": "icmpv4_code", - "mask": null, - "value": 101 - } - }, - { - "OXMTlv": { - "field": "arp_op", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "arp_spa", - "mask": null, - "value": "10.0.0.1" - } - }, - { - "OXMTlv": { - "field": "arp_tpa", - "mask": null, - "value": "10.0.0.3" - } - }, - { - "OXMTlv": { - "field": "arp_sha", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_tha", - "mask": null, - "value": "00:00:00:00:00:00" - } - }, - { - "OXMTlv": { - "field": "ipv6_src", - "mask": null, - "value": "fe80::f00b:a4ff:fe48:28a5" - } - }, - { - "OXMTlv": { - "field": "ipv6_dst", - "mask": null, - "value": "fe80::f00b:a4ff:fe05:b7dc" - } - }, - { - "OXMTlv": { - "field": "ipv6_flabel", - "mask": null, - "value": 541473 - } - }, - { - "OXMTlv": { - "field": "icmpv6_type", - "mask": null, - "value": 200 - } - }, - { - "OXMTlv": { - "field": "icmpv6_code", - "mask": null, - "value": 201 - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_target", - "mask": null, - "value": "fe80::a60:6eff:fe7f:74e7" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_sll", - "mask": null, - "value": "00:00:00:00:02:9a" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_tll", - "mask": null, - "value": "00:00:00:00:02:2b" - } - }, - { - "OXMTlv": { - "field": "mpls_label", - "mask": null, - "value": 624485 - } - }, - { - "OXMTlv": { - "field": "mpls_tc", - "mask": null, - "value": 5 - } - } - ], - "type": 1 - } - }, - "reason": 0, - "table_id": 200, - "total_len": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-6-ofp_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-6-ofp_features_reply.packet.json deleted file mode 100644 index 7b9233ac..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-6-ofp_features_reply.packet.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "OFPSwitchFeatures": { - "capabilities": 79, - "datapath_id": 9210263729383, - "n_buffers": 0, - "n_tables": 255, - "ports": { - "6": { - "OFPPort": { - "advertised": 10240, - "config": 0, - "curr": 10248, - "curr_speed": 5000, - "hw_addr": "f2:0b:a4:7d:f8:ea", - "max_speed": 5000, - "name": "Port6", - "peer": 10248, - "port_no": 6, - "state": 4, - "supported": 10248 - } - }, - "7": { - "OFPPort": { - "advertised": 10240, - "config": 0, - "curr": 10248, - "curr_speed": 5000, - "hw_addr": "f2:0b:a4:d0:3f:70", - "max_speed": 5000, - "name": "Port7", - "peer": 10248, - "port_no": 7, - "state": 4, - "supported": 10248 - } - } - } - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-60-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of12/3-60-ofp_flow_mod.packet.json deleted file mode 100644 index f5de7cef..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-60-ofp_flow_mod.packet.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [], - "match": { - "OFPMatch": { - "length": 294, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 84281096 - } - }, - { - "OXMTlv": { - "field": "in_phy_port", - "mask": null, - "value": 16909060 - } - }, - { - "OXMTlv": { - "field": "metadata", - "mask": null, - "value": 283686952306183 - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "ff:ff:ff:ff:ff:ff" - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 999 - } - }, - { - "OXMTlv": { - "field": "ip_dscp", - "mask": null, - "value": 9 - } - }, - { - "OXMTlv": { - "field": "ip_ecn", - "mask": null, - "value": 3 - } - }, - { - "OXMTlv": { - "field": "ip_proto", - "mask": null, - "value": 99 - } - }, - { - "OXMTlv": { - "field": "ipv4_src", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "tcp_src", - "mask": null, - "value": 8080 - } - }, - { - "OXMTlv": { - "field": "tcp_dst", - "mask": null, - "value": 18080 - } - }, - { - "OXMTlv": { - "field": "udp_src", - "mask": null, - "value": 28080 - } - }, - { - "OXMTlv": { - "field": "udp_dst", - "mask": null, - "value": 55936 - } - }, - { - "OXMTlv": { - "field": "sctp_src", - "mask": null, - "value": 48080 - } - }, - { - "OXMTlv": { - "field": "sctp_dst", - "mask": null, - "value": 59328 - } - }, - { - "OXMTlv": { - "field": "icmpv4_type", - "mask": null, - "value": 100 - } - }, - { - "OXMTlv": { - "field": "icmpv4_code", - "mask": null, - "value": 101 - } - }, - { - "OXMTlv": { - "field": "arp_op", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "arp_spa", - "mask": null, - "value": "10.0.0.1" - } - }, - { - "OXMTlv": { - "field": "arp_tpa", - "mask": null, - "value": "10.0.0.3" - } - }, - { - "OXMTlv": { - "field": "arp_sha", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_tha", - "mask": null, - "value": "00:00:00:00:00:00" - } - }, - { - "OXMTlv": { - "field": "ipv6_src", - "mask": null, - "value": "fe80::f00b:a4ff:fe48:28a5" - } - }, - { - "OXMTlv": { - "field": "ipv6_dst", - "mask": null, - "value": "fe80::f00b:a4ff:fe05:b7dc" - } - }, - { - "OXMTlv": { - "field": "ipv6_flabel", - "mask": null, - "value": 541473 - } - }, - { - "OXMTlv": { - "field": "icmpv6_type", - "mask": null, - "value": 200 - } - }, - { - "OXMTlv": { - "field": "icmpv6_code", - "mask": null, - "value": 201 - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_target", - "mask": null, - "value": "fe80::a60:6eff:fe7f:74e7" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_sll", - "mask": null, - "value": "00:00:00:00:02:9a" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_tll", - "mask": null, - "value": "00:00:00:00:02:2b" - } - }, - { - "OXMTlv": { - "field": "mpls_label", - "mask": null, - "value": 624485 - } - }, - { - "OXMTlv": { - "field": "mpls_tc", - "mask": null, - "value": 5 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-61-ofp_group_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-61-ofp_group_stats_request.packet.json deleted file mode 100644 index 2d1afdc0..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-61-ofp_group_stats_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGroupStatsRequest": { - "flags": 0, - "group_id": 4294967292 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-62-ofp_group_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-62-ofp_group_stats_reply.packet.json deleted file mode 100644 index 8cb8f8ce..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-62-ofp_group_stats_reply.packet.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "OFPStatsReply": { - "body": [ - { - "OFPGroupStats": { - "bucket_counters": [ - { - "OFPBucketCounter": { - "byte_count": 2345, - "packet_count": 234 - } - } - ], - "byte_count": 12345, - "group_id": 1, - "length": 48, - "packet_count": 123, - "ref_count": 2 - } - } - ], - "flags": 0, - "type": 6 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-7-ofp_set_config.packet.json b/ryu/tests/unit/ofproto/json/of12/3-7-ofp_set_config.packet.json deleted file mode 100644 index cd5398b7..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-7-ofp_set_config.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPSetConfig": { - "flags": 0, - "miss_send_len": 128 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-8-ofp_get_config_request.packet.json b/ryu/tests/unit/ofproto/json/of12/3-8-ofp_get_config_request.packet.json deleted file mode 100644 index 06fe51f4..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-8-ofp_get_config_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPGetConfigRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of12/3-9-ofp_get_config_reply.packet.json b/ryu/tests/unit/ofproto/json/of12/3-9-ofp_get_config_reply.packet.json deleted file mode 100644 index 62b37b4d..00000000 --- a/ryu/tests/unit/ofproto/json/of12/3-9-ofp_get_config_reply.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGetConfigReply": { - "flags": 0, - "miss_send_len": 128 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_group_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_group_stats_request.packet.json deleted file mode 100644 index 542ae726..00000000 --- a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_group_stats_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGroupStatsRequest": { - "flags": 0, - "group_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_port_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_port_stats_request.packet.json deleted file mode 100644 index 884c5fd2..00000000 --- a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_port_stats_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPPortStatsRequest": { - "flags": 0, - "port_no": 7 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json b/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json deleted file mode 100644 index a50308c0..00000000 --- a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPQueueGetConfigRequest": { - "port": 4294967295 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json b/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json deleted file mode 100644 index 77535806..00000000 --- a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPQueueStatsRequest": { - "flags": 0, - "port_no": 7, - "queue_id": 4294967295 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json b/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json deleted file mode 100644 index 66127d31..00000000 --- a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPQueueStatsRequest": { - "flags": 0, - "port_no": 7, - "queue_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json b/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json deleted file mode 100644 index 1a798837..00000000 --- a/ryu/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPQueueStatsRequest": { - "flags": 0, - "port_no": 4294967295, - "queue_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet.json b/ryu/tests/unit/ofproto/json/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet.json deleted file mode 100644 index b859650d..00000000 --- a/ryu/tests/unit/ofproto/json/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "OFPPacketOut": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 4294967292, - "type": 0 - } - } - ], - "actions_len": 16, - "buffer_id": 4294967295, - "data": { - "Packet": { - "protocols": [ - { - "ethernet": { - "dst": "f2:0b:a4:d0:3f:70", - "ethertype": 2048, - "src": "f2:0b:a4:7d:f8:ea" - } - }, - { - "ipv4": { - "csum": 44939, - "dst": "10.0.0.2", - "flags": 0, - "header_length": 5, - "identification": 63514, - "offset": 0, - "option": null, - "proto": 1, - "src": "10.0.0.1", - "tos": 0, - "total_length": 84, - "ttl": 255, - "version": 4 - } - }, - { - "icmp": { - "code": 0, - "csum": 520, - "data": { - "echo": { - "data": "MdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", - "id": 63328, - "seq": 0 - } - }, - "type": 8 - } - } - ] - } - }, - "in_port": 4294967293 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-0-ofp_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-0-ofp_desc_reply.packet.json deleted file mode 100644 index 26e5dc2d..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-0-ofp_desc_reply.packet.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "OFPDescStatsReply": { - "body": { - "OFPDescStats": { - "dp_desc": "dp", - "hw_desc": "hw", - "mfr_desc": "mfr", - "serial_num": "serial", - "sw_desc": "sw" - } - }, - "flags": 0, - "type": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-1-ofp_packet_out.packet.json b/ryu/tests/unit/ofproto/json/of13/4-1-ofp_packet_out.packet.json deleted file mode 100644 index efb39e2d..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-1-ofp_packet_out.packet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "OFPPacketOut": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 4294967292, - "type": 0 - } - } - ], - "actions_len": 16, - "buffer_id": 4294967295, - "data": "8guk0D9w8gukffjqCABFAABU+BoAAP8Br4sKAAABCgAAAggAAgj3YAAAMdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", - "in_port": 4294967293 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-10-ofp_hello.packet.json b/ryu/tests/unit/ofproto/json/of13/4-10-ofp_hello.packet.json deleted file mode 100644 index d03ff84b..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-10-ofp_hello.packet.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "OFPHello": { - "elements": [ - { - "OFPHelloElemVersionBitmap": { - "length": 8, - "type": 1, - "versions": [ - 1, - 2, - 3, - 9, - 10, - 30 - ] - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-11-ofp_flow_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-11-ofp_flow_stats_request.packet.json deleted file mode 100644 index 2baccad4..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-11-ofp_flow_stats_request.packet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "OFPFlowStatsRequest": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 0, - "type": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-12-ofp_flow_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-12-ofp_flow_stats_reply.packet.json deleted file mode 100644 index 04339dc3..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-12-ofp_flow_stats_reply.packet.json +++ /dev/null @@ -1,343 +0,0 @@ -{ - "OFPFlowStatsReply": { - "body": [ - { - "OFPFlowStats": { - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115277000, - "duration_sec": 358, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [], - "length": 56, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "packet_count": 0, - "priority": 65535, - "table_id": 0 - } - }, - { - "OFPFlowStats": { - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115055000, - "duration_sec": 358, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 0, - "port": 4294967290, - "type": 0 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "length": 88, - "match": { - "OFPMatch": { - "length": 10, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - } - ], - "type": 1 - } - }, - "packet_count": 0, - "priority": 65534, - "table_id": 0 - } - }, - { - "OFPFlowStats": { - "byte_count": 238, - "cookie": 0, - "duration_nsec": 511582000, - "duration_sec": 316220, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 1, - "type": 1 - } - } - ], - "length": 80, - "match": { - "OFPMatch": { - "length": 22, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 6 - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "packet_count": 3, - "priority": 123, - "table_id": 0 - } - }, - { - "OFPFlowStats": { - "byte_count": 98, - "cookie": 0, - "duration_nsec": 980901000, - "duration_sec": 313499, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 258 - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionCopyTtlOut": { - "len": 8, - "type": 11 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionPopPbb": { - "len": 8, - "type": 27 - } - }, - { - "OFPActionPushPbb": { - "ethertype": 4660, - "len": 8, - "type": 26 - } - }, - { - "OFPActionPopMpls": { - "ethertype": 39030, - "len": 8, - "type": 20 - } - }, - { - "OFPActionPushMpls": { - "ethertype": 34887, - "len": 8, - "type": 19 - } - }, - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionPushVlan": { - "ethertype": 33024, - "len": 8, - "type": 17 - } - }, - { - "OFPActionDecMplsTtl": { - "len": 8, - "type": 16 - } - }, - { - "OFPActionSetMplsTtl": { - "len": 8, - "mpls_ttl": 10, - "type": 15 - } - }, - { - "OFPActionDecNwTtl": { - "len": 8, - "type": 24 - } - }, - { - "OFPActionSetNwTtl": { - "len": 8, - "nw_ttl": 10, - "type": 23 - } - }, - { - "OFPActionSetQueue": { - "len": 8, - "queue_id": 3, - "type": 21 - } - }, - { - "OFPActionGroup": { - "group_id": 99, - "len": 8, - "type": 22 - } - }, - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 6, - "type": 0 - } - }, - { - "OFPActionExperimenterUnknown": { - "len": 16, - "data": "ZXhwX2RhdGE=", - "experimenter": 98765432, - "type": 65535 - } - }, - { - "NXActionUnknown": { - "len": 16, - "data": "cF9kYXRh", - "experimenter": 8992, - "type": 65535, - "subtype": 25976 - } - } - ], - "len": 192, - "type": 3 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "01:02:03:04:05:06" - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "pbb_uca", - "mask": null, - "value": 1 - } - }, - "len": 16, - "type": 25 - } - } - ], - "len": 40, - "type": 4 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 4294967293, - "type": 0 - } - } - ], - "len": 24, - "type": 3 - } - } - ], - "length": 312, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "packet_count": 1, - "priority": 0, - "table_id": 0 - } - } - ], - "flags": 0, - "type": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-13-ofp_echo_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-13-ofp_echo_request.packet.json deleted file mode 100644 index e1f2af42..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-13-ofp_echo_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPEchoRequest": { - "data": "aG9nZQ==" - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-14-ofp_echo_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-14-ofp_echo_reply.packet.json deleted file mode 100644 index 2a573634..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-14-ofp_echo_reply.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPEchoReply": { - "data": "aG9nZQ==" - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-15-ofp_error_msg.packet.json b/ryu/tests/unit/ofproto/json/of13/4-15-ofp_error_msg.packet.json deleted file mode 100644 index e9ab2b5e..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-15-ofp_error_msg.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPErrorMsg": { - "code": 11, - "data": "ZnVnYWZ1Z2E=", - "type": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-16-ofp_experimenter.packet.json b/ryu/tests/unit/ofproto/json/of13/4-16-ofp_experimenter.packet.json deleted file mode 100644 index 4ad13c73..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-16-ofp_experimenter.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPExperimenter": { - "data": "bmF6bw==", - "exp_type": 123456789, - "experimenter": 98765432 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-17-ofp_barrier_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-17-ofp_barrier_request.packet.json deleted file mode 100644 index 2aae9ec3..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-17-ofp_barrier_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPBarrierRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-18-ofp_barrier_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-18-ofp_barrier_reply.packet.json deleted file mode 100644 index 11f8cfcc..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-18-ofp_barrier_reply.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPBarrierReply": {} -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-19-ofp_role_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-19-ofp_role_request.packet.json deleted file mode 100644 index 5cdbc2f1..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-19-ofp_role_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPRoleRequest": { - "generation_id": 17294086455919964160, - "role": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-2-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/4-2-ofp_flow_mod.packet.json deleted file mode 100644 index 0e3a2cc3..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-2-ofp_flow_mod.packet.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 258 - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionCopyTtlOut": { - "len": 8, - "type": 11 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionPopPbb": { - "len": 8, - "type": 27 - } - }, - { - "OFPActionPushPbb": { - "ethertype": 4660, - "len": 8, - "type": 26 - } - }, - { - "OFPActionPopMpls": { - "ethertype": 39030, - "len": 8, - "type": 20 - } - }, - { - "OFPActionPushMpls": { - "ethertype": 34887, - "len": 8, - "type": 19 - } - }, - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionPushVlan": { - "ethertype": 33024, - "len": 8, - "type": 17 - } - }, - { - "OFPActionDecMplsTtl": { - "len": 8, - "type": 16 - } - }, - { - "OFPActionSetMplsTtl": { - "len": 8, - "mpls_ttl": 10, - "type": 15 - } - }, - { - "OFPActionDecNwTtl": { - "len": 8, - "type": 24 - } - }, - { - "OFPActionSetNwTtl": { - "len": 8, - "nw_ttl": 10, - "type": 23 - } - }, - { - "OFPActionExperimenterUnknown": { - "data": "AAECAwQFBgc=", - "experimenter": 101, - "len": 16, - "type": 65535 - } - }, - { - "OFPActionSetQueue": { - "len": 8, - "queue_id": 3, - "type": 21 - } - }, - { - "OFPActionGroup": { - "group_id": 99, - "len": 8, - "type": 22 - } - }, - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 6, - "type": 0 - } - } - ], - "len": 176, - "type": 3 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "01:02:03:04:05:06" - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "pbb_uca", - "mask": null, - "value": 1 - } - }, - "len": 16, - "type": 25 - } - } - ], - "len": 40, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-20-ofp_role_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-20-ofp_role_reply.packet.json deleted file mode 100644 index 3fd9a13f..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-20-ofp_role_reply.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPRoleReply": { - "generation_id": 17294086455919964160, - "role": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-21-ofp_group_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/4-21-ofp_group_mod.packet.json deleted file mode 100644 index 1a3767da..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-21-ofp_group_mod.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "OFPGroupMod": { - "buckets": [ - { - "OFPBucket": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 2, - "type": 0 - } - } - ], - "len": 32, - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - } - ], - "command": 0, - "group_id": 1, - "type": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-22-ofp_port_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/4-22-ofp_port_mod.packet.json deleted file mode 100644 index ecb8d66f..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-22-ofp_port_mod.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "OFPPortMod": { - "advertise": 4096, - "config": 0, - "hw_addr": "00:11:00:00:11:11", - "mask": 0, - "port_no": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-23-ofp_table_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/4-23-ofp_table_mod.packet.json deleted file mode 100644 index 5019c29b..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-23-ofp_table_mod.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPTableMod": { - "config": 0, - "table_id": 255 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-24-ofp_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-24-ofp_desc_request.packet.json deleted file mode 100644 index 5b23f8bc..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-24-ofp_desc_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPDescStatsRequest": { - "flags": 0, - "type": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-25-ofp_aggregate_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-25-ofp_aggregate_stats_request.packet.json deleted file mode 100644 index 248131fd..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-25-ofp_aggregate_stats_request.packet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "OFPAggregateStatsRequest": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 255, - "type": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-26-ofp_aggregate_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-26-ofp_aggregate_stats_reply.packet.json deleted file mode 100644 index 153ad4f0..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-26-ofp_aggregate_stats_reply.packet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "OFPAggregateStatsReply": { - "body": { - "OFPAggregateStats": { - "byte_count": 574, - "flow_count": 6, - "packet_count": 7 - } - }, - "flags": 0, - "type": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-27-ofp_table_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-27-ofp_table_stats_request.packet.json deleted file mode 100644 index 1f965d77..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-27-ofp_table_stats_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPTableStatsRequest": { - "flags": 0, - "type": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-28-ofp_table_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-28-ofp_table_stats_reply.packet.json deleted file mode 100644 index 94801adb..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-28-ofp_table_stats_reply.packet.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "OFPTableStatsReply": { - "body": [ - { - "OFPTableStats": { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 0 - } - }, - { - "OFPTableStats": { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 1 - } - } - ], - "flags": 0, - "type": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-29-ofp_port_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-29-ofp_port_stats_request.packet.json deleted file mode 100644 index 5228710d..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-29-ofp_port_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPPortStatsRequest": { - "flags": 0, - "port_no": 4294967295, - "type": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-3-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/4-3-ofp_flow_mod.packet.json deleted file mode 100644 index cd68b51f..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-3-ofp_flow_mod.packet.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 1, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 22, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 6 - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-30-ofp_port_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-30-ofp_port_stats_reply.packet.json deleted file mode 100644 index 01157449..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-30-ofp_port_stats_reply.packet.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "OFPPortStatsReply": { - "body": [ - { - "OFPPortStats": { - "collisions": 0, - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 7, - "rx_bytes": 0, - "rx_crc_err": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "rx_packets": 0, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - }, - { - "OFPPortStats": { - "collisions": 0, - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 6, - "rx_bytes": 336, - "rx_crc_err": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "rx_packets": 4, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - } - ], - "flags": 0, - "type": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-31-ofp_group_features_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-31-ofp_group_features_request.packet.json deleted file mode 100644 index edba5dc5..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-31-ofp_group_features_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGroupFeaturesStatsRequest": { - "flags": 0, - "type": 8 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-32-ofp_group_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-32-ofp_group_features_reply.packet.json deleted file mode 100644 index f059f994..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-32-ofp_group_features_reply.packet.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "OFPGroupFeaturesStatsReply": { - "body": { - "OFPGroupFeaturesStats": { - "actions": [ - 67082241, - 67082241, - 67082241, - 67082241 - ], - "capabilities": 5, - "max_groups": [ - 16777216, - 16777216, - 16777216, - 16777216 - ], - "types": 15 - } - }, - "flags": 0, - "type": 8 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-33-ofp_group_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-33-ofp_group_desc_request.packet.json deleted file mode 100644 index bea140c2..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-33-ofp_group_desc_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGroupDescStatsRequest": { - "flags": 0, - "type": 7 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-34-ofp_group_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-34-ofp_group_desc_reply.packet.json deleted file mode 100644 index c30d7da6..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-34-ofp_group_desc_reply.packet.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "OFPGroupDescStatsReply": { - "body": [ - { - "OFPGroupDescStats": { - "buckets": [ - { - "OFPBucket": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 2, - "type": 0 - } - } - ], - "len": 32, - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - } - ], - "group_id": 1, - "length": 40, - "type": 0 - } - } - ], - "flags": 0, - "type": 7 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-35-ofp_queue_get_config_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-35-ofp_queue_get_config_request.packet.json deleted file mode 100644 index a50308c0..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-35-ofp_queue_get_config_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPQueueGetConfigRequest": { - "port": 4294967295 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-36-ofp_queue_get_config_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-36-ofp_queue_get_config_reply.packet.json deleted file mode 100644 index ce1f4123..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-36-ofp_queue_get_config_reply.packet.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "OFPQueueGetConfigReply": { - "port": 4294967295, - "queues": [ - { - "OFPPacketQueue": { - "len": 64, - "port": 77, - "properties": [ - { - "OFPQueuePropMinRate": { - "len": 16, - "property": 1, - "rate": 10 - } - }, - { - "OFPQueuePropMaxRate": { - "len": 16, - "property": 2, - "rate": 900 - } - }, - { - "OFPQueuePropExperimenter": { - "data": [], - "experimenter": 999, - "len": 16, - "property": 65535 - } - } - ], - "queue_id": 99 - } - }, - { - "OFPPacketQueue": { - "len": 65, - "port": 77, - "properties": [ - { - "OFPQueuePropMinRate": { - "len": 16, - "property": 1, - "rate": 100 - } - }, - { - "OFPQueuePropMaxRate": { - "len": 16, - "property": 2, - "rate": 200 - } - }, - { - "OFPQueuePropExperimenter": { - "experimenter": 999, - "data": [ - 1 - ], - "len": 17, - "property": 65535 - } - } - ], - "queue_id": 88 - } - }, - { - "OFPPacketQueue": { - "len": 66, - "port": 77, - "properties": [ - { - "OFPQueuePropMinRate": { - "len": 16, - "property": 1, - "rate": 200 - } - }, - { - "OFPQueuePropMaxRate": { - "len": 16, - "property": 2, - "rate": 400 - } - }, - { - "OFPQueuePropExperimenter": { - "experimenter": 999, - "data": [ - 1, - 2 - ], - "len": 18, - "property": 65535 - } - } - ], - "queue_id": 77 - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-37-ofp_queue_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-37-ofp_queue_stats_request.packet.json deleted file mode 100644 index 7a12acc3..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-37-ofp_queue_stats_request.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPQueueStatsRequest": { - "flags": 0, - "port_no": 4294967295, - "queue_id": 4294967295, - "type": 5 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-38-ofp_queue_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-38-ofp_queue_stats_reply.packet.json deleted file mode 100644 index 80b59cf2..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-38-ofp_queue_stats_reply.packet.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "OFPQueueStatsReply": { - "body": [ - { - "OFPQueueStats": { - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 7, - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - }, - { - "OFPQueueStats": { - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 6, - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - }, - { - "OFPQueueStats": { - "duration_nsec": 0, - "duration_sec": 0, - "port_no": 7, - "queue_id": 2, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - } - ], - "flags": 0, - "type": 5 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-39-ofp_port_status.packet.json b/ryu/tests/unit/ofproto/json/of13/4-39-ofp_port_status.packet.json deleted file mode 100644 index a842932e..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-39-ofp_port_status.packet.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "OFPPortStatus": { - "desc": { - "OFPPort": { - "advertised": 10240, - "config": 0, - "curr": 10248, - "curr_speed": 5000, - "hw_addr": "f2:0b:a4:d0:3f:70", - "max_speed": 5000, - "name": "\u79c1\u306e\u30dd\u30fc\u30c8", - "peer": 10248, - "port_no": 7, - "state": 4, - "supported": 10248 - } - }, - "reason": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-4-ofp_packet_in.packet.json b/ryu/tests/unit/ofproto/json/of13/4-4-ofp_packet_in.packet.json deleted file mode 100644 index b3051d1c..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-4-ofp_packet_in.packet.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "OFPPacketIn": { - "buffer_id": 2, - "cookie": 283686884868096, - "data": "////////8gukffjqCAYAAQgABgQAAfILpH346goAAAEAAAAAAAAKAAAD", - "match": { - "OFPMatch": { - "length": 80, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 6 - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "ff:ff:ff:ff:ff:ff" - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_op", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "arp_spa", - "mask": null, - "value": "10.0.0.1" - } - }, - { - "OXMTlv": { - "field": "arp_tpa", - "mask": null, - "value": "10.0.0.3" - } - }, - { - "OXMTlv": { - "field": "arp_sha", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_tha", - "mask": null, - "value": "00:00:00:00:00:00" - } - } - ], - "type": 1 - } - }, - "reason": 1, - "table_id": 1, - "total_len": 42 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-40-ofp_flow_removed.packet.json b/ryu/tests/unit/ofproto/json/of13/4-40-ofp_flow_removed.packet.json deleted file mode 100644 index 994953e6..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-40-ofp_flow_removed.packet.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "OFPFlowRemoved": { - "byte_count": 86, - "cookie": 0, - "duration_nsec": 48825000, - "duration_sec": 3, - "hard_timeout": 0, - "idle_timeout": 3, - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "packet_count": 1, - "priority": 65535, - "reason": 0, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-41-ofp_error_msg_experimenter.packet.json b/ryu/tests/unit/ofproto/json/of13/4-41-ofp_error_msg_experimenter.packet.json deleted file mode 100644 index 37bfb6a9..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-41-ofp_error_msg_experimenter.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPErrorExperimenterMsg": { - "data": "amlra2VuIGRhdGE=", - "exp_type": 60000, - "experimenter": 999999, - "type": 65535 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-42-ofp_get_async_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-42-ofp_get_async_request.packet.json deleted file mode 100644 index 7daa5a0f..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-42-ofp_get_async_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPGetAsyncRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-43-ofp_get_async_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-43-ofp_get_async_reply.packet.json deleted file mode 100644 index abccf043..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-43-ofp_get_async_reply.packet.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "OFPGetAsyncReply": { - "flow_removed_mask": [ - 15, - 3 - ], - "packet_in_mask": [ - 5, - 1 - ], - "port_status_mask": [ - 7, - 3 - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-44-ofp_set_async.packet.json b/ryu/tests/unit/ofproto/json/of13/4-44-ofp_set_async.packet.json deleted file mode 100644 index da85b880..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-44-ofp_set_async.packet.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "OFPSetAsync": { - "flow_removed_mask": [ - 15, - 3 - ], - "packet_in_mask": [ - 5, - 1 - ], - "port_status_mask": [ - 7, - 3 - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-45-ofp_meter_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/4-45-ofp_meter_mod.packet.json deleted file mode 100644 index eba4540a..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-45-ofp_meter_mod.packet.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "OFPMeterMod": { - "bands": [ - { - "OFPMeterBandDrop": { - "burst_size": 10, - "len": 16, - "rate": 1000, - "type": 1 - } - }, - { - "OFPMeterBandDscpRemark": { - "burst_size": 10, - "len": 16, - "prec_level": 1, - "rate": 1000, - "type": 2 - } - }, - { - "OFPMeterBandExperimenter": { - "burst_size": 10, - "experimenter": 999, - "len": 16, - "rate": 1000, - "type": 65535 - } - } - ], - "command": 0, - "flags": 14, - "meter_id": 100 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-46-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/4-46-ofp_flow_mod.packet.json deleted file mode 100644 index f4e59c76..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-46-ofp_flow_mod.packet.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionMeter": { - "len": 8, - "meter_id": 1, - "type": 6 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 6, - "type": 0 - } - } - ], - "len": 24, - "type": 3 - } - } - ], - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-47-ofp_meter_config_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-47-ofp_meter_config_request.packet.json deleted file mode 100644 index 4703588e..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-47-ofp_meter_config_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPMeterConfigStatsRequest": { - "flags": 0, - "meter_id": 4294967295, - "type": 10 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-48-ofp_meter_config_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-48-ofp_meter_config_reply.packet.json deleted file mode 100644 index 08cc97e6..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-48-ofp_meter_config_reply.packet.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "OFPMeterConfigStatsReply": { - "body": [ - { - "OFPMeterConfigStats": { - "bands": [ - { - "OFPMeterBandDrop": { - "burst_size": 10, - "len": 16, - "rate": 1000, - "type": 1 - } - } - ], - "flags": 14, - "length": 24, - "meter_id": 100 - } - } - ], - "flags": 0, - "type": 10 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-49-ofp_meter_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-49-ofp_meter_stats_request.packet.json deleted file mode 100644 index 8d45799b..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-49-ofp_meter_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPMeterStatsRequest": { - "flags": 0, - "meter_id": 4294967295, - "type": 9 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-5-ofp_features_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-5-ofp_features_request.packet.json deleted file mode 100644 index 8f48ad5a..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-5-ofp_features_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPFeaturesRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-50-ofp_meter_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-50-ofp_meter_stats_reply.packet.json deleted file mode 100644 index b4fd8226..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-50-ofp_meter_stats_reply.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "OFPMeterStatsReply": { - "body": [ - { - "OFPMeterStats": { - "band_stats": [ - { - "OFPMeterBandStats": { - "byte_band_count": 0, - "packet_band_count": 0 - } - } - ], - "byte_in_count": 0, - "duration_nsec": 480000, - "duration_sec": 0, - "flow_count": 0, - "len": 56, - "meter_id": 100, - "packet_in_count": 0 - } - } - ], - "flags": 0, - "type": 9 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-51-ofp_meter_features_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-51-ofp_meter_features_request.packet.json deleted file mode 100644 index 7363a342..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-51-ofp_meter_features_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPMeterFeaturesStatsRequest": { - "flags": 0, - "type": 11 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-52-ofp_meter_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-52-ofp_meter_features_reply.packet.json deleted file mode 100644 index e3f6918f..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-52-ofp_meter_features_reply.packet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "OFPMeterFeaturesStatsReply": { - "body": [ - { - "OFPMeterFeaturesStats": { - "band_types": 2147483654, - "capabilities": 15, - "max_bands": 255, - "max_color": 0, - "max_meter": 16777216 - } - } - ], - "flags": 0, - "type": 11 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-53-ofp_port_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-53-ofp_port_desc_request.packet.json deleted file mode 100644 index f166c34a..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-53-ofp_port_desc_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPPortDescStatsRequest": { - "flags": 0, - "type": 13 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-54-ofp_port_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-54-ofp_port_desc_reply.packet.json deleted file mode 100644 index 5da460a0..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-54-ofp_port_desc_reply.packet.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "OFPPortDescStatsReply": { - "body": [ - { - "OFPPort": { - "advertised": 10240, - "config": 0, - "curr": 10248, - "curr_speed": 5000, - "hw_addr": "f2:0b:a4:d0:3f:70", - "max_speed": 5000, - "name": "Port7", - "peer": 10248, - "port_no": 7, - "state": 4, - "supported": 10248 - } - }, - { - "OFPPort": { - "advertised": 10240, - "config": 0, - "curr": 10248, - "curr_speed": 5000, - "hw_addr": "f2:0b:a4:7d:f8:ea", - "max_speed": 5000, - "name": "Port6", - "peer": 10248, - "port_no": 6, - "state": 4, - "supported": 10248 - } - } - ], - "flags": 0, - "type": 13 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-55-ofp_table_features_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-55-ofp_table_features_request.packet.json deleted file mode 100644 index 2a1a4308..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-55-ofp_table_features_request.packet.json +++ /dev/null @@ -1,15945 +0,0 @@ -{ - "OFPTableFeaturesStatsRequest": { - "body": [ - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1168, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x00", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 258, - "table_ids": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65534 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65534 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65534 - } - } - ], - "table_id": 0 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1112, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x01", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 257, - "table_ids": [ - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 1 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x02", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 256, - "table_ids": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 2 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x03", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 255, - "table_ids": [ - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 3 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x04", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 254, - "table_ids": [ - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 4 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x05", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 253, - "table_ids": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 5 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x06", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 252, - "table_ids": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 6 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x07", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 251, - "table_ids": [ - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 7 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x08", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 250, - "table_ids": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 8 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x09", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 249, - "table_ids": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 9 - } - } - ], - "flags": 1, - "type": 12 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json deleted file mode 100644 index ea056e8f..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json +++ /dev/null @@ -1,15945 +0,0 @@ -{ - "OFPTableFeaturesStatsReply": { - "body": [ - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1168, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 258, - "table_ids": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65534 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65534 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65534 - } - } - ], - "table_id": 0 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1112, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x01", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 257, - "table_ids": [ - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 1 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x02", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 256, - "table_ids": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 2 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x03", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 255, - "table_ids": [ - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 3 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x04", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 254, - "table_ids": [ - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 4 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x05", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 253, - "table_ids": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 5 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x06", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 252, - "table_ids": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 6 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x07", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 251, - "table_ids": [ - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 7 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x08", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 250, - "table_ids": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 8 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x09", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 249, - "table_ids": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 9 - } - } - ], - "flags": 1, - "type": 12 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-57-ofp_group_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-57-ofp_group_stats_request.packet.json deleted file mode 100644 index b200a81c..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-57-ofp_group_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPGroupStatsRequest": { - "flags": 0, - "group_id": 4294967292, - "type": 6 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-58-ofp_group_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-58-ofp_group_stats_reply.packet.json deleted file mode 100644 index cb979e54..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-58-ofp_group_stats_reply.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "OFPGroupStatsReply": { - "body": [ - { - "OFPGroupStats": { - "bucket_stats": [ - { - "OFPBucketCounter": { - "byte_count": 2345, - "packet_count": 234 - } - } - ], - "byte_count": 12345, - "duration_nsec": 609036000, - "duration_sec": 9, - "group_id": 1, - "length": 56, - "packet_count": 123, - "ref_count": 2 - } - } - ], - "flags": 0, - "type": 6 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-59-ofp_packet_in.packet.json b/ryu/tests/unit/ofproto/json/of13/4-59-ofp_packet_in.packet.json deleted file mode 100644 index c5837d26..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-59-ofp_packet_in.packet.json +++ /dev/null @@ -1,312 +0,0 @@ -{ - "OFPPacketIn": { - "buffer_id": 4026531840, - "cookie": 283686884868096, - "data": "", - "match": { - "OFPMatch": { - "length": 351, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 84281096 - } - }, - { - "OXMTlv": { - "field": "in_phy_port", - "mask": null, - "value": 16909060 - } - }, - { - "OXMTlv": { - "field": "metadata", - "mask": null, - "value": 283686952306183 - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "ff:ff:ff:ff:ff:ff" - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 999 - } - }, - { - "OXMTlv": { - "field": "ip_dscp", - "mask": null, - "value": 9 - } - }, - { - "OXMTlv": { - "field": "ip_ecn", - "mask": null, - "value": 3 - } - }, - { - "OXMTlv": { - "field": "ip_proto", - "mask": null, - "value": 99 - } - }, - { - "OXMTlv": { - "field": "ipv4_src", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "tcp_src", - "mask": null, - "value": 8080 - } - }, - { - "OXMTlv": { - "field": "tcp_dst", - "mask": null, - "value": 18080 - } - }, - { - "OXMTlv": { - "field": "udp_src", - "mask": null, - "value": 28080 - } - }, - { - "OXMTlv": { - "field": "udp_dst", - "mask": null, - "value": 55936 - } - }, - { - "OXMTlv": { - "field": "sctp_src", - "mask": null, - "value": 48080 - } - }, - { - "OXMTlv": { - "field": "sctp_dst", - "mask": null, - "value": 59328 - } - }, - { - "OXMTlv": { - "field": "icmpv4_type", - "mask": null, - "value": 100 - } - }, - { - "OXMTlv": { - "field": "icmpv4_code", - "mask": null, - "value": 101 - } - }, - { - "OXMTlv": { - "field": "arp_op", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "arp_spa", - "mask": null, - "value": "10.0.0.1" - } - }, - { - "OXMTlv": { - "field": "arp_tpa", - "mask": null, - "value": "10.0.0.3" - } - }, - { - "OXMTlv": { - "field": "arp_sha", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_tha", - "mask": null, - "value": "00:00:00:00:00:00" - } - }, - { - "OXMTlv": { - "field": "ipv6_src", - "mask": null, - "value": "fe80::f00b:a4ff:fe48:28a5" - } - }, - { - "OXMTlv": { - "field": "ipv6_dst", - "mask": null, - "value": "fe80::f00b:a4ff:fe05:b7dc" - } - }, - { - "OXMTlv": { - "field": "ipv6_flabel", - "mask": null, - "value": 541473 - } - }, - { - "OXMTlv": { - "field": "icmpv6_type", - "mask": null, - "value": 200 - } - }, - { - "OXMTlv": { - "field": "icmpv6_code", - "mask": null, - "value": 201 - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_target", - "mask": null, - "value": "fe80::a60:6eff:fe7f:74e7" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_sll", - "mask": null, - "value": "00:00:00:00:02:9a" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_tll", - "mask": null, - "value": "00:00:00:00:02:2b" - } - }, - { - "OXMTlv": { - "field": "mpls_label", - "mask": null, - "value": 624485 - } - }, - { - "OXMTlv": { - "field": "mpls_tc", - "mask": null, - "value": 5 - } - }, - { - "OXMTlv": { - "field": "mpls_bos", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "pbb_isid", - "mask": null, - "value": 11259375 - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 651061555542690057 - } - }, - { - "OXMTlv": { - "field": "ipv6_exthdr", - "mask": null, - "value": 500 - } - }, - { - "OXMTlv": { - "field": "pbb_uca", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "1.2.3.4" - } - } - ], - "type": 1 - } - }, - "reason": 0, - "table_id": 200, - "total_len": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-6-ofp_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-6-ofp_features_reply.packet.json deleted file mode 100644 index 12e8744a..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-6-ofp_features_reply.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "OFPSwitchFeatures": { - "auxiliary_id": 99, - "capabilities": 79, - "datapath_id": 9210263729383, - "n_buffers": 0, - "n_tables": 255 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-60-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/4-60-ofp_flow_mod.packet.json deleted file mode 100644 index 1c594e8f..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-60-ofp_flow_mod.packet.json +++ /dev/null @@ -1,318 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [], - "match": { - "OFPMatch": { - "length": 351, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 84281096 - } - }, - { - "OXMTlv": { - "field": "in_phy_port", - "mask": null, - "value": 16909060 - } - }, - { - "OXMTlv": { - "field": "metadata", - "mask": null, - "value": 283686952306183 - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "ff:ff:ff:ff:ff:ff" - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 999 - } - }, - { - "OXMTlv": { - "field": "ip_dscp", - "mask": null, - "value": 9 - } - }, - { - "OXMTlv": { - "field": "ip_ecn", - "mask": null, - "value": 3 - } - }, - { - "OXMTlv": { - "field": "ip_proto", - "mask": null, - "value": 99 - } - }, - { - "OXMTlv": { - "field": "ipv4_src", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "tcp_src", - "mask": null, - "value": 8080 - } - }, - { - "OXMTlv": { - "field": "tcp_dst", - "mask": null, - "value": 18080 - } - }, - { - "OXMTlv": { - "field": "udp_src", - "mask": null, - "value": 28080 - } - }, - { - "OXMTlv": { - "field": "udp_dst", - "mask": null, - "value": 55936 - } - }, - { - "OXMTlv": { - "field": "sctp_src", - "mask": null, - "value": 48080 - } - }, - { - "OXMTlv": { - "field": "sctp_dst", - "mask": null, - "value": 59328 - } - }, - { - "OXMTlv": { - "field": "icmpv4_type", - "mask": null, - "value": 100 - } - }, - { - "OXMTlv": { - "field": "icmpv4_code", - "mask": null, - "value": 101 - } - }, - { - "OXMTlv": { - "field": "arp_op", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "arp_spa", - "mask": null, - "value": "10.0.0.1" - } - }, - { - "OXMTlv": { - "field": "arp_tpa", - "mask": null, - "value": "10.0.0.3" - } - }, - { - "OXMTlv": { - "field": "arp_sha", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_tha", - "mask": null, - "value": "00:00:00:00:00:00" - } - }, - { - "OXMTlv": { - "field": "ipv6_src", - "mask": null, - "value": "fe80::f00b:a4ff:fe48:28a5" - } - }, - { - "OXMTlv": { - "field": "ipv6_dst", - "mask": null, - "value": "fe80::f00b:a4ff:fe05:b7dc" - } - }, - { - "OXMTlv": { - "field": "ipv6_flabel", - "mask": null, - "value": 541473 - } - }, - { - "OXMTlv": { - "field": "icmpv6_type", - "mask": null, - "value": 200 - } - }, - { - "OXMTlv": { - "field": "icmpv6_code", - "mask": null, - "value": 201 - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_target", - "mask": null, - "value": "fe80::a60:6eff:fe7f:74e7" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_sll", - "mask": null, - "value": "00:00:00:00:02:9a" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_tll", - "mask": null, - "value": "00:00:00:00:02:2b" - } - }, - { - "OXMTlv": { - "field": "mpls_label", - "mask": null, - "value": 624485 - } - }, - { - "OXMTlv": { - "field": "mpls_tc", - "mask": null, - "value": 5 - } - }, - { - "OXMTlv": { - "field": "mpls_bos", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "pbb_isid", - "mask": null, - "value": 11259375 - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 651061555542690057 - } - }, - { - "OXMTlv": { - "field": "ipv6_exthdr", - "mask": null, - "value": 500 - } - }, - { - "OXMTlv": { - "field": "pbb_uca", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "1.2.3.4" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-61-ofp_experimenter_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-61-ofp_experimenter_request.packet.json deleted file mode 100644 index 93af3039..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-61-ofp_experimenter_request.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "OFPExperimenterStatsRequest": { - "data": "aG9nZWhvZ2U=", - "exp_type": 3405678728, - "experimenter": 3735928495, - "flags": 0, - "type": 65535 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-62-ofp_experimenter_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-62-ofp_experimenter_reply.packet.json deleted file mode 100644 index 1eb06b84..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-62-ofp_experimenter_reply.packet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "OFPExperimenterStatsReply": { - "body": { - "OFPExperimenterMultipart": { - "data": "dGVzdGRhdGE5OTk5OTk5OQ==", - "exp_type": 3405674359, - "experimenter": 3735928495 - } - }, - "flags": 0, - "type": 65535 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-63-onf_flow_monitor_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-63-onf_flow_monitor_request.packet.json deleted file mode 100644 index c5e166d8..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-63-onf_flow_monitor_request.packet.json +++ /dev/null @@ -1,337 +0,0 @@ -{ - "ONFFlowMonitorStatsRequest": { - "body": [ - { - "ONFFlowMonitorRequest": { - "flags": 15, - "id": 100000000, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "match_len": 0, - "out_port": 22, - "table_id": 33 - } - }, - { - "ONFFlowMonitorRequest": { - "flags": 49, - "id": 999, - "match": { - "OFPMatch": { - "length": 351, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 84281096 - } - }, - { - "OXMTlv": { - "field": "in_phy_port", - "mask": null, - "value": 16909060 - } - }, - { - "OXMTlv": { - "field": "metadata", - "mask": null, - "value": 283686952306183 - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "ff:ff:ff:ff:ff:ff" - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 999 - } - }, - { - "OXMTlv": { - "field": "ip_dscp", - "mask": null, - "value": 9 - } - }, - { - "OXMTlv": { - "field": "ip_ecn", - "mask": null, - "value": 3 - } - }, - { - "OXMTlv": { - "field": "ip_proto", - "mask": null, - "value": 99 - } - }, - { - "OXMTlv": { - "field": "ipv4_src", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "tcp_src", - "mask": null, - "value": 8080 - } - }, - { - "OXMTlv": { - "field": "tcp_dst", - "mask": null, - "value": 18080 - } - }, - { - "OXMTlv": { - "field": "udp_src", - "mask": null, - "value": 28080 - } - }, - { - "OXMTlv": { - "field": "udp_dst", - "mask": null, - "value": 55936 - } - }, - { - "OXMTlv": { - "field": "sctp_src", - "mask": null, - "value": 48080 - } - }, - { - "OXMTlv": { - "field": "sctp_dst", - "mask": null, - "value": 59328 - } - }, - { - "OXMTlv": { - "field": "icmpv4_type", - "mask": null, - "value": 100 - } - }, - { - "OXMTlv": { - "field": "icmpv4_code", - "mask": null, - "value": 101 - } - }, - { - "OXMTlv": { - "field": "arp_op", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "arp_spa", - "mask": null, - "value": "10.0.0.1" - } - }, - { - "OXMTlv": { - "field": "arp_tpa", - "mask": null, - "value": "10.0.0.3" - } - }, - { - "OXMTlv": { - "field": "arp_sha", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_tha", - "mask": null, - "value": "00:00:00:00:00:00" - } - }, - { - "OXMTlv": { - "field": "ipv6_src", - "mask": null, - "value": "fe80::f00b:a4ff:fe48:28a5" - } - }, - { - "OXMTlv": { - "field": "ipv6_dst", - "mask": null, - "value": "fe80::f00b:a4ff:fe05:b7dc" - } - }, - { - "OXMTlv": { - "field": "ipv6_flabel", - "mask": null, - "value": 541473 - } - }, - { - "OXMTlv": { - "field": "icmpv6_type", - "mask": null, - "value": 200 - } - }, - { - "OXMTlv": { - "field": "icmpv6_code", - "mask": null, - "value": 201 - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_target", - "mask": null, - "value": "fe80::a60:6eff:fe7f:74e7" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_sll", - "mask": null, - "value": "00:00:00:00:02:9a" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_tll", - "mask": null, - "value": "00:00:00:00:02:2b" - } - }, - { - "OXMTlv": { - "field": "mpls_label", - "mask": null, - "value": 624485 - } - }, - { - "OXMTlv": { - "field": "mpls_tc", - "mask": null, - "value": 5 - } - }, - { - "OXMTlv": { - "field": "mpls_bos", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "pbb_isid", - "mask": null, - "value": 11259375 - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 651061555542690057 - } - }, - { - "OXMTlv": { - "field": "ipv6_exthdr", - "mask": null, - "value": 500 - } - }, - { - "OXMTlv": { - "field": "pbb_uca", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "1.2.3.4" - } - } - ], - "type": 1 - } - }, - "match_len": 347, - "out_port": 4294967295, - "table_id": 255 - } - } - ], - "exp_type": 1870, - "experimenter": 1330529792, - "flags": 0, - "type": 65535 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-7-ofp_set_config.packet.json b/ryu/tests/unit/ofproto/json/of13/4-7-ofp_set_config.packet.json deleted file mode 100644 index cd5398b7..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-7-ofp_set_config.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPSetConfig": { - "flags": 0, - "miss_send_len": 128 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-8-ofp_get_config_request.packet.json b/ryu/tests/unit/ofproto/json/of13/4-8-ofp_get_config_request.packet.json deleted file mode 100644 index 06fe51f4..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-8-ofp_get_config_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPGetConfigRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of13/4-9-ofp_get_config_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/4-9-ofp_get_config_reply.packet.json deleted file mode 100644 index 62b37b4d..00000000 --- a/ryu/tests/unit/ofproto/json/of13/4-9-ofp_get_config_reply.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGetConfigReply": { - "flags": 0, - "miss_send_len": 128 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_group_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_group_stats_request.packet.json deleted file mode 100644 index 311b0381..00000000 --- a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_group_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPGroupStatsRequest": { - "flags": 0, - "group_id": 1, - "type": 6 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_config_request.packet.json b/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_config_request.packet.json deleted file mode 100644 index 9967bd29..00000000 --- a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_config_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPMeterConfigStatsRequest": { - "flags": 0, - "meter_id": 1, - "type": 10 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_stats_request.packet.json deleted file mode 100644 index 570c2b6d..00000000 --- a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPMeterStatsRequest": { - "flags": 0, - "meter_id": 1, - "type": 9 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_port_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_port_stats_request.packet.json deleted file mode 100644 index f1258076..00000000 --- a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_port_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPPortStatsRequest": { - "flags": 0, - "port_no": 7, - "type": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json b/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json deleted file mode 100644 index a50308c0..00000000 --- a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPQueueGetConfigRequest": { - "port": 4294967295 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json b/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json deleted file mode 100644 index b216fe97..00000000 --- a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPQueueStatsRequest": { - "flags": 0, - "port_no": 7, - "queue_id": 4294967295, - "type": 5 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json b/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json deleted file mode 100644 index cc00e1ea..00000000 --- a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPQueueStatsRequest": { - "flags": 0, - "port_no": 7, - "queue_id": 1, - "type": 5 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json b/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json deleted file mode 100644 index 5f6579be..00000000 --- a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPQueueStatsRequest": { - "flags": 0, - "port_no": 4294967295, - "queue_id": 1, - "type": 5 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_table_features_request.packet.json b/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_table_features_request.packet.json deleted file mode 100644 index 6501de15..00000000 --- a/ryu/tests/unit/ofproto/json/of13/lib-ofctl-ofp_table_features_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPTableFeaturesStatsRequest": { - "body": [], - "flags": 0, - "type": 12 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_reply.packet.json deleted file mode 100644 index 011bd6de..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_reply.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPEchoReply": { - "data": "" - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_request.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_request.packet.json deleted file mode 100644 index 501a8479..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPEchoRequest": { - "data": "" - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-error_msg.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-error_msg.packet.json deleted file mode 100644 index b12d0d9a..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-error_msg.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPErrorMsg": { - "code": 6, - "data": "BA4ACAAAAAA=", - "type": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-features_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-features_reply.packet.json deleted file mode 100644 index 3d828093..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-features_reply.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "OFPSwitchFeatures": { - "auxiliary_id": 0, - "capabilities": 79, - "datapath_id": 1, - "n_buffers": 255, - "n_tables": 255 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.json deleted file mode 100644 index 7de40ef3..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 0, - "command": 0, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.9" - } - }, - "len": 16, - "type": 25 - } - }, - { - "NXActionLearn": { - "cookie": 0, - "experimenter": 8992, - "fin_hard_timeout": 0, - "fin_idle_timeout": 0, - "flags": 0, - "hard_timeout": 300, - "idle_timeout": 0, - "len": 96, - "priority": 1, - "specs": [ - { - "NXFlowSpecMatch": { - "dst": [ - "vlan_vid", - 0 - ], - "n_bits": 12, - "src": [ - "vlan_vid", - 0 - ] - } - }, - { - "NXFlowSpecMatch": { - "dst": [ - "eth_dst_nxm", - 0 - ], - "n_bits": 48, - "src": [ - "eth_src_nxm", - 0 - ] - } - }, - { - "NXFlowSpecLoad": { - "dst": [ - "vlan_vid", - 0 - ], - "n_bits": 12, - "src": 0 - } - }, - { - "NXFlowSpecLoad": { - "dst": [ - "tunnel_id_nxm", - 0 - ], - "n_bits": 64, - "src": [ - "tunnel_id_nxm", - 0 - ] - } - }, - { - "NXFlowSpecOutput": { - "dst": "", - "n_bits": 32, - "src": [ - "in_port", - 0 - ] - } - } - ], - "subtype": 16, - "table_id": 99, - "type": 65535 - } - } - ], - "len": 128, - "type": 4 - } - }, - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 100, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 70, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "aa:bb:cc:99:88:77" - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5095 - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.1" - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 50000 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "192.168.2.3" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "192.168.2.4" - } - } - ], - "type": 1 - } - }, - "out_group": 0, - "out_port": 0, - "priority": 0, - "table_id": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.truncated64.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.truncated64.json deleted file mode 100644 index 707e3096..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.truncated64.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "OFPTruncatedMessage": { - "OFPFlowMod": { - "buffer_id": 0, - "command": 0, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [], - "match": { - "OFPMatch": { - "length": 70, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - } - ], - "type": 1 - } - }, - "out_group": 0, - "out_port": 0, - "priority": 0, - "table_id": 2 - } - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_conjunction.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_conjunction.packet.json deleted file mode 100644 index 209067e8..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_conjunction.packet.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 0, - "command": 0, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionConjunction": { - "clause": 1, - "experimenter": 8992, - "id": 11259375, - "len": 16, - "n_clauses": 2, - "subtype": 34, - "type": 65535 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 70, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "aa:bb:cc:99:88:77" - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5095 - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.1" - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 50000 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "192.168.2.3" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "192.168.2.4" - } - } - ], - "type": 1 - } - }, - "out_group": 0, - "out_port": 0, - "priority": 0, - "table_id": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_match_conj.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_match_conj.packet.json deleted file mode 100644 index 4fd8c4d4..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_match_conj.packet.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 0, - "command": 0, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.9" - } - }, - "len": 16, - "type": 25 - } - } - ], - "len": 32, - "type": 4 - } - }, - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 100, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 12, - "oxm_fields": [ - { - "OXMTlv": { - "field": "conj_id", - "mask": null, - "value": 11259375 - } - } - ], - "type": 1 - } - }, - "out_group": 0, - "out_port": 0, - "priority": 0, - "table_id": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_removed.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_removed.packet.json deleted file mode 100644 index 63ec9424..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_removed.packet.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "OFPFlowRemoved": { - "byte_count": 100, - "cookie": 1311768467463790320, - "duration_nsec": 500, - "duration_sec": 600, - "hard_timeout": 300, - "idle_timeout": 400, - "match": { - "OFPMatch": { - "length": 70, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "aa:bb:cc:99:88:77" - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5095 - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.1" - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 50000 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "192.168.2.3" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "192.168.2.4" - } - } - ], - "type": 1 - } - }, - "packet_count": 200, - "priority": 100, - "reason": 0, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-get_config_reply.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-get_config_reply.packet.json deleted file mode 100644 index 62b37b4d..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-get_config_reply.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGetConfigReply": { - "flags": 0, - "miss_send_len": 128 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-hello.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-hello.packet.json deleted file mode 100644 index 5a116313..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-hello.packet.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "OFPHello": { - "elements": [ - { - "OFPHelloElemVersionBitmap": { - "length": 8, - "type": 1, - "versions": [ - 4 - ] - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-meter_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-meter_mod.packet.json deleted file mode 100644 index 5bb43719..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-meter_mod.packet.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "OFPMeterMod": { - "bands": [ - { - "OFPMeterBandDrop": { - "burst_size": 10, - "len": 16, - "rate": 1000, - "type": 1 - } - }, - { - "OFPMeterBandDscpRemark": { - "burst_size": 10, - "len": 16, - "prec_level": 1, - "rate": 1000, - "type": 2 - } - } - ], - "command": 0, - "flags": 14, - "meter_id": 100 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet.json deleted file mode 100644 index 4e8ad336..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "OFPPacketOut": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 4294967292, - "type": 0 - } - } - ], - "actions_len": 16, - "buffer_id": 4294967295, - "data": { - "Packet": { - "protocols": [ - { - "ethernet": { - "dst": "f2:0b:a4:d0:3f:70", - "ethertype": 2048, - "src": "f2:0b:a4:7d:f8:ea" - } - }, - { - "ipv4": { - "csum": 44939, - "dst": "10.0.0.2", - "flags": 0, - "header_length": 5, - "identification": 63514, - "offset": 0, - "option": null, - "proto": 1, - "src": "10.0.0.1", - "tos": 0, - "total_length": 84, - "ttl": 255, - "version": 4 - } - }, - { - "icmp": { - "code": 0, - "csum": 520, - "data": { - "echo": { - "data": "MdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", - "id": 63328, - "seq": 0 - } - }, - "type": 8 - } - } - ] - } - }, - "in_port": 4294967293 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-packet_in.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-packet_in.packet.json deleted file mode 100644 index e5fd0bd9..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-packet_in.packet.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "OFPPacketIn": { - "buffer_id": 200, - "cookie": 0, - "data": "aG9nZQ==", - "match": { - "OFPMatch": { - "length": 40, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 50000 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "192.168.2.3" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "192.168.2.4" - } - } - ], - "type": 1 - } - }, - "reason": 0, - "table_id": 100, - "total_len": 1000 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-port_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-port_mod.packet.json deleted file mode 100644 index 5c6c29a0..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-port_mod.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "OFPPortMod": { - "advertise": 10248, - "config": 1, - "hw_addr": "aa:bb:cc:99:88:77", - "mask": 1, - "port_no": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-port_status.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-port_status.packet.json deleted file mode 100644 index b82d10ee..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-port_status.packet.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "OFPPortStatus": { - "desc": { - "OFPPort": { - "advertised": 10248, - "config": 0, - "curr": 10248, - "curr_speed": 50000, - "hw_addr": "ff:ff:ff:ff:ff:ff", - "max_speed": 100000, - "name": "eth0", - "peer": 10248, - "port_no": 1, - "state": 4, - "supported": 10248 - } - }, - "reason": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-set_config.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-set_config.packet.json deleted file mode 100644 index cd5398b7..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-set_config.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPSetConfig": { - "flags": 0, - "miss_send_len": 128 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-table_mod.packet.json b/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-table_mod.packet.json deleted file mode 100644 index 5019c29b..00000000 --- a/ryu/tests/unit/ofproto/json/of13/libofproto-OFP13-table_mod.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPTableMod": { - "config": 0, - "table_id": 255 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_conjunction.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_conjunction.packet.json deleted file mode 100644 index edc10939..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_conjunction.packet.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 1, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionConjunction": { - "clause": 0, - "experimenter": 8992, - "id": 11259375, - "len": 16, - "n_clauses": 2, - "subtype": 34, - "type": 65535 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 70, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "aa:bb:cc:99:88:77" - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5095 - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.1" - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 50000 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "192.168.2.3" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "192.168.2.4" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller.packet.json deleted file mode 100644 index 95bc3f51..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller.packet.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionController": { - "controller_id": 1, - "experimenter": 8992, - "len": 16, - "max_len": 1024, - "reason": 5, - "subtype": 20, - "type": 65535 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 100, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller2.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller2.packet.json deleted file mode 100644 index f5e57f3d..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller2.packet.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionController2": { - "controller_id": 10, - "experimenter": 8992, - "len": 64, - "max_len": 1024, - "pause": true, - "reason": 5, - "subtype": 37, - "type": 65535, - "userdata": [ - 1, - 2, - 3, - 4, - 5 - ] - } - } - ], - "len": 72, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 100, - "table_id": 0 - } -} \ No newline at end of file diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json deleted file mode 100644 index b1157e9a..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionCT": { - "actions": [], - "alg": 0, - "experimenter": 8992, - "flags": 0, - "len": 24, - "recirc_table": 4, - "subtype": 35, - "type": 65535, - "zone_ofs_nbits": 283, - "zone_src": "reg0" - } - } - ], - "len": 32, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 22, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "ct_state", - "mask": 32, - "value": 0 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json deleted file mode 100644 index e3fcd3bc..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionCT": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "ct_mark", - "mask": null, - "value": 6636321 - } - }, - "len": 16, - "type": 25 - } - } - ], - "alg": 0, - "experimenter": 8992, - "flags": 1, - "len": 40, - "recirc_table": 255, - "subtype": 35, - "type": 65535, - "zone_ofs_nbits": 0, - "zone_src": "" - } - } - ], - "len": 48, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 22, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "ct_state", - "mask": 34, - "value": 34 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json deleted file mode 100644 index 5a38d8f7..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionCT": { - "actions": [ - { - "NXActionNAT": { - "experimenter": 8992, - "flags": 1, - "len": 32, - "range_ipv4_max": "10.1.13.255", - "range_ipv4_min": "10.1.12.0", - "range_ipv6_max": "", - "range_ipv6_min": "", - "range_proto_max": 1023, - "range_proto_min": 1, - "subtype": 36, - "type": 65535 - } - } - ], - "alg": 0, - "experimenter": 8992, - "flags": 1, - "len": 56, - "recirc_table": 255, - "subtype": 35, - "type": 65535, - "zone_ofs_nbits": 0, - "zone_src": "" - } - } - ], - "len": 64, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 10, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json deleted file mode 100644 index 5c1c8c07..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json +++ /dev/null @@ -1,70 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionCT": { - "actions": [ - { - "NXActionNAT": { - "experimenter": 8992, - "flags": 2, - "len": 48, - "range_ipv4_max": "", - "range_ipv4_min": "", - "range_ipv6_max": "2001:1::ffff", - "range_ipv6_min": "2001:1::1", - "range_proto_max": null, - "range_proto_min": null, - "subtype": 36, - "type": 65535 - } - } - ], - "alg": 0, - "experimenter": 8992, - "flags": 1, - "len": 72, - "recirc_table": 255, - "subtype": 35, - "type": 65535, - "zone_ofs_nbits": 0, - "zone_src": "" - } - } - ], - "len": 80, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 10, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 34525 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet.json deleted file mode 100644 index c5e44d07..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionDecTtlCntIds": { - "cnt_ids": [ - 1, - 2, - 3, - 4, - 5 - ], - "experimenter": 8992, - "len": 32, - "subtype": 21, - "type": 65535 - } - } - ], - "len": 40, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 15, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "ip_proto", - "mask": null, - "value": 6 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 100, - "table_id": 0 - } -} \ No newline at end of file diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_fintimeout.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_fintimeout.packet.json deleted file mode 100644 index c0e02de9..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_fintimeout.packet.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionFinTimeout": { - "experimenter": 8992, - "fin_hard_timeout": 60, - "fin_idle_timeout": 30, - "len": 16, - "subtype": 19, - "type": 65535 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 15, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "ip_proto", - "mask": null, - "value": 6 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 100, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_learn.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_learn.packet.json deleted file mode 100644 index c874c2e9..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_learn.packet.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.9" - } - }, - "len": 16, - "type": 25 - } - }, - { - "NXActionLearn": { - "cookie": 0, - "experimenter": 8992, - "fin_hard_timeout": 0, - "fin_idle_timeout": 0, - "flags": 0, - "hard_timeout": 300, - "idle_timeout": 0, - "len": 96, - "priority": 1, - "specs": [ - { - "NXFlowSpecMatch": { - "dst": [ - "vlan_vid", - 0 - ], - "n_bits": 12, - "src": [ - "vlan_vid", - 0 - ] - } - }, - { - "NXFlowSpecMatch": { - "dst": [ - "eth_dst_nxm", - 0 - ], - "n_bits": 48, - "src": [ - "eth_src_nxm", - 0 - ] - } - }, - { - "NXFlowSpecLoad": { - "dst": [ - "vlan_vid", - 0 - ], - "n_bits": 12, - "src": 0 - } - }, - { - "NXFlowSpecLoad": { - "dst": [ - "tunnel_id_nxm", - 0 - ], - "n_bits": 64, - "src": [ - "tunnel_id_nxm", - 0 - ] - } - }, - { - "NXFlowSpecOutput": { - "dst": "", - "n_bits": 32, - "src": [ - "in_port", - 0 - ] - } - } - ], - "subtype": 16, - "table_id": 99, - "type": 65535 - } - } - ], - "len": 128, - "type": 4 - } - }, - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 100, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 70, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "aa:bb:cc:99:88:77" - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5095 - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.1" - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 50000 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "192.168.2.3" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "192.168.2.4" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_note.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_note.packet.json deleted file mode 100644 index 330000da..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_note.packet.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionNote": { - "experimenter": 8992, - "len": 16, - "note": [ - 4, - 5, - 6, - 7, - 0, - 0 - ], - "subtype": 8, - "type": 65535 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 100, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_output_trunc.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_output_trunc.packet.json deleted file mode 100644 index 84657335..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_output_trunc.packet.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionOutputTrunc": { - "experimenter": 8992, - "len": 16, - "max_len": 1024, - "port": 8080, - "subtype": 39, - "type": 65535 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 100, - "table_id": 0 - } -} \ No newline at end of file diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_resubmit.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_resubmit.packet.json deleted file mode 100644 index 1fdedc55..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_resubmit.packet.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionResubmitTable": { - "experimenter": 8992, - "in_port": 1234, - "len": 16, - "subtype": 14, - "table_id": 99, - "type": 65535 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 70, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "aa:bb:cc:99:88:77" - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5095 - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.1" - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 50000 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "192.168.2.3" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "192.168.2.4" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample.packet.json deleted file mode 100644 index a5a374ad..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample.packet.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionSample": { - "collector_set_id": 1, - "experimenter": 8992, - "len": 24, - "obs_domain_id": 2, - "obs_point_id": 3, - "probability": 3, - "subtype": 29, - "type": 65535 - } - } - ], - "len": 32, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 100, - "table_id": 0 - } -} \ No newline at end of file diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample2.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample2.packet.json deleted file mode 100644 index c767bff3..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample2.packet.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionSample2": { - "collector_set_id": 1, - "experimenter": 8992, - "len": 32, - "obs_domain_id": 2, - "obs_point_id": 3, - "probability": 3, - "sampling_port": 8080, - "subtype": 38, - "type": 65535 - } - } - ], - "len": 40, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 100, - "table_id": 0 - } -} \ No newline at end of file diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_pop.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_pop.packet.json deleted file mode 100644 index 0322a36a..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_pop.packet.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionStackPop": { - "end": 5, - "experimenter": 8992, - "field": "reg2", - "len": 24, - "start": 1, - "subtype": 28, - "type": 65535 - } - } - ], - "len": 32, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 100, - "table_id": 0 - } -} \ No newline at end of file diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_push.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_push.packet.json deleted file mode 100644 index 86d29e74..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_push.packet.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionStackPush": { - "end": 5, - "experimenter": 8992, - "field": "reg2", - "len": 24, - "start": 1, - "subtype": 27, - "type": 65535 - } - } - ], - "len": 32, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 100, - "table_id": 0 - } -} \ No newline at end of file diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_conj.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_conj.packet.json deleted file mode 100644 index 6b1c2864..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_conj.packet.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 1, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - } - ], - "len": 16, - "type": 4 - } - }, - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 100, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 18, - "oxm_fields": [ - { - "OXMTlv": { - "field": "conj_id", - "mask": null, - "value": 11259375 - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5330 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json deleted file mode 100644 index c60851a0..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 1, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionRegLoad": { - "dst": "reg0", - "experimenter": 8992, - "len": 24, - "ofs_nbits": 283, - "subtype": 7, - "type": 65535, - "value": 233495534 - } - } - ], - "len": 32, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 24, - "oxm_fields": [ - { - "OXMTlv": { - "field": "reg0", - "mask": null, - "value": 4660 - } - }, - { - "OXMTlv": { - "field": "reg5", - "mask": 65535, - "value": 43981 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 3 - } -} \ No newline at end of file diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_move_nx_register.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_move_nx_register.packet.json deleted file mode 100644 index 7457278b..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_move_nx_register.packet.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 1, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionRegMove": { - "dst_field": "reg1", - "dst_ofs": 0, - "experimenter": 8992, - "len": 24, - "n_bits": 6, - "src_field": "reg0", - "src_ofs": 10, - "subtype": 6, - "type": 65535 - } - } - ], - "len": 32, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 24, - "oxm_fields": [ - { - "OXMTlv": { - "field": "reg0", - "mask": null, - "value": 4660 - } - }, - { - "OXMTlv": { - "field": "reg5", - "mask": 65535, - "value": 43981 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 3 - } -} \ No newline at end of file diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark.packet.json deleted file mode 100644 index 61aee954..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark.packet.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 1, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - } - ], - "len": 16, - "type": 4 - } - }, - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 100, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 18, - "oxm_fields": [ - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5330 - } - }, - { - "OXMTlv": { - "field": "pkt_mark", - "mask": null, - "value": 54321 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet.json b/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet.json deleted file mode 100644 index a7bd2367..00000000 --- a/ryu/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 4294967295, - "command": 1, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - } - ], - "len": 16, - "type": 4 - } - }, - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 100, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 22, - "oxm_fields": [ - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5330 - } - }, - { - "OXMTlv": { - "field": "pkt_mark", - "mask": 65535, - "value": 54321 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 32768, - "table_id": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-0-ofp_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-0-ofp_desc_reply.packet.json deleted file mode 100644 index 26e5dc2d..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-0-ofp_desc_reply.packet.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "OFPDescStatsReply": { - "body": { - "OFPDescStats": { - "dp_desc": "dp", - "hw_desc": "hw", - "mfr_desc": "mfr", - "serial_num": "serial", - "sw_desc": "sw" - } - }, - "flags": 0, - "type": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-1-ofp_packet_out.packet.json b/ryu/tests/unit/ofproto/json/of14/5-1-ofp_packet_out.packet.json deleted file mode 100644 index efb39e2d..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-1-ofp_packet_out.packet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "OFPPacketOut": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 4294967292, - "type": 0 - } - } - ], - "actions_len": 16, - "buffer_id": 4294967295, - "data": "8guk0D9w8gukffjqCABFAABU+BoAAP8Br4sKAAABCgAAAggAAgj3YAAAMdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", - "in_port": 4294967293 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-10-ofp_hello.packet.json b/ryu/tests/unit/ofproto/json/of14/5-10-ofp_hello.packet.json deleted file mode 100644 index d03ff84b..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-10-ofp_hello.packet.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "OFPHello": { - "elements": [ - { - "OFPHelloElemVersionBitmap": { - "length": 8, - "type": 1, - "versions": [ - 1, - 2, - 3, - 9, - 10, - 30 - ] - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-11-ofp_flow_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-11-ofp_flow_stats_request.packet.json deleted file mode 100644 index 2baccad4..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-11-ofp_flow_stats_request.packet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "OFPFlowStatsRequest": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 0, - "type": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json deleted file mode 100644 index 42eacf37..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json +++ /dev/null @@ -1,347 +0,0 @@ -{ - "OFPFlowStatsReply": { - "body": [ - { - "OFPFlowStats": { - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115277000, - "duration_sec": 358, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [], - "length": 56, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "packet_count": 0, - "priority": 65535, - "table_id": 0 - } - }, - { - "OFPFlowStats": { - "byte_count": 0, - "cookie": 0, - "duration_nsec": 115055000, - "duration_sec": 358, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 0, - "port": 4294967290, - "type": 0 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "length": 88, - "match": { - "OFPMatch": { - "length": 10, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - } - ], - "type": 1 - } - }, - "packet_count": 0, - "priority": 65534, - "table_id": 0 - } - }, - { - "OFPFlowStats": { - "byte_count": 238, - "cookie": 0, - "duration_nsec": 511582000, - "duration_sec": 316220, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [ - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 1, - "type": 1 - } - } - ], - "length": 80, - "match": { - "OFPMatch": { - "length": 22, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 6 - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "packet_count": 3, - "priority": 123, - "table_id": 0 - } - }, - { - "OFPFlowStats": { - "byte_count": 98, - "cookie": 0, - "duration_nsec": 980901000, - "duration_sec": 313499, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 258 - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionCopyTtlOut": { - "len": 8, - "type": 11 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionPopPbb": { - "len": 8, - "type": 27 - } - }, - { - "OFPActionPushPbb": { - "ethertype": 4660, - "len": 8, - "type": 26 - } - }, - { - "OFPActionPopMpls": { - "ethertype": 39030, - "len": 8, - "type": 20 - } - }, - { - "OFPActionPushMpls": { - "ethertype": 34887, - "len": 8, - "type": 19 - } - }, - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionPushVlan": { - "ethertype": 33024, - "len": 8, - "type": 17 - } - }, - { - "OFPActionDecMplsTtl": { - "len": 8, - "type": 16 - } - }, - { - "OFPActionSetMplsTtl": { - "len": 8, - "mpls_ttl": 10, - "type": 15 - } - }, - { - "OFPActionDecNwTtl": { - "len": 8, - "type": 24 - } - }, - { - "OFPActionSetNwTtl": { - "len": 8, - "nw_ttl": 10, - "type": 23 - } - }, - { - "OFPActionSetQueue": { - "len": 8, - "queue_id": 3, - "type": 21 - } - }, - { - "OFPActionGroup": { - "group_id": 99, - "len": 8, - "type": 22 - } - }, - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 6, - "type": 0 - } - }, - { - "OFPActionExperimenterUnknown": { - "len": 16, - "data": "ZXhwX2RhdGE=", - "experimenter": 98765432, - "type": 65535 - } - }, - { - "NXActionUnknown": { - "len": 16, - "data": "cF9kYXRh", - "experimenter": 8992, - "type": 65535, - "subtype": 25976 - } - } - ], - "len": 192, - "type": 3 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "01:02:03:04:05:06" - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "pbb_uca", - "mask": null, - "value": 1 - } - }, - "len": 16, - "type": 25 - } - } - ], - "len": 40, - "type": 4 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 4294967293, - "type": 0 - } - } - ], - "len": 24, - "type": 3 - } - } - ], - "length": 312, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "packet_count": 1, - "priority": 0, - "table_id": 0 - } - } - ], - "flags": 0, - "type": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-13-ofp_echo_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-13-ofp_echo_request.packet.json deleted file mode 100644 index e1f2af42..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-13-ofp_echo_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPEchoRequest": { - "data": "aG9nZQ==" - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-14-ofp_echo_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-14-ofp_echo_reply.packet.json deleted file mode 100644 index 2a573634..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-14-ofp_echo_reply.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPEchoReply": { - "data": "aG9nZQ==" - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-15-ofp_error_msg.packet.json b/ryu/tests/unit/ofproto/json/of14/5-15-ofp_error_msg.packet.json deleted file mode 100644 index e9ab2b5e..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-15-ofp_error_msg.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPErrorMsg": { - "code": 11, - "data": "ZnVnYWZ1Z2E=", - "type": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-16-ofp_experimenter.packet.json b/ryu/tests/unit/ofproto/json/of14/5-16-ofp_experimenter.packet.json deleted file mode 100644 index 4ad13c73..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-16-ofp_experimenter.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPExperimenter": { - "data": "bmF6bw==", - "exp_type": 123456789, - "experimenter": 98765432 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-17-ofp_barrier_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-17-ofp_barrier_request.packet.json deleted file mode 100644 index 2aae9ec3..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-17-ofp_barrier_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPBarrierRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-18-ofp_barrier_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-18-ofp_barrier_reply.packet.json deleted file mode 100644 index 11f8cfcc..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-18-ofp_barrier_reply.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPBarrierReply": {} -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-19-ofp_role_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-19-ofp_role_request.packet.json deleted file mode 100644 index 5cdbc2f1..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-19-ofp_role_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPRoleRequest": { - "generation_id": 17294086455919964160, - "role": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json deleted file mode 100644 index 5f789d52..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 258 - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionCopyTtlOut": { - "len": 8, - "type": 11 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionPopPbb": { - "len": 8, - "type": 27 - } - }, - { - "OFPActionPushPbb": { - "ethertype": 4660, - "len": 8, - "type": 26 - } - }, - { - "OFPActionPopMpls": { - "ethertype": 39030, - "len": 8, - "type": 20 - } - }, - { - "OFPActionPushMpls": { - "ethertype": 34887, - "len": 8, - "type": 19 - } - }, - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionPushVlan": { - "ethertype": 33024, - "len": 8, - "type": 17 - } - }, - { - "OFPActionDecMplsTtl": { - "len": 8, - "type": 16 - } - }, - { - "OFPActionSetMplsTtl": { - "len": 8, - "mpls_ttl": 10, - "type": 15 - } - }, - { - "OFPActionDecNwTtl": { - "len": 8, - "type": 24 - } - }, - { - "OFPActionSetNwTtl": { - "len": 8, - "nw_ttl": 10, - "type": 23 - } - }, - { - "OFPActionExperimenterUnknown": { - "data": "AAECAwQFBgc=", - "experimenter": 101, - "len": 16, - "type": 65535 - } - }, - { - "OFPActionSetQueue": { - "len": 8, - "queue_id": 3, - "type": 21 - } - }, - { - "OFPActionGroup": { - "group_id": 99, - "len": 8, - "type": 22 - } - }, - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 6, - "type": 0 - } - } - ], - "len": 176, - "type": 3 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "01:02:03:04:05:06" - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "pbb_uca", - "mask": null, - "value": 1 - } - }, - "len": 16, - "type": 25 - } - } - ], - "len": 40, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-20-ofp_role_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-20-ofp_role_reply.packet.json deleted file mode 100644 index 3fd9a13f..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-20-ofp_role_reply.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPRoleReply": { - "generation_id": 17294086455919964160, - "role": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-21-ofp_group_mod.packet.json b/ryu/tests/unit/ofproto/json/of14/5-21-ofp_group_mod.packet.json deleted file mode 100644 index 1a3767da..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-21-ofp_group_mod.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "OFPGroupMod": { - "buckets": [ - { - "OFPBucket": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 2, - "type": 0 - } - } - ], - "len": 32, - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - } - ], - "command": 0, - "group_id": 1, - "type": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-22-ofp_port_mod.packet.json b/ryu/tests/unit/ofproto/json/of14/5-22-ofp_port_mod.packet.json deleted file mode 100644 index a255b9dd..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-22-ofp_port_mod.packet.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "OFPPortMod": { - "config": 0, - "hw_addr": "00:11:00:00:11:11", - "mask": 0, - "port_no": 1, - "properties": [ - { - "OFPPortModPropEthernet": { - "advertise": 4096, - "length": 8, - "type": 0 - } - }, - { - "OFPPortModPropOptical": { - "configure": 3, - "fl_offset": 2000, - "freq_lmda": 1500, - "grid_span": 3000, - "length": 24, - "tx_pwr": 300, - "type": 1 - } - }, - { - "OFPPortModPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPPortModPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPPortModPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-23-ofp_table_mod.packet.json b/ryu/tests/unit/ofproto/json/of14/5-23-ofp_table_mod.packet.json deleted file mode 100644 index 97acd144..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-23-ofp_table_mod.packet.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "OFPTableMod": { - "config": 0, - "properties": [ - { - "OFPTableModPropEviction": { - "flags": 0, - "length": 8, - "type": 2 - } - }, - { - "OFPTableModPropVacancy": { - "length": 8, - "type": 3, - "vacancy": 0, - "vacancy_down": 0, - "vacancy_up": 0 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "table_id": 255 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-24-ofp_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-24-ofp_desc_request.packet.json deleted file mode 100644 index 5b23f8bc..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-24-ofp_desc_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPDescStatsRequest": { - "flags": 0, - "type": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-25-ofp_aggregate_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-25-ofp_aggregate_stats_request.packet.json deleted file mode 100644 index 248131fd..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-25-ofp_aggregate_stats_request.packet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "OFPAggregateStatsRequest": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 255, - "type": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-26-ofp_aggregate_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-26-ofp_aggregate_stats_reply.packet.json deleted file mode 100644 index 153ad4f0..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-26-ofp_aggregate_stats_reply.packet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "OFPAggregateStatsReply": { - "body": { - "OFPAggregateStats": { - "byte_count": 574, - "flow_count": 6, - "packet_count": 7 - } - }, - "flags": 0, - "type": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-27-ofp_table_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-27-ofp_table_stats_request.packet.json deleted file mode 100644 index 1f965d77..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-27-ofp_table_stats_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPTableStatsRequest": { - "flags": 0, - "type": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-28-ofp_table_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-28-ofp_table_stats_reply.packet.json deleted file mode 100644 index 94801adb..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-28-ofp_table_stats_reply.packet.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "OFPTableStatsReply": { - "body": [ - { - "OFPTableStats": { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 0 - } - }, - { - "OFPTableStats": { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 1 - } - } - ], - "flags": 0, - "type": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-29-ofp_port_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-29-ofp_port_stats_request.packet.json deleted file mode 100644 index 5228710d..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-29-ofp_port_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPPortStatsRequest": { - "flags": 0, - "port_no": 4294967295, - "type": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-3-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of14/5-3-ofp_flow_mod.packet.json deleted file mode 100644 index 061e3cd0..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-3-ofp_flow_mod.packet.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [ - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 1, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 22, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 6 - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-30-ofp_port_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-30-ofp_port_stats_reply.packet.json deleted file mode 100644 index 4ea41742..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-30-ofp_port_stats_reply.packet.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "OFPPortStatsReply": { - "body": [ - { - "OFPPortStats": { - "duration_nsec": 0, - "duration_sec": 0, - "length": 224, - "port_no": 7, - "properties": [ - { - "OFPPortStatsPropEthernet": { - "collisions": 0, - "length": 40, - "rx_crc_err": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "type": 0 - } - }, - { - "OFPPortStatsPropOptical": { - "bias_current": 300, - "flags": 3, - "length": 44, - "rx_freq_lmda": 1500, - "rx_grid_span": 500, - "rx_offset": 700, - "rx_pwr": 2000, - "temperature": 273, - "tx_freq_lmda": 1500, - "tx_grid_span": 500, - "tx_offset": 700, - "tx_pwr": 2000, - "type": 1 - } - }, - { - "OFPPortStatsPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPPortStatsPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPPortStatsPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "rx_bytes": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 0, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - }, - { - "OFPPortStats": { - "duration_nsec": 0, - "duration_sec": 0, - "length": 120, - "port_no": 6, - "properties": [ - { - "OFPPortStatsPropEthernet": { - "collisions": 0, - "length": 40, - "rx_crc_err": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "type": 0 - } - } - ], - "rx_bytes": 336, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 4, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - } - ], - "flags": 0, - "type": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-31-ofp_group_features_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-31-ofp_group_features_request.packet.json deleted file mode 100644 index edba5dc5..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-31-ofp_group_features_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGroupFeaturesStatsRequest": { - "flags": 0, - "type": 8 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-32-ofp_group_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-32-ofp_group_features_reply.packet.json deleted file mode 100644 index f059f994..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-32-ofp_group_features_reply.packet.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "OFPGroupFeaturesStatsReply": { - "body": { - "OFPGroupFeaturesStats": { - "actions": [ - 67082241, - 67082241, - 67082241, - 67082241 - ], - "capabilities": 5, - "max_groups": [ - 16777216, - 16777216, - 16777216, - 16777216 - ], - "types": 15 - } - }, - "flags": 0, - "type": 8 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-33-ofp_group_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-33-ofp_group_desc_request.packet.json deleted file mode 100644 index bea140c2..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-33-ofp_group_desc_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGroupDescStatsRequest": { - "flags": 0, - "type": 7 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-34-ofp_group_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-34-ofp_group_desc_reply.packet.json deleted file mode 100644 index c30d7da6..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-34-ofp_group_desc_reply.packet.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "OFPGroupDescStatsReply": { - "body": [ - { - "OFPGroupDescStats": { - "buckets": [ - { - "OFPBucket": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 2, - "type": 0 - } - } - ], - "len": 32, - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - } - ], - "group_id": 1, - "length": 40, - "type": 0 - } - } - ], - "flags": 0, - "type": 7 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-35-ofp_queue_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-35-ofp_queue_stats_request.packet.json deleted file mode 100644 index 7a12acc3..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-35-ofp_queue_stats_request.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPQueueStatsRequest": { - "flags": 0, - "port_no": 4294967295, - "queue_id": 4294967295, - "type": 5 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-36-ofp_queue_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-36-ofp_queue_stats_reply.packet.json deleted file mode 100644 index 2c190977..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-36-ofp_queue_stats_reply.packet.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "OFPQueueStatsReply": { - "body": [ - { - "OFPQueueStats": { - "duration_nsec": 0, - "duration_sec": 0, - "length": 104, - "port_no": 7, - "properties": [ - { - "OFPQueueStatsPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPQueueStatsPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPQueueStatsPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - }, - { - "OFPQueueStats": { - "duration_nsec": 0, - "duration_sec": 0, - "length": 48, - "port_no": 6, - "properties": [], - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - }, - { - "OFPQueueStats": { - "duration_nsec": 0, - "duration_sec": 0, - "length": 48, - "port_no": 7, - "properties": [], - "queue_id": 2, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - } - ], - "flags": 0, - "type": 5 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-37-ofp_port_status.packet.json b/ryu/tests/unit/ofproto/json/of14/5-37-ofp_port_status.packet.json deleted file mode 100644 index b273ac22..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-37-ofp_port_status.packet.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "OFPPortStatus": { - "desc": { - "OFPPort": { - "config": 0, - "hw_addr": "f2:0b:a4:d0:3f:70", - "length": 168, - "name": "\u79c1\u306e\u30dd\u30fc\u30c8", - "port_no": 7, - "properties": [ - { - "OFPPortDescPropEthernet": { - "advertised": 10240, - "curr": 10248, - "curr_speed": 5000, - "length": 32, - "max_speed": 5000, - "peer": 10248, - "supported": 10248, - "type": 0 - } - }, - { - "OFPPortDescPropOptical": { - "length": 40, - "rx_grid_freq_lmda": 1500, - "rx_max_freq_lmda": 2000, - "rx_min_freq_lmda": 1000, - "supported": 1, - "tx_grid_freq_lmda": 1500, - "tx_max_freq_lmda": 2000, - "tx_min_freq_lmda": 1000, - "tx_pwr_max": 2000, - "tx_pwr_min": 1000, - "type": 1 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "state": 4 - } - }, - "reason": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-38-ofp_flow_removed.packet.json b/ryu/tests/unit/ofproto/json/of14/5-38-ofp_flow_removed.packet.json deleted file mode 100644 index 994953e6..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-38-ofp_flow_removed.packet.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "OFPFlowRemoved": { - "byte_count": 86, - "cookie": 0, - "duration_nsec": 48825000, - "duration_sec": 3, - "hard_timeout": 0, - "idle_timeout": 3, - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "packet_count": 1, - "priority": 65535, - "reason": 0, - "table_id": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-39-ofp_error_msg_experimenter.packet.json b/ryu/tests/unit/ofproto/json/of14/5-39-ofp_error_msg_experimenter.packet.json deleted file mode 100644 index 37bfb6a9..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-39-ofp_error_msg_experimenter.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPErrorExperimenterMsg": { - "data": "amlra2VuIGRhdGE=", - "exp_type": 60000, - "experimenter": 999999, - "type": 65535 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-4-ofp_packet_in.packet.json b/ryu/tests/unit/ofproto/json/of14/5-4-ofp_packet_in.packet.json deleted file mode 100644 index b281edd7..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-4-ofp_packet_in.packet.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "OFPPacketIn": { - "buffer_id": 2, - "cookie": 283686884868096, - "data": "////////8gukffjqCAYAAQgABgQAAfILpH346goAAAEAAAAAAAAKAAAD", - "match": { - "OFPMatch": { - "length": 80, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 6 - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "ff:ff:ff:ff:ff:ff" - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_op", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "arp_spa", - "mask": null, - "value": "10.0.0.1" - } - }, - { - "OXMTlv": { - "field": "arp_tpa", - "mask": null, - "value": "10.0.0.3" - } - }, - { - "OXMTlv": { - "field": "arp_sha", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_tha", - "mask": null, - "value": "00:00:00:00:00:00" - } - } - ], - "type": 1 - } - }, - "reason": 3, - "table_id": 1, - "total_len": 42 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-40-ofp_get_async_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-40-ofp_get_async_request.packet.json deleted file mode 100644 index 7daa5a0f..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-40-ofp_get_async_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPGetAsyncRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-41-ofp_get_async_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-41-ofp_get_async_reply.packet.json deleted file mode 100644 index 82c9e794..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-41-ofp_get_async_reply.packet.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "OFPGetAsyncReply": { - "properties": [ - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 0 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 1 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 2 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 3 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 4 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 5 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 6 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 7 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 24, - "type": 8 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 24, - "type": 9 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 10 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 11 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65534 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-42-ofp_set_async.packet.json b/ryu/tests/unit/ofproto/json/of14/5-42-ofp_set_async.packet.json deleted file mode 100644 index 0802c14e..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-42-ofp_set_async.packet.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "OFPSetAsync": { - "properties": [ - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 0 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 1 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 2 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 3 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 4 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 5 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 6 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 7 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 24, - "type": 8 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 24, - "type": 9 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 10 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 11 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65534 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-43-ofp_meter_mod.packet.json b/ryu/tests/unit/ofproto/json/of14/5-43-ofp_meter_mod.packet.json deleted file mode 100644 index eba4540a..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-43-ofp_meter_mod.packet.json +++ /dev/null @@ -1,35 +0,0 @@ -{ - "OFPMeterMod": { - "bands": [ - { - "OFPMeterBandDrop": { - "burst_size": 10, - "len": 16, - "rate": 1000, - "type": 1 - } - }, - { - "OFPMeterBandDscpRemark": { - "burst_size": 10, - "len": 16, - "prec_level": 1, - "rate": 1000, - "type": 2 - } - }, - { - "OFPMeterBandExperimenter": { - "burst_size": 10, - "experimenter": 999, - "len": 16, - "rate": 1000, - "type": 65535 - } - } - ], - "command": 0, - "flags": 14, - "meter_id": 100 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-44-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of14/5-44-ofp_flow_mod.packet.json deleted file mode 100644 index b8c28362..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-44-ofp_flow_mod.packet.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [ - { - "OFPInstructionMeter": { - "len": 8, - "meter_id": 1, - "type": 6 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 6, - "type": 0 - } - } - ], - "len": 24, - "type": 3 - } - } - ], - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-45-ofp_meter_config_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-45-ofp_meter_config_request.packet.json deleted file mode 100644 index 4703588e..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-45-ofp_meter_config_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPMeterConfigStatsRequest": { - "flags": 0, - "meter_id": 4294967295, - "type": 10 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-46-ofp_meter_config_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-46-ofp_meter_config_reply.packet.json deleted file mode 100644 index 08cc97e6..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-46-ofp_meter_config_reply.packet.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "OFPMeterConfigStatsReply": { - "body": [ - { - "OFPMeterConfigStats": { - "bands": [ - { - "OFPMeterBandDrop": { - "burst_size": 10, - "len": 16, - "rate": 1000, - "type": 1 - } - } - ], - "flags": 14, - "length": 24, - "meter_id": 100 - } - } - ], - "flags": 0, - "type": 10 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-47-ofp_meter_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-47-ofp_meter_stats_request.packet.json deleted file mode 100644 index 8d45799b..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-47-ofp_meter_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPMeterStatsRequest": { - "flags": 0, - "meter_id": 4294967295, - "type": 9 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-48-ofp_meter_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-48-ofp_meter_stats_reply.packet.json deleted file mode 100644 index b4fd8226..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-48-ofp_meter_stats_reply.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "OFPMeterStatsReply": { - "body": [ - { - "OFPMeterStats": { - "band_stats": [ - { - "OFPMeterBandStats": { - "byte_band_count": 0, - "packet_band_count": 0 - } - } - ], - "byte_in_count": 0, - "duration_nsec": 480000, - "duration_sec": 0, - "flow_count": 0, - "len": 56, - "meter_id": 100, - "packet_in_count": 0 - } - } - ], - "flags": 0, - "type": 9 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-49-ofp_meter_features_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-49-ofp_meter_features_request.packet.json deleted file mode 100644 index 7363a342..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-49-ofp_meter_features_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPMeterFeaturesStatsRequest": { - "flags": 0, - "type": 11 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-5-ofp_features_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-5-ofp_features_request.packet.json deleted file mode 100644 index 8f48ad5a..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-5-ofp_features_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPFeaturesRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-50-ofp_meter_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-50-ofp_meter_features_reply.packet.json deleted file mode 100644 index e3f6918f..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-50-ofp_meter_features_reply.packet.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "OFPMeterFeaturesStatsReply": { - "body": [ - { - "OFPMeterFeaturesStats": { - "band_types": 2147483654, - "capabilities": 15, - "max_bands": 255, - "max_color": 0, - "max_meter": 16777216 - } - } - ], - "flags": 0, - "type": 11 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-51-ofp_port_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-51-ofp_port_desc_request.packet.json deleted file mode 100644 index f166c34a..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-51-ofp_port_desc_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPPortDescStatsRequest": { - "flags": 0, - "type": 13 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-52-ofp_port_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-52-ofp_port_desc_reply.packet.json deleted file mode 100644 index c281c0f8..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-52-ofp_port_desc_reply.packet.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "OFPPortDescStatsReply": { - "body": [ - { - "OFPPort": { - "config": 0, - "hw_addr": "f2:0b:a4:d0:3f:70", - "length": 168, - "name": "Port7", - "port_no": 7, - "properties": [ - { - "OFPPortDescPropEthernet": { - "advertised": 10240, - "curr": 10248, - "curr_speed": 5000, - "length": 32, - "max_speed": 5000, - "peer": 10248, - "supported": 10248, - "type": 0 - } - }, - { - "OFPPortDescPropOptical": { - "length": 40, - "rx_grid_freq_lmda": 1500, - "rx_max_freq_lmda": 2000, - "rx_min_freq_lmda": 1000, - "supported": 1, - "tx_grid_freq_lmda": 1500, - "tx_max_freq_lmda": 2000, - "tx_min_freq_lmda": 1000, - "tx_pwr_max": 2000, - "tx_pwr_min": 1000, - "type": 1 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "state": 4 - } - }, - { - "OFPPort": { - "config": 0, - "hw_addr": "f2:0b:a4:7d:f8:ea", - "length": 72, - "name": "Port6", - "port_no": 6, - "properties": [ - { - "OFPPortDescPropEthernet": { - "advertised": 10240, - "curr": 10248, - "curr_speed": 5000, - "length": 32, - "max_speed": 5000, - "peer": 10248, - "supported": 10248, - "type": 0 - } - } - ], - "state": 4 - } - } - ], - "flags": 0, - "type": 13 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-53-ofp_table_features_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-53-ofp_table_features_request.packet.json deleted file mode 100644 index 2a1a4308..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-53-ofp_table_features_request.packet.json +++ /dev/null @@ -1,15945 +0,0 @@ -{ - "OFPTableFeaturesStatsRequest": { - "body": [ - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1168, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x00", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 258, - "table_ids": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65534 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65534 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65534 - } - } - ], - "table_id": 0 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1112, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x01", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 257, - "table_ids": [ - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 1 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x02", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 256, - "table_ids": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 2 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x03", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 255, - "table_ids": [ - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 3 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x04", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 254, - "table_ids": [ - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 4 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x05", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 253, - "table_ids": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 5 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x06", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 252, - "table_ids": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 6 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x07", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 251, - "table_ids": [ - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 7 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x08", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 250, - "table_ids": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 8 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x09", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 249, - "table_ids": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 9 - } - } - ], - "flags": 1, - "type": 12 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-54-ofp_table_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-54-ofp_table_features_reply.packet.json deleted file mode 100644 index ea056e8f..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-54-ofp_table_features_reply.packet.json +++ /dev/null @@ -1,15945 +0,0 @@ -{ - "OFPTableFeaturesStatsReply": { - "body": [ - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1168, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 258, - "table_ids": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65534 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65534 - } - }, - { - "OFPTableFeaturePropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65534 - } - } - ], - "table_id": 0 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1112, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x01", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 257, - "table_ids": [ - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 1 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x02", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 256, - "table_ids": [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 2 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x03", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 255, - "table_ids": [ - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 3 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x04", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 254, - "table_ids": [ - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 4 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x05", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 253, - "table_ids": [ - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 5 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x06", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 252, - "table_ids": [ - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 6 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x07", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 251, - "table_ids": [ - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 7 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x08", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 250, - "table_ids": [ - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 8 - } - }, - { - "OFPTableFeaturesStats": { - "config": 0, - "length": 1104, - "max_entries": 16777216, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "Flow Table 0x09", - "properties": [ - { - "OFPTableFeaturePropInstructions": { - "instruction_ids": [ - { - "OFPInstructionId": { - "len": 4, - "type": 1 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 2 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 3 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 4 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 5 - } - }, - { - "OFPInstructionId": { - "len": 4, - "type": 6 - } - } - ], - "length": 28, - "type": 0 - } - }, - { - "OFPTableFeaturePropNextTables": { - "length": 249, - "table_ids": [ - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - 33, - 34, - 35, - 36, - 37, - 38, - 39, - 40, - 41, - 42, - 43, - 44, - 45, - 46, - 47, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 60, - 61, - 62, - 63, - 64, - 65, - 66, - 67, - 68, - 69, - 70, - 71, - 72, - 73, - 74, - 75, - 76, - 77, - 78, - 79, - 80, - 81, - 82, - 83, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 96, - 97, - 98, - 99, - 100, - 101, - 102, - 103, - 104, - 105, - 106, - 107, - 108, - 109, - 110, - 111, - 112, - 113, - 114, - 115, - 116, - 117, - 118, - 119, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 136, - 137, - 138, - 139, - 140, - 141, - 142, - 143, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 152, - 153, - 154, - 155, - 156, - 157, - 158, - 159, - 160, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 177, - 178, - 179, - 180, - 181, - 182, - 183, - 184, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 197, - 198, - 199, - 200, - 201, - 202, - 203, - 204, - 205, - 206, - 207, - 208, - 209, - 210, - 211, - 212, - 213, - 214, - 215, - 216, - 217, - 218, - 219, - 220, - 221, - 222, - 223, - 224, - 225, - 226, - 227, - 228, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 241, - 242, - 243, - 244, - 245, - 246, - 247, - 248, - 249, - 250, - 251, - 252, - 253, - 254 - ], - "type": 2 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 4 - } - }, - { - "OFPTableFeaturePropActions": { - "action_ids": [ - { - "OFPActionId": { - "len": 4, - "type": 0 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 22 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 21 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 15 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 16 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 23 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 24 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 11 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 12 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 17 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 18 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 19 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 20 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 26 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 27 - } - }, - { - "OFPActionId": { - "len": 4, - "type": 25 - } - } - ], - "length": 68, - "type": 6 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 8 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 10 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 12 - } - }, - { - "OFPTableFeaturePropOxm": { - "length": 152, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "in_port" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "metadata" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "eth_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_vid" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "vlan_pcp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_dscp" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_ecn" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ip_proto" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv4_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "tcp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "udp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "sctp_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv4_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_op" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_spa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tpa" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_sha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "arp_tha" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_src" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_dst" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_flabel" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_type" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "icmpv6_code" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_target" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_sll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "ipv6_nd_tll" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_label" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_tc" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "mpls_bos" - } - }, - { - "OFPOxmId": { - "hasmask": 0, - "length": 0, - "type": "pbb_isid" - } - } - ], - "type": 14 - } - } - ], - "table_id": 9 - } - } - ], - "flags": 1, - "type": 12 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-55-ofp_group_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-55-ofp_group_stats_request.packet.json deleted file mode 100644 index b200a81c..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-55-ofp_group_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPGroupStatsRequest": { - "flags": 0, - "group_id": 4294967292, - "type": 6 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-56-ofp_group_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-56-ofp_group_stats_reply.packet.json deleted file mode 100644 index cb979e54..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-56-ofp_group_stats_reply.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "OFPGroupStatsReply": { - "body": [ - { - "OFPGroupStats": { - "bucket_stats": [ - { - "OFPBucketCounter": { - "byte_count": 2345, - "packet_count": 234 - } - } - ], - "byte_count": 12345, - "duration_nsec": 609036000, - "duration_sec": 9, - "group_id": 1, - "length": 56, - "packet_count": 123, - "ref_count": 2 - } - } - ], - "flags": 0, - "type": 6 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-57-ofp_packet_in.packet.json b/ryu/tests/unit/ofproto/json/of14/5-57-ofp_packet_in.packet.json deleted file mode 100644 index d326b907..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-57-ofp_packet_in.packet.json +++ /dev/null @@ -1,298 +0,0 @@ -{ - "OFPPacketIn": { - "buffer_id": 4026531840, - "cookie": 283686884868096, - "data": "", - "match": { - "OFPMatch": { - "length": 329, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 84281096 - } - }, - { - "OXMTlv": { - "field": "in_phy_port", - "mask": null, - "value": 16909060 - } - }, - { - "OXMTlv": { - "field": "metadata", - "mask": null, - "value": 283686952306183 - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "ff:ff:ff:ff:ff:ff" - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 999 - } - }, - { - "OXMTlv": { - "field": "ip_dscp", - "mask": null, - "value": 9 - } - }, - { - "OXMTlv": { - "field": "ip_ecn", - "mask": null, - "value": 3 - } - }, - { - "OXMTlv": { - "field": "ip_proto", - "mask": null, - "value": 99 - } - }, - { - "OXMTlv": { - "field": "ipv4_src", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "tcp_src", - "mask": null, - "value": 8080 - } - }, - { - "OXMTlv": { - "field": "tcp_dst", - "mask": null, - "value": 18080 - } - }, - { - "OXMTlv": { - "field": "udp_src", - "mask": null, - "value": 28080 - } - }, - { - "OXMTlv": { - "field": "udp_dst", - "mask": null, - "value": 55936 - } - }, - { - "OXMTlv": { - "field": "sctp_src", - "mask": null, - "value": 48080 - } - }, - { - "OXMTlv": { - "field": "sctp_dst", - "mask": null, - "value": 59328 - } - }, - { - "OXMTlv": { - "field": "icmpv4_type", - "mask": null, - "value": 100 - } - }, - { - "OXMTlv": { - "field": "icmpv4_code", - "mask": null, - "value": 101 - } - }, - { - "OXMTlv": { - "field": "arp_op", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "arp_spa", - "mask": null, - "value": "10.0.0.1" - } - }, - { - "OXMTlv": { - "field": "arp_tpa", - "mask": null, - "value": "10.0.0.3" - } - }, - { - "OXMTlv": { - "field": "arp_sha", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_tha", - "mask": null, - "value": "00:00:00:00:00:00" - } - }, - { - "OXMTlv": { - "field": "ipv6_src", - "mask": null, - "value": "fe80::f00b:a4ff:fe48:28a5" - } - }, - { - "OXMTlv": { - "field": "ipv6_dst", - "mask": null, - "value": "fe80::f00b:a4ff:fe05:b7dc" - } - }, - { - "OXMTlv": { - "field": "ipv6_flabel", - "mask": null, - "value": 541473 - } - }, - { - "OXMTlv": { - "field": "icmpv6_type", - "mask": null, - "value": 200 - } - }, - { - "OXMTlv": { - "field": "icmpv6_code", - "mask": null, - "value": 201 - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_target", - "mask": null, - "value": "fe80::a60:6eff:fe7f:74e7" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_sll", - "mask": null, - "value": "00:00:00:00:02:9a" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_tll", - "mask": null, - "value": "00:00:00:00:02:2b" - } - }, - { - "OXMTlv": { - "field": "mpls_label", - "mask": null, - "value": 624485 - } - }, - { - "OXMTlv": { - "field": "mpls_tc", - "mask": null, - "value": 5 - } - }, - { - "OXMTlv": { - "field": "mpls_bos", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "pbb_isid", - "mask": null, - "value": 11259375 - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 651061555542690057 - } - }, - { - "OXMTlv": { - "field": "ipv6_exthdr", - "mask": null, - "value": 500 - } - }, - { - "OXMTlv": { - "field": "pbb_uca", - "mask": null, - "value": 1 - } - } - ], - "type": 1 - } - }, - "reason": 0, - "table_id": 200, - "total_len": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-58-ofp_flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of14/5-58-ofp_flow_mod.packet.json deleted file mode 100644 index 7095f751..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-58-ofp_flow_mod.packet.json +++ /dev/null @@ -1,305 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [], - "match": { - "OFPMatch": { - "length": 329, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 84281096 - } - }, - { - "OXMTlv": { - "field": "in_phy_port", - "mask": null, - "value": 16909060 - } - }, - { - "OXMTlv": { - "field": "metadata", - "mask": null, - "value": 283686952306183 - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "ff:ff:ff:ff:ff:ff" - } - }, - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 999 - } - }, - { - "OXMTlv": { - "field": "ip_dscp", - "mask": null, - "value": 9 - } - }, - { - "OXMTlv": { - "field": "ip_ecn", - "mask": null, - "value": 3 - } - }, - { - "OXMTlv": { - "field": "ip_proto", - "mask": null, - "value": 99 - } - }, - { - "OXMTlv": { - "field": "ipv4_src", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "1.2.3.4" - } - }, - { - "OXMTlv": { - "field": "tcp_src", - "mask": null, - "value": 8080 - } - }, - { - "OXMTlv": { - "field": "tcp_dst", - "mask": null, - "value": 18080 - } - }, - { - "OXMTlv": { - "field": "udp_src", - "mask": null, - "value": 28080 - } - }, - { - "OXMTlv": { - "field": "udp_dst", - "mask": null, - "value": 55936 - } - }, - { - "OXMTlv": { - "field": "sctp_src", - "mask": null, - "value": 48080 - } - }, - { - "OXMTlv": { - "field": "sctp_dst", - "mask": null, - "value": 59328 - } - }, - { - "OXMTlv": { - "field": "icmpv4_type", - "mask": null, - "value": 100 - } - }, - { - "OXMTlv": { - "field": "icmpv4_code", - "mask": null, - "value": 101 - } - }, - { - "OXMTlv": { - "field": "arp_op", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "arp_spa", - "mask": null, - "value": "10.0.0.1" - } - }, - { - "OXMTlv": { - "field": "arp_tpa", - "mask": null, - "value": "10.0.0.3" - } - }, - { - "OXMTlv": { - "field": "arp_sha", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - }, - { - "OXMTlv": { - "field": "arp_tha", - "mask": null, - "value": "00:00:00:00:00:00" - } - }, - { - "OXMTlv": { - "field": "ipv6_src", - "mask": null, - "value": "fe80::f00b:a4ff:fe48:28a5" - } - }, - { - "OXMTlv": { - "field": "ipv6_dst", - "mask": null, - "value": "fe80::f00b:a4ff:fe05:b7dc" - } - }, - { - "OXMTlv": { - "field": "ipv6_flabel", - "mask": null, - "value": 541473 - } - }, - { - "OXMTlv": { - "field": "icmpv6_type", - "mask": null, - "value": 200 - } - }, - { - "OXMTlv": { - "field": "icmpv6_code", - "mask": null, - "value": 201 - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_target", - "mask": null, - "value": "fe80::a60:6eff:fe7f:74e7" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_sll", - "mask": null, - "value": "00:00:00:00:02:9a" - } - }, - { - "OXMTlv": { - "field": "ipv6_nd_tll", - "mask": null, - "value": "00:00:00:00:02:2b" - } - }, - { - "OXMTlv": { - "field": "mpls_label", - "mask": null, - "value": 624485 - } - }, - { - "OXMTlv": { - "field": "mpls_tc", - "mask": null, - "value": 5 - } - }, - { - "OXMTlv": { - "field": "mpls_bos", - "mask": null, - "value": 1 - } - }, - { - "OXMTlv": { - "field": "pbb_isid", - "mask": null, - "value": 11259375 - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 651061555542690057 - } - }, - { - "OXMTlv": { - "field": "ipv6_exthdr", - "mask": null, - "value": 500 - } - }, - { - "OXMTlv": { - "field": "pbb_uca", - "mask": null, - "value": 1 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-59-ofp_experimenter_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-59-ofp_experimenter_request.packet.json deleted file mode 100644 index 93af3039..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-59-ofp_experimenter_request.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "OFPExperimenterStatsRequest": { - "data": "aG9nZWhvZ2U=", - "exp_type": 3405678728, - "experimenter": 3735928495, - "flags": 0, - "type": 65535 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-6-ofp_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-6-ofp_features_reply.packet.json deleted file mode 100644 index 12e8744a..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-6-ofp_features_reply.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "OFPSwitchFeatures": { - "auxiliary_id": 99, - "capabilities": 79, - "datapath_id": 9210263729383, - "n_buffers": 0, - "n_tables": 255 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-60-ofp_experimenter_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-60-ofp_experimenter_reply.packet.json deleted file mode 100644 index 1eb06b84..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-60-ofp_experimenter_reply.packet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "OFPExperimenterStatsReply": { - "body": { - "OFPExperimenterMultipart": { - "data": "dGVzdGRhdGE5OTk5OTk5OQ==", - "exp_type": 3405674359, - "experimenter": 3735928495 - } - }, - "flags": 0, - "type": 65535 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-61-ofp_table_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-61-ofp_table_desc_request.packet.json deleted file mode 100644 index f5a4cde0..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-61-ofp_table_desc_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPTableDescStatsRequest": { - "flags": 0, - "type": 14 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-62-ofp_table_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-62-ofp_table_desc_reply.packet.json deleted file mode 100644 index 1f3d7142..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-62-ofp_table_desc_reply.packet.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "OFPTableDescStatsReply": { - "body": [ - { - "OFPTableDesc": { - "config": 0, - "length": 24, - "properties": [ - { - "OFPTableModPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - } - ], - "table_id": 7 - } - }, - { - "OFPTableDesc": { - "config": 0, - "length": 80, - "properties": [ - { - "OFPTableModPropEviction": { - "flags": 0, - "length": 8, - "type": 2 - } - }, - { - "OFPTableModPropVacancy": { - "length": 8, - "type": 3, - "vacancy": 0, - "vacancy_down": 0, - "vacancy_up": 0 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "table_id": 8 - } - } - ], - "flags": 0, - "type": 14 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-63-ofp_queue_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-63-ofp_queue_desc_request.packet.json deleted file mode 100644 index d58a2b05..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-63-ofp_queue_desc_request.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPQueueDescStatsRequest": { - "flags": 0, - "port_no": 7, - "queue_id": 4294967295, - "type": 15 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-64-ofp_queue_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-64-ofp_queue_desc_reply.packet.json deleted file mode 100644 index 26c8f7d5..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-64-ofp_queue_desc_reply.packet.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "OFPQueueDescStatsReply": { - "body": [ - { - "OFPQueueDesc": { - "len": 32, - "port_no": 7, - "properties": [ - { - "OFPQueueDescPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - } - ], - "queue_id": 0 - } - }, - { - "OFPQueueDesc": { - "len": 88, - "port_no": 8, - "properties": [ - { - "OFPQueueDescPropMinRate": { - "length": 8, - "rate": 300, - "type": 1 - } - }, - { - "OFPQueueDescPropMaxRate": { - "length": 8, - "rate": 900, - "type": 2 - } - }, - { - "OFPQueueDescPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPQueueDescPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPQueueDescPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "queue_id": 1 - } - } - ], - "flags": 0, - "type": 15 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-65-ofp_role_status.packet.json b/ryu/tests/unit/ofproto/json/of14/5-65-ofp_role_status.packet.json deleted file mode 100644 index 08e46df3..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-65-ofp_role_status.packet.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "OFPRoleStatus": { - "generation_id": 7, - "properties": [ - { - "OFPRolePropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPRolePropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPRolePropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "reason": 0, - "role": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-66-ofp_flow_monitor_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-66-ofp_flow_monitor_request.packet.json deleted file mode 100644 index aed7ddaa..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-66-ofp_flow_monitor_request.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "OFPFlowMonitorRequest": { - "command": 0, - "flags": 0, - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "monitor_flags": 15, - "monitor_id": 100000000, - "out_group": 4294967295, - "out_port": 22, - "table_id": 33, - "type": 16 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-67-ofp_flow_monitor_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-67-ofp_flow_monitor_reply.packet.json deleted file mode 100644 index 8c028877..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-67-ofp_flow_monitor_reply.packet.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "OFPFlowMonitorReply": { - "body": [ - { - "OFPFlowUpdateFull": { - "cookie": 0, - "event": 0, - "hard_timeout": 700, - "idle_timeout": 600, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 0, - "port": 4294967290, - "type": 0 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "length": 64, - "match": { - "OFPMatch": { - "length": 10, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - } - ], - "type": 1 - } - }, - "priority": 3, - "reason": 0, - "table_id": 0 - } - }, - { - "OFPFlowUpdateAbbrev": { - "event": 4, - "length": 8, - "xid": 1234 - } - }, - { - "OFPFlowUpdatePaused": { - "event": 5, - "length": 8 - } - } - ], - "flags": 0, - "type": 16 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-68-ofp_table_status.packet.json b/ryu/tests/unit/ofproto/json/of14/5-68-ofp_table_status.packet.json deleted file mode 100644 index fde5fb77..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-68-ofp_table_status.packet.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "OFPTableStatus": { - "reason": 3, - "table": { - "OFPTableDesc": { - "config": 0, - "length": 80, - "properties": [ - { - "OFPTableModPropEviction": { - "flags": 0, - "length": 8, - "type": 2 - } - }, - { - "OFPTableModPropVacancy": { - "length": 8, - "type": 3, - "vacancy": 0, - "vacancy_down": 0, - "vacancy_up": 0 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "table_id": 8 - } - } - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-69-ofp_bundle_ctrl_msg.packet.json b/ryu/tests/unit/ofproto/json/of14/5-69-ofp_bundle_ctrl_msg.packet.json deleted file mode 100644 index 3e996eb5..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-69-ofp_bundle_ctrl_msg.packet.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "OFPBundleCtrlMsg": { - "bundle_id": 1234, - "flags": 1, - "properties": [ - { - "OFPBundlePropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPBundlePropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPBundlePropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "type": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-7-ofp_set_config.packet.json b/ryu/tests/unit/ofproto/json/of14/5-7-ofp_set_config.packet.json deleted file mode 100644 index cd5398b7..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-7-ofp_set_config.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPSetConfig": { - "flags": 0, - "miss_send_len": 128 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-70-ofp_bundle_add_msg.packet.json b/ryu/tests/unit/ofproto/json/of14/5-70-ofp_bundle_add_msg.packet.json deleted file mode 100644 index 53e9f7ea..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-70-ofp_bundle_add_msg.packet.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "OFPBundleAddMsg": { - "bundle_id": 1234, - "flags": 1, - "message": { - "OFPEchoRequest": { - "data": null - } - }, - "properties": [ - { - "OFPBundlePropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPBundlePropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPBundlePropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-71-ofp_requestforward.packet.json b/ryu/tests/unit/ofproto/json/of14/5-71-ofp_requestforward.packet.json deleted file mode 100644 index e2def4fc..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-71-ofp_requestforward.packet.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "OFPRequestForward": { - "request": { - "OFPGroupMod": { - "buckets": [ - { - "OFPBucket": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 2, - "type": 0 - } - } - ], - "len": 32, - "watch_group": 1, - "watch_port": 1, - "weight": 1 - } - } - ], - "command": 0, - "group_id": 1, - "type": 0 - } - } - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-8-ofp_get_config_request.packet.json b/ryu/tests/unit/ofproto/json/of14/5-8-ofp_get_config_request.packet.json deleted file mode 100644 index 06fe51f4..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-8-ofp_get_config_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPGetConfigRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of14/5-9-ofp_get_config_reply.packet.json b/ryu/tests/unit/ofproto/json/of14/5-9-ofp_get_config_reply.packet.json deleted file mode 100644 index 62b37b4d..00000000 --- a/ryu/tests/unit/ofproto/json/of14/5-9-ofp_get_config_reply.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGetConfigReply": { - "flags": 0, - "miss_send_len": 128 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/lib-ofctl-ofp_table_features_request.packet.json b/ryu/tests/unit/ofproto/json/of14/lib-ofctl-ofp_table_features_request.packet.json deleted file mode 100644 index 6501de15..00000000 --- a/ryu/tests/unit/ofproto/json/of14/lib-ofctl-ofp_table_features_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPTableFeaturesStatsRequest": { - "body": [], - "flags": 0, - "type": 12 - } -} diff --git a/ryu/tests/unit/ofproto/json/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet.json b/ryu/tests/unit/ofproto/json/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet.json deleted file mode 100644 index b859650d..00000000 --- a/ryu/tests/unit/ofproto/json/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "OFPPacketOut": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 4294967292, - "type": 0 - } - } - ], - "actions_len": 16, - "buffer_id": 4294967295, - "data": { - "Packet": { - "protocols": [ - { - "ethernet": { - "dst": "f2:0b:a4:d0:3f:70", - "ethertype": 2048, - "src": "f2:0b:a4:7d:f8:ea" - } - }, - { - "ipv4": { - "csum": 44939, - "dst": "10.0.0.2", - "flags": 0, - "header_length": 5, - "identification": 63514, - "offset": 0, - "option": null, - "proto": 1, - "src": "10.0.0.1", - "tos": 0, - "total_length": 84, - "ttl": 255, - "version": 4 - } - }, - { - "icmp": { - "code": 0, - "csum": 520, - "data": { - "echo": { - "data": "MdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", - "id": 63328, - "seq": 0 - } - }, - "type": 8 - } - } - ] - } - }, - "in_port": 4294967293 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json deleted file mode 100644 index 9626ceea..00000000 --- a/ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "OFPFlowDescStatsReply": { - "body": [ - { - "OFPFlowDesc": { - "cookie": 1234605616436508552, - "flags": 1, - "hard_timeout": 255, - "idle_timeout": 255, - "importance": 43690, - "instructions": [ - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 2, - "type": 1 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionMeter": { - "len": 8, - "meter_id": 2, - "type": 29 - } - } - ], - "len": 8, - "type": 3 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionCopyField": { - "type": 28, - "len": 20, - "n_bits": 32, - "src_offset": 1, - "dst_offset": 2, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": false, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": false, - "length": 0, - "type": "eth_dst" - } - } - ] - } - } - ], - "len": 28, - "type": 4 - } - } - ], - "length": 84, - "match": { - "OFPMatch": { - "length": 12, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 1 - } - } - ], - "type": 1 - } - }, - "priority": 5, - "stats": { - "OFPStats": { - "length": 12, - "oxs_fields": [ - { - "OXSTlv": { - "field": "flow_count", - "value": 1 - } - } - ] - } - }, - "table_id": 1 - } - } - ], - "flags": 0, - "type": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json deleted file mode 100644 index 62e46c65..00000000 --- a/ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "OFPFlowDescStatsRequest": { - "cookie": 1234605616436508552, - "cookie_mask": 18446744073709551615, - "flags": 0, - "match": { - "OFPMatch": { - "length": 12, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 1 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 1, - "type": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_mod.packet.json deleted file mode 100644 index 7fc12ed3..00000000 --- a/ryu/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_mod.packet.json +++ /dev/null @@ -1,234 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 258 - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionCopyTtlOut": { - "len": 8, - "type": 11 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionPopPbb": { - "len": 8, - "type": 27 - } - }, - { - "OFPActionPushPbb": { - "ethertype": 4660, - "len": 8, - "type": 26 - } - }, - { - "OFPActionPopMpls": { - "ethertype": 39030, - "len": 8, - "type": 20 - } - }, - { - "OFPActionPushMpls": { - "ethertype": 34887, - "len": 8, - "type": 19 - } - }, - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionPushVlan": { - "ethertype": 33024, - "len": 8, - "type": 17 - } - }, - { - "OFPActionDecMplsTtl": { - "len": 8, - "type": 16 - } - }, - { - "OFPActionSetMplsTtl": { - "len": 8, - "mpls_ttl": 10, - "type": 15 - } - }, - { - "OFPActionDecNwTtl": { - "len": 8, - "type": 24 - } - }, - { - "OFPActionSetNwTtl": { - "len": 8, - "nw_ttl": 10, - "type": 23 - } - }, - { - "OFPActionExperimenterUnknown": { - "data": "AAECAwQFBgc=", - "experimenter": 101, - "len": 16, - "type": 65535 - } - }, - { - "OFPActionSetQueue": { - "len": 8, - "queue_id": 3, - "type": 21 - } - }, - { - "OFPActionMeter": { - "len": 8, - "meter_id": 2, - "type": 29 - } - }, - { - "OFPActionGroup": { - "group_id": 99, - "len": 8, - "type": 22 - } - }, - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 6, - "type": 0 - } - } - ], - "len": 176, - "type": 3 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "01:02:03:04:05:06" - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "pbb_uca", - "mask": null, - "value": 1 - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionCopyField": { - "type": 28, - "len": 20, - "n_bits": 32, - "src_offset": 1, - "dst_offset": 2, - "oxm_ids": [ - { - "OFPOxmId": { - "hasmask": false, - "length": 0, - "type": "eth_src" - } - }, - { - "OFPOxmId": { - "hasmask": false, - "length": 0, - "type": "eth_dst" - } - } - ] - } - } - ], - "len": 60, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/lib-ofctl-ofp_queue_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/lib-ofctl-ofp_queue_stats_request.packet.json deleted file mode 100644 index 41d30f70..00000000 --- a/ryu/tests/unit/ofproto/json/of15/lib-ofctl-ofp_queue_stats_request.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPQueueStatsRequest": { - "flags": 0, - "port_no": 4294967295, - "queue_id": 4294967295, - "type": 5 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/lib-ofctl-ofp_table_features_request.packet.json b/ryu/tests/unit/ofproto/json/of15/lib-ofctl-ofp_table_features_request.packet.json deleted file mode 100644 index 6501de15..00000000 --- a/ryu/tests/unit/ofproto/json/of15/lib-ofctl-ofp_table_features_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPTableFeaturesStatsRequest": { - "body": [], - "flags": 0, - "type": 12 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json deleted file mode 100644 index 07cb6c2f..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "OFPAggregateStatsReply": { - "body": { - "OFPAggregateStats": { - "length": 16, - "stats": { - "OFPStats": { - "length": 12, - "oxs_fields": [ - { - "OXSTlv": { - "field": "flow_count", - "value": 1 - } - } - ] - } - } - } - }, - "flags": 0, - "type": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json deleted file mode 100644 index 248131fd..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "OFPAggregateStatsRequest": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 255, - "type": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json deleted file mode 100644 index 11f8cfcc..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPBarrierReply": {} -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json deleted file mode 100644 index 2aae9ec3..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPBarrierRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_add.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_add.packet.json deleted file mode 100644 index 5a1ddb19..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_add.packet.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "OFPBundleAddMsg": { - "bundle_id": 99999999, - "flags": 1, - "message": { - "OFPFlowMod": { - "buffer_id": 0, - "command": 0, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 39032, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.9" - } - }, - "len": 16, - "type": 25 - } - }, - { - "NXActionLearn": { - "cookie": 0, - "experimenter": 8992, - "fin_hard_timeout": 0, - "fin_idle_timeout": 0, - "flags": 0, - "hard_timeout": 300, - "idle_timeout": 0, - "len": 96, - "priority": 1, - "specs": [ - { - "NXFlowSpecMatch": { - "dst": [ - "vlan_vid", - 0 - ], - "n_bits": 12, - "src": [ - "vlan_vid", - 0 - ] - } - }, - { - "NXFlowSpecMatch": { - "dst": [ - "eth_dst_nxm", - 0 - ], - "n_bits": 48, - "src": [ - "eth_src_nxm", - 0 - ] - } - }, - { - "NXFlowSpecLoad": { - "dst": [ - "vlan_vid", - 0 - ], - "n_bits": 12, - "src": 0 - } - }, - { - "NXFlowSpecLoad": { - "dst": [ - "tunnel_id_nxm", - 0 - ], - "n_bits": 64, - "src": [ - "tunnel_id_nxm", - 0 - ] - } - }, - { - "NXFlowSpecOutput": { - "dst": "", - "n_bits": 32, - "src": [ - "in_port", - 0 - ] - } - } - ], - "subtype": 16, - "table_id": 99, - "type": 65535 - } - } - ], - "len": 128, - "type": 4 - } - }, - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 100, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 70, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "aa:bb:cc:99:88:77" - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5095 - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.1" - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 50000 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "192.168.2.3" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "192.168.2.4" - } - } - ], - "type": 1 - } - }, - "out_group": 0, - "out_port": 0, - "priority": 0, - "table_id": 2 - } - }, - "properties": [] - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_ctrl.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_ctrl.packet.json deleted file mode 100644 index d7e858fd..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_ctrl.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPBundleCtrlMsg": { - "bundle_id": 99999999, - "flags": 1, - "properties": [], - "type": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_reply.packet.json deleted file mode 100644 index 943d7857..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_reply.packet.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "OFPBundleFeaturesStatsReply": { - "body": { - "OFPBundleFeaturesStats": { - "capabilities": 7, - "properties": [ - { - "OFPBundleFeaturesPropTime": { - "length": 72, - "sched_accuracy": { - "OFPTime": { - "nanoseconds": 1717986918, - "seconds": 6148914691236517205 - } - }, - "sched_max_future": { - "OFPTime": { - "nanoseconds": 2290649224, - "seconds": 8608480567731124087 - } - }, - "sched_max_past": { - "OFPTime": { - "nanoseconds": 2863311530, - "seconds": 11068046444225730969 - } - }, - "timestamp": { - "OFPTime": { - "nanoseconds": 3435973836, - "seconds": 13527612320720337851 - } - }, - "type": 1 - } - } - ] - } - }, - "flags": 0, - "type": 19 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_request.packet.json deleted file mode 100644 index 325181c1..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_request.packet.json +++ /dev/null @@ -1,39 +0,0 @@ -{ - "OFPBundleFeaturesStatsRequest": { - "feature_request_flags": 3, - "flags": 0, - "properties": [ - { - "OFPBundleFeaturesPropTime": { - "length": 72, - "sched_accuracy": { - "OFPTime": { - "nanoseconds": 1717986918, - "seconds": 6148914691236517205 - } - }, - "sched_max_future": { - "OFPTime": { - "nanoseconds": 2290649224, - "seconds": 8608480567731124087 - } - }, - "sched_max_past": { - "OFPTime": { - "nanoseconds": 2863311530, - "seconds": 11068046444225730969 - } - }, - "timestamp": { - "OFPTime": { - "nanoseconds": 3435973836, - "seconds": 13527612320720337851 - } - }, - "type": 1 - } - } - ], - "type": 19 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status.packet.json deleted file mode 100644 index d9a74bfe..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status.packet.json +++ /dev/null @@ -1,22 +0,0 @@ -{ - "OFPControllerStatus": { - "status": { - "OFPControllerStatusStats": { - "channel_status": 1, - "length": 48, - "properties": [ - { - "OFPControllerStatusPropUri": { - "length": 26, - "type": 0, - "uri": "tls:192.168.34.23:6653" - } - } - ], - "reason": 1, - "role": 1, - "short_id": 65535 - } - } - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_reply.packet.json deleted file mode 100644 index 002f0f1d..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_reply.packet.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "OFPControllerStatusStatsReply": { - "body": [ - { - "OFPControllerStatusStats": { - "channel_status": 1, - "length": 48, - "properties": [ - { - "OFPControllerStatusPropUri": { - "length": 26, - "type": 0, - "uri": "tls:192.168.34.23:6653" - } - } - ], - "reason": 1, - "role": 1, - "short_id": 65535 - } - } - ], - "flags": 0, - "type": 18 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_request.packet.json deleted file mode 100644 index d9a8ef8b..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPControllerStatusStatsRequest": { - "flags": 0, - "type": 18 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json deleted file mode 100644 index 26e5dc2d..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "OFPDescStatsReply": { - "body": { - "OFPDescStats": { - "dp_desc": "dp", - "hw_desc": "hw", - "mfr_desc": "mfr", - "serial_num": "serial", - "sw_desc": "sw" - } - }, - "flags": 0, - "type": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json deleted file mode 100644 index 5b23f8bc..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPDescStatsRequest": { - "flags": 0, - "type": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json deleted file mode 100644 index 011bd6de..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPEchoReply": { - "data": "" - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json deleted file mode 100644 index 501a8479..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "OFPEchoRequest": { - "data": "" - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json deleted file mode 100644 index b76f05c7..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPErrorMsg": { - "code": 6, - "data": "Bg4ACAAAAAA=", - "type": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json deleted file mode 100644 index 37bfb6a9..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPErrorExperimenterMsg": { - "data": "amlra2VuIGRhdGE=", - "exp_type": 60000, - "experimenter": 999999, - "type": 65535 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter.packet.json deleted file mode 100644 index 0e749179..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPExperimenter": { - "data": "bmF6bw==", - "exp_type": 123456789, - "experimenter": 98765432 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json deleted file mode 100644 index 1eb06b84..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "OFPExperimenterStatsReply": { - "body": { - "OFPExperimenterMultipart": { - "data": "dGVzdGRhdGE5OTk5OTk5OQ==", - "exp_type": 3405674359, - "experimenter": 3735928495 - } - }, - "flags": 0, - "type": 65535 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json deleted file mode 100644 index 93af3039..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "OFPExperimenterStatsRequest": { - "data": "aG9nZWhvZ2U=", - "exp_type": 3405678728, - "experimenter": 3735928495, - "flags": 0, - "type": 65535 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json deleted file mode 100644 index 3d828093..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "OFPSwitchFeatures": { - "auxiliary_id": 0, - "capabilities": 79, - "datapath_id": 1, - "n_buffers": 255, - "n_tables": 255 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json deleted file mode 100644 index 8f48ad5a..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPFeaturesRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_reply.packet.json deleted file mode 100644 index 3caab6f9..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_reply.packet.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "OFPFlowDescStatsReply": { - "body": [ - { - "OFPFlowDesc": { - "cookie": 1234605616436508552, - "flags": 1, - "hard_timeout": 255, - "idle_timeout": 255, - "importance": 43690, - "instructions": [ - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 2, - "type": 1 - } - } - ], - "length": 64, - "match": { - "OFPMatch": { - "length": 12, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 1 - } - } - ], - "type": 1 - } - }, - "priority": 5, - "stats": { - "OFPStats": { - "length": 12, - "oxs_fields": [ - { - "OXSTlv": { - "field": "flow_count", - "value": 1 - } - } - ] - } - }, - "table_id": 1 - } - } - ], - "flags": 0, - "type": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_request.packet.json deleted file mode 100644 index 62e46c65..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_request.packet.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "OFPFlowDescStatsRequest": { - "cookie": 1234605616436508552, - "cookie_mask": 18446744073709551615, - "flags": 0, - "match": { - "OFPMatch": { - "length": 12, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 1 - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 1, - "type": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod.packet.json deleted file mode 100644 index ac6dce7e..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod.packet.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 0, - "command": 0, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 39032, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.9" - } - }, - "len": 16, - "type": 25 - } - }, - { - "NXActionLearn": { - "cookie": 0, - "experimenter": 8992, - "fin_hard_timeout": 0, - "fin_idle_timeout": 0, - "flags": 0, - "hard_timeout": 300, - "idle_timeout": 0, - "len": 96, - "priority": 1, - "specs": [ - { - "NXFlowSpecMatch": { - "dst": [ - "vlan_vid", - 0 - ], - "n_bits": 12, - "src": [ - "vlan_vid", - 0 - ] - } - }, - { - "NXFlowSpecMatch": { - "dst": [ - "eth_dst_nxm", - 0 - ], - "n_bits": 48, - "src": [ - "eth_src_nxm", - 0 - ] - } - }, - { - "NXFlowSpecLoad": { - "dst": [ - "vlan_vid", - 0 - ], - "n_bits": 12, - "src": 0 - } - }, - { - "NXFlowSpecLoad": { - "dst": [ - "tunnel_id_nxm", - 0 - ], - "n_bits": 64, - "src": [ - "tunnel_id_nxm", - 0 - ] - } - }, - { - "NXFlowSpecOutput": { - "dst": "", - "n_bits": 32, - "src": [ - "in_port", - 0 - ] - } - } - ], - "subtype": 16, - "table_id": 99, - "type": 65535 - } - } - ], - "len": 128, - "type": 4 - } - }, - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 100, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 70, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "aa:bb:cc:99:88:77" - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5095 - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.1" - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 50000 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "192.168.2.3" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "192.168.2.4" - } - } - ], - "type": 1 - } - }, - "out_group": 0, - "out_port": 0, - "priority": 0, - "table_id": 2 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_conjunction.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_conjunction.packet.json deleted file mode 100644 index 6ca74d51..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_conjunction.packet.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 0, - "command": 0, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 39032, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "NXActionConjunction": { - "clause": 1, - "experimenter": 8992, - "id": 11259375, - "len": 16, - "n_clauses": 2, - "subtype": 34, - "type": 65535 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 70, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - }, - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "aa:bb:cc:99:88:77" - } - }, - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2048 - } - }, - { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 5095 - } - }, - { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.1" - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 50000 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "192.168.2.3" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "192.168.2.4" - } - } - ], - "type": 1 - } - }, - "out_group": 0, - "out_port": 0, - "priority": 0, - "table_id": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_match_conj.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_match_conj.packet.json deleted file mode 100644 index 2d0b9ad4..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_match_conj.packet.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 0, - "command": 0, - "cookie": 1311768467463790320, - "cookie_mask": 18446744073709551615, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 39032, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.9" - } - }, - "len": 16, - "type": 25 - } - } - ], - "len": 32, - "type": 4 - } - }, - { - "OFPInstructionGotoTable": { - "len": 8, - "table_id": 100, - "type": 1 - } - } - ], - "match": { - "OFPMatch": { - "length": 12, - "oxm_fields": [ - { - "OXMTlv": { - "field": "conj_id", - "mask": null, - "value": 11259375 - } - } - ], - "type": 1 - } - }, - "out_group": 0, - "out_port": 0, - "priority": 0, - "table_id": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json deleted file mode 100644 index 5f789d52..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "OFPFlowMod": { - "buffer_id": 65535, - "command": 0, - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "hard_timeout": 0, - "idle_timeout": 0, - "importance": 0, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "vlan_vid", - "mask": null, - "value": 258 - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionCopyTtlOut": { - "len": 8, - "type": 11 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionCopyTtlIn": { - "len": 8, - "type": 12 - } - }, - { - "OFPActionPopPbb": { - "len": 8, - "type": 27 - } - }, - { - "OFPActionPushPbb": { - "ethertype": 4660, - "len": 8, - "type": 26 - } - }, - { - "OFPActionPopMpls": { - "ethertype": 39030, - "len": 8, - "type": 20 - } - }, - { - "OFPActionPushMpls": { - "ethertype": 34887, - "len": 8, - "type": 19 - } - }, - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionPushVlan": { - "ethertype": 33024, - "len": 8, - "type": 17 - } - }, - { - "OFPActionDecMplsTtl": { - "len": 8, - "type": 16 - } - }, - { - "OFPActionSetMplsTtl": { - "len": 8, - "mpls_ttl": 10, - "type": 15 - } - }, - { - "OFPActionDecNwTtl": { - "len": 8, - "type": 24 - } - }, - { - "OFPActionSetNwTtl": { - "len": 8, - "nw_ttl": 10, - "type": 23 - } - }, - { - "OFPActionExperimenterUnknown": { - "data": "AAECAwQFBgc=", - "experimenter": 101, - "len": 16, - "type": 65535 - } - }, - { - "OFPActionSetQueue": { - "len": 8, - "queue_id": 3, - "type": 21 - } - }, - { - "OFPActionGroup": { - "group_id": 99, - "len": 8, - "type": 22 - } - }, - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 6, - "type": 0 - } - } - ], - "len": 176, - "type": 3 - } - }, - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "01:02:03:04:05:06" - } - }, - "len": 16, - "type": 25 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "pbb_uca", - "mask": null, - "value": 1 - } - }, - "len": 16, - "type": 25 - } - } - ], - "len": 40, - "type": 4 - } - } - ], - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "priority": 123, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json deleted file mode 100644 index 8c028877..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "OFPFlowMonitorReply": { - "body": [ - { - "OFPFlowUpdateFull": { - "cookie": 0, - "event": 0, - "hard_timeout": 700, - "idle_timeout": 600, - "instructions": [ - { - "OFPInstructionActions": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 0, - "port": 4294967290, - "type": 0 - } - } - ], - "len": 24, - "type": 4 - } - } - ], - "length": 64, - "match": { - "OFPMatch": { - "length": 10, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_type", - "mask": null, - "value": 2054 - } - } - ], - "type": 1 - } - }, - "priority": 3, - "reason": 0, - "table_id": 0 - } - }, - { - "OFPFlowUpdateAbbrev": { - "event": 4, - "length": 8, - "xid": 1234 - } - }, - { - "OFPFlowUpdatePaused": { - "event": 5, - "length": 8 - } - } - ], - "flags": 0, - "type": 16 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json deleted file mode 100644 index aed7ddaa..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "OFPFlowMonitorRequest": { - "command": 0, - "flags": 0, - "match": { - "OFPMatch": { - "length": 14, - "oxm_fields": [ - { - "OXMTlv": { - "field": "eth_dst", - "mask": null, - "value": "f2:0b:a4:7d:f8:ea" - } - } - ], - "type": 1 - } - }, - "monitor_flags": 15, - "monitor_id": 100000000, - "out_group": 4294967295, - "out_port": 22, - "table_id": 33, - "type": 16 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_removed.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_removed.packet.json deleted file mode 100644 index daf05248..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_removed.packet.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "OFPFlowRemoved": { - "cookie": 1234605616436508552, - "hard_timeout": 255, - "idle_timeout": 255, - "match": { - "OFPMatch": { - "length": 12, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 1 - } - } - ], - "type": 1 - } - }, - "priority": 1, - "reason": 0, - "stats": { - "OFPStats": { - "length": 12, - "oxs_fields": [ - { - "OXSTlv": { - "field": "flow_count", - "value": 1 - } - } - ] - } - }, - "table_id": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_reply.packet.json deleted file mode 100644 index e2713569..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_reply.packet.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "OFPFlowStatsReply": { - "body": [ - { - "OFPFlowStats": { - "length": 40, - "match": { - "OFPMatch": { - "length": 12, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 1 - } - } - ], - "type": 1 - } - }, - "priority": 1, - "reason": 0, - "stats": { - "OFPStats": { - "length": 12, - "oxs_fields": [ - { - "OXSTlv": { - "field": "flow_count", - "value": 1 - } - } - ] - } - }, - "table_id": 1 - } - } - ], - "flags": 0, - "type": 17 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json deleted file mode 100644 index cc9de0a6..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "OFPFlowStatsRequest": { - "cookie": 0, - "cookie_mask": 0, - "flags": 0, - "match": { - "OFPMatch": { - "length": 4, - "oxm_fields": [], - "type": 1 - } - }, - "out_group": 4294967295, - "out_port": 4294967295, - "table_id": 0, - "type": 17 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json deleted file mode 100644 index 82c9e794..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "OFPGetAsyncReply": { - "properties": [ - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 0 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 1 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 2 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 3 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 4 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 5 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 6 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 7 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 24, - "type": 8 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 24, - "type": 9 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 10 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 11 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65534 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json deleted file mode 100644 index 7daa5a0f..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPGetAsyncRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json deleted file mode 100644 index 62b37b4d..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGetConfigReply": { - "flags": 0, - "miss_send_len": 128 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json deleted file mode 100644 index 06fe51f4..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "OFPGetConfigRequest": {} -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_reply.packet.json deleted file mode 100644 index 03c136d7..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_reply.packet.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "OFPGroupDescStatsReply": { - "body": [ - { - "OFPGroupDescStats": { - "bucket_array_len": 32, - "buckets": [ - { - "OFPBucket": { - "action_array_len": 16, - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65509, - "port": 1, - "type": 0 - } - } - ], - "bucket_id": 65535, - "len": 32, - "properties": [ - { - "OFPGroupBucketPropWeight": { - "length": 8, - "type": 0, - "weight": 65535 - } - } - ] - } - } - ], - "group_id": 1, - "length": 48, - "properties": [], - "type": 1 - } - } - ], - "flags": 0, - "type": 7 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_request.packet.json deleted file mode 100644 index 1589ed61..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPGroupDescStatsRequest": { - "flags": 0, - "group_id": 52651, - "type": 7 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json deleted file mode 100644 index f059f994..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "OFPGroupFeaturesStatsReply": { - "body": { - "OFPGroupFeaturesStats": { - "actions": [ - 67082241, - 67082241, - 67082241, - 67082241 - ], - "capabilities": 5, - "max_groups": [ - 16777216, - 16777216, - 16777216, - 16777216 - ], - "types": 15 - } - }, - "flags": 0, - "type": 8 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json deleted file mode 100644 index edba5dc5..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPGroupFeaturesStatsRequest": { - "flags": 0, - "type": 8 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_mod.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_mod.packet.json deleted file mode 100644 index d168fefd..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_mod.packet.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "OFPGroupMod": { - "bucket_array_len": 56, - "buckets": [ - { - "OFPBucket": { - "action_array_len": 24, - "actions": [ - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.9" - } - }, - "len": 16, - "type": 25 - } - } - ], - "bucket_id": 305419896, - "len": 56, - "properties": [ - { - "OFPGroupBucketPropWeight": { - "length": 8, - "type": 0, - "weight": 52428 - } - }, - { - "OFPGroupBucketPropWatch": { - "length": 8, - "type": 1, - "watch": 56797 - } - }, - { - "OFPGroupBucketPropWatch": { - "length": 8, - "type": 2, - "watch": 4008636142 - } - } - ] - } - } - ], - "command": 3, - "command_bucket_id": 3149642683, - "group_id": 2863311530, - "properties": [], - "type": 1 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json deleted file mode 100644 index cb979e54..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "OFPGroupStatsReply": { - "body": [ - { - "OFPGroupStats": { - "bucket_stats": [ - { - "OFPBucketCounter": { - "byte_count": 2345, - "packet_count": 234 - } - } - ], - "byte_count": 12345, - "duration_nsec": 609036000, - "duration_sec": 9, - "group_id": 1, - "length": 56, - "packet_count": 123, - "ref_count": 2 - } - } - ], - "flags": 0, - "type": 6 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json deleted file mode 100644 index b200a81c..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPGroupStatsRequest": { - "flags": 0, - "group_id": 4294967292, - "type": 6 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json deleted file mode 100644 index 3c01f80b..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "OFPHello": { - "elements": [ - { - "OFPHelloElemVersionBitmap": { - "length": 8, - "type": 1, - "versions": [ - 6 - ] - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json deleted file mode 100644 index 4ea5bfcf..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "OFPMeterDescStatsReply": { - "body": [ - { - "OFPMeterDescStats": { - "bands": [ - { - "OFPMeterBandDrop": { - "burst_size": 10, - "len": 16, - "rate": 1000, - "type": 1 - } - } - ], - "flags": 14, - "length": 24, - "meter_id": 100 - } - } - ], - "flags": 0, - "type": 10 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json deleted file mode 100644 index fdc1adc9..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPMeterDescStatsRequest": { - "flags": 0, - "meter_id": 4294967295, - "type": 10 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json deleted file mode 100644 index f9fb7848..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "OFPMeterFeaturesStatsReply": { - "body": [ - { - "OFPMeterFeaturesStats": { - "band_types": 2147483654, - "capabilities": 15, - "features": 3, - "max_bands": 255, - "max_color": 0, - "max_meter": 16777216 - } - } - ], - "flags": 0, - "type": 11 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json deleted file mode 100644 index 7363a342..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPMeterFeaturesStatsRequest": { - "flags": 0, - "type": 11 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json deleted file mode 100644 index 5bb43719..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "OFPMeterMod": { - "bands": [ - { - "OFPMeterBandDrop": { - "burst_size": 10, - "len": 16, - "rate": 1000, - "type": 1 - } - }, - { - "OFPMeterBandDscpRemark": { - "burst_size": 10, - "len": 16, - "prec_level": 1, - "rate": 1000, - "type": 2 - } - } - ], - "command": 0, - "flags": 14, - "meter_id": 100 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json deleted file mode 100644 index 1bb4b39e..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "OFPMeterStatsReply": { - "body": [ - { - "OFPMeterStats": { - "band_stats": [ - { - "OFPMeterBandStats": { - "byte_band_count": 0, - "packet_band_count": 0 - } - } - ], - "byte_in_count": 0, - "duration_nsec": 480000, - "duration_sec": 0, - "ref_count": 0, - "len": 56, - "meter_id": 100, - "packet_in_count": 0 - } - } - ], - "flags": 0, - "type": 9 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json deleted file mode 100644 index 8d45799b..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPMeterStatsRequest": { - "flags": 0, - "meter_id": 4294967295, - "type": 9 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_in.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_in.packet.json deleted file mode 100644 index e5fd0bd9..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_in.packet.json +++ /dev/null @@ -1,46 +0,0 @@ -{ - "OFPPacketIn": { - "buffer_id": 200, - "cookie": 0, - "data": "aG9nZQ==", - "match": { - "OFPMatch": { - "length": 40, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 43981 - } - }, - { - "OXMTlv": { - "field": "tunnel_id", - "mask": null, - "value": 50000 - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_src", - "mask": null, - "value": "192.168.2.3" - } - }, - { - "OXMTlv": { - "field": "tun_ipv4_dst", - "mask": null, - "value": "192.168.2.4" - } - } - ], - "type": 1 - } - }, - "reason": 0, - "table_id": 100, - "total_len": 1000 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_out.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_out.packet.json deleted file mode 100644 index d8287cce..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_out.packet.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "OFPPacketOut": { - "actions": [ - { - "OFPActionOutput": { - "len": 16, - "max_len": 65535, - "port": 4294967291, - "type": 0 - } - } - ], - "actions_len": 16, - "buffer_id": 4294967295, - "data": "dGVzdA==", - "match": { - "OFPMatch": { - "length": 12, - "oxm_fields": [ - { - "OXMTlv": { - "field": "in_port", - "mask": null, - "value": 4294967040 - } - } - ], - "type": 1 - } - } - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json deleted file mode 100644 index c281c0f8..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "OFPPortDescStatsReply": { - "body": [ - { - "OFPPort": { - "config": 0, - "hw_addr": "f2:0b:a4:d0:3f:70", - "length": 168, - "name": "Port7", - "port_no": 7, - "properties": [ - { - "OFPPortDescPropEthernet": { - "advertised": 10240, - "curr": 10248, - "curr_speed": 5000, - "length": 32, - "max_speed": 5000, - "peer": 10248, - "supported": 10248, - "type": 0 - } - }, - { - "OFPPortDescPropOptical": { - "length": 40, - "rx_grid_freq_lmda": 1500, - "rx_max_freq_lmda": 2000, - "rx_min_freq_lmda": 1000, - "supported": 1, - "tx_grid_freq_lmda": 1500, - "tx_max_freq_lmda": 2000, - "tx_min_freq_lmda": 1000, - "tx_pwr_max": 2000, - "tx_pwr_min": 1000, - "type": 1 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "state": 4 - } - }, - { - "OFPPort": { - "config": 0, - "hw_addr": "f2:0b:a4:7d:f8:ea", - "length": 72, - "name": "Port6", - "port_no": 6, - "properties": [ - { - "OFPPortDescPropEthernet": { - "advertised": 10240, - "curr": 10248, - "curr_speed": 5000, - "length": 32, - "max_speed": 5000, - "peer": 10248, - "supported": 10248, - "type": 0 - } - } - ], - "state": 4 - } - } - ], - "flags": 0, - "type": 13 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_request.packet.json deleted file mode 100644 index 478f1327..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPPortDescStatsRequest": { - "flags": 0, - "port_no": 48346, - "type": 13 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json deleted file mode 100644 index a255b9dd..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "OFPPortMod": { - "config": 0, - "hw_addr": "00:11:00:00:11:11", - "mask": 0, - "port_no": 1, - "properties": [ - { - "OFPPortModPropEthernet": { - "advertise": 4096, - "length": 8, - "type": 0 - } - }, - { - "OFPPortModPropOptical": { - "configure": 3, - "fl_offset": 2000, - "freq_lmda": 1500, - "grid_span": 3000, - "length": 24, - "tx_pwr": 300, - "type": 1 - } - }, - { - "OFPPortModPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPPortModPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPPortModPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json deleted file mode 100644 index 4ea41742..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "OFPPortStatsReply": { - "body": [ - { - "OFPPortStats": { - "duration_nsec": 0, - "duration_sec": 0, - "length": 224, - "port_no": 7, - "properties": [ - { - "OFPPortStatsPropEthernet": { - "collisions": 0, - "length": 40, - "rx_crc_err": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "type": 0 - } - }, - { - "OFPPortStatsPropOptical": { - "bias_current": 300, - "flags": 3, - "length": 44, - "rx_freq_lmda": 1500, - "rx_grid_span": 500, - "rx_offset": 700, - "rx_pwr": 2000, - "temperature": 273, - "tx_freq_lmda": 1500, - "tx_grid_span": 500, - "tx_offset": 700, - "tx_pwr": 2000, - "type": 1 - } - }, - { - "OFPPortStatsPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPPortStatsPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPPortStatsPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "rx_bytes": 0, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 0, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - }, - { - "OFPPortStats": { - "duration_nsec": 0, - "duration_sec": 0, - "length": 120, - "port_no": 6, - "properties": [ - { - "OFPPortStatsPropEthernet": { - "collisions": 0, - "length": 40, - "rx_crc_err": 0, - "rx_frame_err": 0, - "rx_over_err": 0, - "type": 0 - } - } - ], - "rx_bytes": 336, - "rx_dropped": 0, - "rx_errors": 0, - "rx_packets": 4, - "tx_bytes": 336, - "tx_dropped": 0, - "tx_errors": 0, - "tx_packets": 4 - } - } - ], - "flags": 0, - "type": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json deleted file mode 100644 index 5228710d..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPPortStatsRequest": { - "flags": 0, - "port_no": 4294967295, - "type": 4 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json deleted file mode 100644 index b273ac22..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "OFPPortStatus": { - "desc": { - "OFPPort": { - "config": 0, - "hw_addr": "f2:0b:a4:d0:3f:70", - "length": 168, - "name": "\u79c1\u306e\u30dd\u30fc\u30c8", - "port_no": 7, - "properties": [ - { - "OFPPortDescPropEthernet": { - "advertised": 10240, - "curr": 10248, - "curr_speed": 5000, - "length": 32, - "max_speed": 5000, - "peer": 10248, - "supported": 10248, - "type": 0 - } - }, - { - "OFPPortDescPropOptical": { - "length": 40, - "rx_grid_freq_lmda": 1500, - "rx_max_freq_lmda": 2000, - "rx_min_freq_lmda": 1000, - "supported": 1, - "tx_grid_freq_lmda": 1500, - "tx_max_freq_lmda": 2000, - "tx_min_freq_lmda": 1000, - "tx_pwr_max": 2000, - "tx_pwr_min": 1000, - "type": 1 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPPortDescPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "state": 4 - } - }, - "reason": 0 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json deleted file mode 100644 index 26c8f7d5..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "OFPQueueDescStatsReply": { - "body": [ - { - "OFPQueueDesc": { - "len": 32, - "port_no": 7, - "properties": [ - { - "OFPQueueDescPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - } - ], - "queue_id": 0 - } - }, - { - "OFPQueueDesc": { - "len": 88, - "port_no": 8, - "properties": [ - { - "OFPQueueDescPropMinRate": { - "length": 8, - "rate": 300, - "type": 1 - } - }, - { - "OFPQueueDescPropMaxRate": { - "length": 8, - "rate": 900, - "type": 2 - } - }, - { - "OFPQueueDescPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPQueueDescPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPQueueDescPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "queue_id": 1 - } - } - ], - "flags": 0, - "type": 15 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_request.packet.json deleted file mode 100644 index db1f85d5..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_request.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPQueueDescStatsRequest": { - "flags": 0, - "port_no": 52651, - "queue_id": 57020, - "type": 15 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json deleted file mode 100644 index 2c190977..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "OFPQueueStatsReply": { - "body": [ - { - "OFPQueueStats": { - "duration_nsec": 0, - "duration_sec": 0, - "length": 104, - "port_no": 7, - "properties": [ - { - "OFPQueueStatsPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPQueueStatsPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPQueueStatsPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - }, - { - "OFPQueueStats": { - "duration_nsec": 0, - "duration_sec": 0, - "length": 48, - "port_no": 6, - "properties": [], - "queue_id": 1, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - }, - { - "OFPQueueStats": { - "duration_nsec": 0, - "duration_sec": 0, - "length": 48, - "port_no": 7, - "properties": [], - "queue_id": 2, - "tx_bytes": 0, - "tx_errors": 0, - "tx_packets": 0 - } - } - ], - "flags": 0, - "type": 5 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json deleted file mode 100644 index 99d8505d..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPQueueStatsRequest": { - "flags": 0, - "port_no": 43981, - "queue_id": 4294967295, - "type": 5 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json deleted file mode 100644 index 66368c20..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json +++ /dev/null @@ -1,67 +0,0 @@ -{ - "OFPRequestForward": { - "request": { - "OFPGroupMod": { - "bucket_array_len": 56, - "buckets": [ - { - "OFPBucket": { - "action_array_len": 24, - "actions": [ - { - "OFPActionPopVlan": { - "len": 8, - "type": 18 - } - }, - { - "OFPActionSetField": { - "field": { - "OXMTlv": { - "field": "ipv4_dst", - "mask": null, - "value": "192.168.2.9" - } - }, - "len": 16, - "type": 25 - } - } - ], - "bucket_id": 305419896, - "len": 56, - "properties": [ - { - "OFPGroupBucketPropWeight": { - "length": 8, - "type": 0, - "weight": 52428 - } - }, - { - "OFPGroupBucketPropWatch": { - "length": 8, - "type": 1, - "watch": 56797 - } - }, - { - "OFPGroupBucketPropWatch": { - "length": 8, - "type": 2, - "watch": 4008636142 - } - } - ] - } - } - ], - "command": 3, - "command_bucket_id": 3149642683, - "group_id": 2863311530, - "properties": [], - "type": 1 - } - } - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_reply.packet.json deleted file mode 100644 index e8be5895..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_reply.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPRoleReply": { - "generation_id": 1234605616436508552, - "role": 1, - "short_id": 43690 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_request.packet.json deleted file mode 100644 index c0c120f6..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_request.packet.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "OFPRoleRequest": { - "generation_id": 1234605616436508552, - "role": 1, - "short_id": 43690 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json deleted file mode 100644 index c88d3bfa..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "OFPRoleStatus": { - "generation_id": 17356517385562371090, - "properties": [], - "reason": 0, - "role": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json deleted file mode 100644 index 0802c14e..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "OFPSetAsync": { - "properties": [ - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 0 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 1 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 2 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 3 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 4 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 5 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 6 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 7 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 24, - "type": 8 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 24, - "type": 9 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 10 - } - }, - { - "OFPAsyncConfigPropReasons": { - "length": 8, - "mask": 3, - "type": 11 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65534 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPAsyncConfigPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ] - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json deleted file mode 100644 index cd5398b7..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPSetConfig": { - "flags": 0, - "miss_send_len": 128 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json deleted file mode 100644 index 1f3d7142..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json +++ /dev/null @@ -1,83 +0,0 @@ -{ - "OFPTableDescStatsReply": { - "body": [ - { - "OFPTableDesc": { - "config": 0, - "length": 24, - "properties": [ - { - "OFPTableModPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - } - ], - "table_id": 7 - } - }, - { - "OFPTableDesc": { - "config": 0, - "length": 80, - "properties": [ - { - "OFPTableModPropEviction": { - "flags": 0, - "length": 8, - "type": 2 - } - }, - { - "OFPTableModPropVacancy": { - "length": 8, - "type": 3, - "vacancy": 0, - "vacancy_down": 0, - "vacancy_up": 0 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "table_id": 8 - } - } - ], - "flags": 0, - "type": 14 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json deleted file mode 100644 index f5a4cde0..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPTableDescStatsRequest": { - "flags": 0, - "type": 14 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_reply.packet.json deleted file mode 100644 index 864a85fd..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_reply.packet.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "OFPTableFeaturesStatsReply": { - "body": [ - { - "OFPTableFeaturesStats": { - "capabilities": 4, - "command": 1, - "features": 1, - "length": 80, - "max_entries": 255, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "table1", - "properties": [ - { - "OFPTableFeaturePropOxmValues": { - "length": 14, - "oxm_values": [ - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "aa:bb:cc:dd:ee:ff" - } - } - ], - "type": 22 - } - } - ], - "table_id": 1 - } - } - ], - "flags": 0, - "type": 12 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_request.packet.json deleted file mode 100644 index 986e1439..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_request.packet.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "OFPTableFeaturesStatsRequest": { - "body": [ - { - "OFPTableFeaturesStats": { - "capabilities": 4, - "command": 1, - "features": 1, - "length": 80, - "max_entries": 255, - "metadata_match": 18446744073709551615, - "metadata_write": 18446744073709551615, - "name": "table1", - "properties": [ - { - "OFPTableFeaturePropOxmValues": { - "length": 14, - "oxm_values": [ - { - "OXMTlv": { - "field": "eth_src", - "mask": null, - "value": "aa:bb:cc:dd:ee:ff" - } - } - ], - "type": 22 - } - } - ], - "table_id": 1 - } - } - ], - "flags": 0, - "type": 12 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json deleted file mode 100644 index 5adf812f..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "OFPTableMod": { - "config": 4, - "properties": [ - { - "OFPTableModPropEviction": { - "flags": 2, - "length": 8, - "type": 2 - } - } - ], - "table_id": 255 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json deleted file mode 100644 index 94801adb..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "OFPTableStatsReply": { - "body": [ - { - "OFPTableStats": { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 0 - } - }, - { - "OFPTableStats": { - "active_count": 4, - "lookup_count": 4, - "matched_count": 4, - "table_id": 1 - } - } - ], - "flags": 0, - "type": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json deleted file mode 100644 index 1f965d77..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "OFPTableStatsRequest": { - "flags": 0, - "type": 3 - } -} diff --git a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json b/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json deleted file mode 100644 index fde5fb77..00000000 --- a/ryu/tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "OFPTableStatus": { - "reason": 3, - "table": { - "OFPTableDesc": { - "config": 0, - "length": 80, - "properties": [ - { - "OFPTableModPropEviction": { - "flags": 0, - "length": 8, - "type": 2 - } - }, - { - "OFPTableModPropVacancy": { - "length": 8, - "type": 3, - "vacancy": 0, - "vacancy_down": 0, - "vacancy_up": 0 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [], - "exp_type": 0, - "experimenter": 101, - "length": 12, - "type": 65535 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [ - 1 - ], - "exp_type": 1, - "experimenter": 101, - "length": 16, - "type": 65535 - } - }, - { - "OFPTableModPropExperimenter": { - "data": [ - 1, - 2 - ], - "exp_type": 2, - "experimenter": 101, - "length": 20, - "type": 65535 - } - } - ], - "table_id": 8 - } - } - } -} diff --git a/ryu/tests/unit/ofproto/test_ether.py b/ryu/tests/unit/ofproto/test_ether.py deleted file mode 100644 index dead1a43..00000000 --- a/ryu/tests/unit/ofproto/test_ether.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -from nose.tools import eq_ -from ryu.ofproto.ether import * - - -LOG = logging.getLogger('test_ether') - - -class TestInet(unittest.TestCase): - """ Test case for ether - """ - - def test_ether_type(self): - eq_(ETH_TYPE_IP, 0x0800) - eq_(ETH_TYPE_ARP, 0x0806) - eq_(ETH_TYPE_8021Q, 0x8100) - eq_(ETH_TYPE_IPV6, 0x86dd) - eq_(ETH_TYPE_MPLS, 0x8847) - eq_(ETH_TYPE_SLOW, 0x8809) diff --git a/ryu/tests/unit/ofproto/test_inet.py b/ryu/tests/unit/ofproto/test_inet.py deleted file mode 100644 index 92a82ac4..00000000 --- a/ryu/tests/unit/ofproto/test_inet.py +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -from nose.tools import eq_ -from ryu.ofproto.inet import * - - -LOG = logging.getLogger('test_inet') - - -class TestInet(unittest.TestCase): - """ Test case for inet - """ - - def test_ip_proto(self): - eq_(IPPROTO_IP, 0) - eq_(IPPROTO_HOPOPTS, 0) - eq_(IPPROTO_ICMP, 1) - eq_(IPPROTO_TCP, 6) - eq_(IPPROTO_UDP, 17) - eq_(IPPROTO_ROUTING, 43) - eq_(IPPROTO_FRAGMENT, 44) - eq_(IPPROTO_AH, 51) - eq_(IPPROTO_ICMPV6, 58) - eq_(IPPROTO_NONE, 59) - eq_(IPPROTO_DSTOPTS, 60) - eq_(IPPROTO_SCTP, 132) diff --git a/ryu/tests/unit/ofproto/test_nx_flow_spec.py b/ryu/tests/unit/ofproto/test_nx_flow_spec.py deleted file mode 100644 index e0bf6b4e..00000000 --- a/ryu/tests/unit/ofproto/test_nx_flow_spec.py +++ /dev/null @@ -1,95 +0,0 @@ -# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2015 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - -import ryu.ofproto.ofproto_v1_3_parser as ofpp - - -class Test_FlowSpec(unittest.TestCase): - def test_flowspec_src_0_dst_0(self): - user = ofpp.NXFlowSpecMatch(src=('in_port', 0), - dst=('in_port', 0), - n_bits=16) - on_wire = ( - b'\x00\x10' - b'\x80\x00\x00\x04\x00\x00' - b'\x80\x00\x00\x04\x00\x00' - ) - self.assertEqual(on_wire, user.serialize()) - (o, rest) = ofpp._NXFlowSpec.parse(on_wire) - self.assertEqual(user.to_jsondict(), o.to_jsondict()) - self.assertEqual(str(user), str(o)) - self.assertEqual(b'', rest) - - def test_flowspec_src_1_dst_0(self): - user = ofpp.NXFlowSpecMatch(src=99, - dst=('in_port', 0), - n_bits=16) - on_wire = ( - b'\x20\x10' - b'\x00\x63' - b'\x80\x00\x00\x04\x00\x00' - ) - self.assertEqual(on_wire, user.serialize()) - (o, rest) = ofpp._NXFlowSpec.parse(on_wire) - self.assertEqual(user.to_jsondict(), o.to_jsondict()) - self.assertEqual(str(user), str(o)) - self.assertEqual(b'', rest) - - def test_flowspec_src_0_dst_1(self): - user = ofpp.NXFlowSpecLoad(src=('in_port', 0), - dst=('in_port', 0), - n_bits=16) - on_wire = ( - b'\x08\x10' - b'\x80\x00\x00\x04\x00\x00' - b'\x80\x00\x00\x04\x00\x00' - ) - self.assertEqual(on_wire, user.serialize()) - (o, rest) = ofpp._NXFlowSpec.parse(on_wire) - self.assertEqual(user.to_jsondict(), o.to_jsondict()) - self.assertEqual(str(user), str(o)) - self.assertEqual(b'', rest) - - def test_flowspec_src_1_dst_1(self): - user = ofpp.NXFlowSpecLoad(src=99, - dst=('in_port', 0), - n_bits=16) - on_wire = ( - b'\x28\x10' - b'\x00\x63' - b'\x80\x00\x00\x04\x00\x00' - ) - self.assertEqual(on_wire, user.serialize()) - (o, rest) = ofpp._NXFlowSpec.parse(on_wire) - self.assertEqual(user.to_jsondict(), o.to_jsondict()) - self.assertEqual(str(user), str(o)) - self.assertEqual(b'', rest) - - def test_flowspec_src_0_dst_2(self): - user = ofpp.NXFlowSpecOutput(src=('in_port', 0), - dst='', - n_bits=16) - on_wire = ( - b'\x10\x10' - b'\x80\x00\x00\x04\x00\x00' - ) - self.assertEqual(on_wire, user.serialize()) - (o, rest) = ofpp._NXFlowSpec.parse(on_wire) - self.assertEqual(user.to_jsondict(), o.to_jsondict()) - self.assertEqual(str(user), str(o)) - self.assertEqual(b'', rest) diff --git a/ryu/tests/unit/ofproto/test_ofproto.py b/ryu/tests/unit/ofproto/test_ofproto.py deleted file mode 100644 index 47f1e544..00000000 --- a/ryu/tests/unit/ofproto/test_ofproto.py +++ /dev/null @@ -1,81 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 Isaku Yamahata -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -try: - # Python 3 - from imp import reload -except ImportError: - # Python 2 - pass - -import unittest -import logging -from nose.tools import eq_ - - -LOG = logging.getLogger('test_ofproto') - - -class TestOfprotCommon(unittest.TestCase): - """ Test case for ofproto - """ - - def test_ofp_event(self): - import ryu.ofproto - reload(ryu.ofproto) - import ryu.controller.ofp_event - reload(ryu.controller.ofp_event) - - def test_ofproto(self): - # When new version of OFP support is added, - # this test must be updated. - import ryu.ofproto - reload(ryu.ofproto) - ofp_modules = ryu.ofproto.get_ofp_modules() - - import ryu.ofproto.ofproto_v1_0 - import ryu.ofproto.ofproto_v1_2 - import ryu.ofproto.ofproto_v1_3 - import ryu.ofproto.ofproto_v1_4 - import ryu.ofproto.ofproto_v1_5 - eq_(set(ofp_modules.keys()), set([ryu.ofproto.ofproto_v1_0.OFP_VERSION, - ryu.ofproto.ofproto_v1_2.OFP_VERSION, - ryu.ofproto.ofproto_v1_3.OFP_VERSION, - ryu.ofproto.ofproto_v1_4.OFP_VERSION, - ryu.ofproto.ofproto_v1_5.OFP_VERSION, - ])) - consts_mods = set([ofp_mod[0] for ofp_mod in ofp_modules.values()]) - eq_(consts_mods, set([ryu.ofproto.ofproto_v1_0, - ryu.ofproto.ofproto_v1_2, - ryu.ofproto.ofproto_v1_3, - ryu.ofproto.ofproto_v1_4, - ryu.ofproto.ofproto_v1_5, - ])) - - parser_mods = set([ofp_mod[1] for ofp_mod in ofp_modules.values()]) - import ryu.ofproto.ofproto_v1_0_parser - import ryu.ofproto.ofproto_v1_2_parser - import ryu.ofproto.ofproto_v1_3_parser - import ryu.ofproto.ofproto_v1_4_parser - import ryu.ofproto.ofproto_v1_5_parser - eq_(parser_mods, set([ryu.ofproto.ofproto_v1_0_parser, - ryu.ofproto.ofproto_v1_2_parser, - ryu.ofproto.ofproto_v1_3_parser, - ryu.ofproto.ofproto_v1_4_parser, - ryu.ofproto.ofproto_v1_5_parser, - ])) diff --git a/ryu/tests/unit/ofproto/test_ofproto_common.py b/ryu/tests/unit/ofproto/test_ofproto_common.py deleted file mode 100644 index 6a63236e..00000000 --- a/ryu/tests/unit/ofproto/test_ofproto_common.py +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -from nose.tools import eq_ -from ryu.ofproto.ofproto_common import * - - -LOG = logging.getLogger('test_ofproto_common') - - -class TestOfprotCommon(unittest.TestCase): - """ Test case for ofproto_common - """ - - def test_struct_ofp_header(self): - eq_(OFP_HEADER_PACK_STR, '!BBHI') - eq_(OFP_HEADER_SIZE, 8) - - def test_define_constants(self): - eq_(OFP_TCP_PORT, 6653) - eq_(OFP_SSL_PORT, 6653) diff --git a/ryu/tests/unit/ofproto/test_ofproto_parser.py b/ryu/tests/unit/ofproto/test_ofproto_parser.py deleted file mode 100644 index bc3c1fd1..00000000 --- a/ryu/tests/unit/ofproto/test_ofproto_parser.py +++ /dev/null @@ -1,244 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import six - -import binascii -import unittest -from nose.tools import * -import struct -from ryu import exception - -from ryu.ofproto import ofproto_common, ofproto_parser -from ryu.ofproto import ofproto_v1_0, ofproto_v1_0_parser - -import logging -LOG = logging.getLogger(__name__) - -if six.PY3: - buffer = bytes - - -class TestOfproto_Parser(unittest.TestCase): - def setUp(self): - LOG.debug('setUp') - self.bufHello = binascii.unhexlify('0100000800000001') - - fr = '010600b0000000020000000000000abc' \ - + '00000100010000000000008700000fff' \ - + '0002aefa39d2b9177472656d61302d30' \ - + '00000000000000000000000000000000' \ - + '000000c0000000000000000000000000' \ - + 'fffe723f9a764cc87673775f30786162' \ - + '63000000000000000000000100000001' \ - + '00000082000000000000000000000000' \ - + '00012200d6c5a1947472656d61312d30' \ - + '00000000000000000000000000000000' \ - + '000000c0000000000000000000000000' - self.bufFeaturesReply = binascii.unhexlify(fr) - - pi = '010a005200000000000001010040' \ - + '00020000000000000002000000000001' \ - + '080045000032000000004011f967c0a8' \ - + '0001c0a8000200010001001e00000000' \ - + '00000000000000000000000000000000' \ - + '00000000' - self.bufPacketIn = binascii.unhexlify(pi) - - def tearDown(self): - LOG.debug('tearDown') - pass - - def testHello(self): - (version, - msg_type, - msg_len, - xid) = ofproto_parser.header(self.bufHello) - eq_(version, 1) - eq_(msg_type, 0) - eq_(msg_len, 8) - eq_(xid, 1) - - def testFeaturesReply(self): - (version, - msg_type, - msg_len, - xid) = ofproto_parser.header(self.bufFeaturesReply) - - msg = ofproto_parser.msg(self, - version, - msg_type, - msg_len, - xid, - self.bufFeaturesReply) - LOG.debug(msg) - - ok_(isinstance(msg, ofproto_v1_0_parser.OFPSwitchFeatures)) - LOG.debug(msg.ports[65534]) - ok_(isinstance(msg.ports[1], ofproto_v1_0_parser.OFPPhyPort)) - ok_(isinstance(msg.ports[2], ofproto_v1_0_parser.OFPPhyPort)) - ok_(isinstance(msg.ports[65534], ofproto_v1_0_parser.OFPPhyPort)) - - def testPacketIn(self): - (version, - msg_type, - msg_len, - xid) = ofproto_parser.header(self.bufPacketIn) - - msg = ofproto_parser.msg(self, - version, - msg_type, - msg_len, - xid, - self.bufPacketIn) - LOG.debug(msg) - ok_(isinstance(msg, ofproto_v1_0_parser.OFPPacketIn)) - - @raises(AssertionError) - def test_check_msg_len(self): - (version, - msg_type, - msg_len, - xid) = ofproto_parser.header(self.bufPacketIn) - - msg_len = len(self.bufPacketIn) + 1 - ofproto_parser.msg(self, - version, - msg_type, - msg_len, - xid, - self.bufPacketIn) - - @raises(exception.OFPUnknownVersion) - def test_check_msg_parser(self): - (version, - msg_type, - msg_len, - xid) = ofproto_parser.header(self.bufPacketIn) - - version = 0xff - ofproto_parser.msg(self, - version, - msg_type, - msg_len, - xid, - self.bufPacketIn) - - -class TestMsgBase(unittest.TestCase): - """ Test case for ofproto_parser.MsgBase - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_set_xid(self): - xid = 3841413783 - c = ofproto_parser.MsgBase(object) - c.set_xid(xid) - eq_(xid, c.xid) - - @raises(AssertionError) - def test_set_xid_check_xid(self): - xid = 2160492514 - c = ofproto_parser.MsgBase(object) - c.xid = xid - c.set_xid(xid) - - def _test_parser(self, msg_type=ofproto_v1_0.OFPT_HELLO): - version = ofproto_v1_0.OFP_VERSION - msg_len = ofproto_v1_0.OFP_HEADER_SIZE - xid = 2183948390 - data = b'\x00\x01\x02\x03' - - fmt = ofproto_v1_0.OFP_HEADER_PACK_STR - buf = struct.pack(fmt, version, msg_type, msg_len, xid) \ - + data - - res = ofproto_v1_0_parser.OFPHello.parser( - object, version, msg_type, msg_len, xid, bytearray(buf)) - - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(buffer(buf), res.buf) - - # test __str__() - list_ = ('version', 'msg_type', 'msg_len', 'xid') - check = {} - for s in str(res).rsplit(','): - if '=' in s: - (k, v,) = s.rsplit('=') - if k in list_: - check[k] = v - - eq_(hex(ofproto_v1_0.OFP_VERSION), check['version']) - eq_(hex(ofproto_v1_0.OFPT_HELLO), check['msg_type']) - eq_(hex(msg_len), check['msg_len']) - eq_(hex(xid), check['xid']) - - return True - - def test_parser(self): - ok_(self._test_parser()) - - @raises(AssertionError) - def test_parser_check_msg_type(self): - self._test_parser(ofproto_v1_0.OFPT_ERROR) - - def _test_serialize(self): - - class Datapath(object): - ofproto = ofproto_v1_0 - ofproto_parser = ofproto_v1_0_parser - - c = ofproto_v1_0_parser.OFPHello(Datapath) - - c.serialize() - eq_(ofproto_v1_0.OFP_VERSION, c.version) - eq_(ofproto_v1_0.OFPT_HELLO, c.msg_type) - eq_(0, c.xid) - - return True - - def test_serialize(self): - ok_(self._test_serialize()) - - -class TestMsgStrAttr(unittest.TestCase): - """ Test case for ofproto_parser.msg_str_attr - """ - - def test_msg_str_attr(self): - class Check(object): - check = 'msg_str_attr_test' - - c = Check() - buf = '' - - res = ofproto_parser.msg_str_attr(c, buf, ('check',)) - str_ = str(res) - str_ = str_.rsplit() - eq_('check', str_[0]) - eq_('msg_str_attr_test', str_[1]) diff --git a/ryu/tests/unit/ofproto/test_ofproto_v12.py b/ryu/tests/unit/ofproto/test_ofproto_v12.py deleted file mode 100644 index c1228a05..00000000 --- a/ryu/tests/unit/ofproto/test_ofproto_v12.py +++ /dev/null @@ -1,717 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -from nose.tools import eq_ -from ryu.ofproto.ofproto_v1_2 import * - - -LOG = logging.getLogger('test_ofproto_v12') - - -class TestOfprot12(unittest.TestCase): - """ Test case for ofproto_v1_2 - """ - - def test_struct_ofp_header(self): - eq_(OFP_HEADER_PACK_STR, '!BBHI') - eq_(OFP_HEADER_SIZE, 8) - - def test_enum_ofp_type(self): - eq_(OFPT_HELLO, 0) - eq_(OFPT_ERROR, 1) - eq_(OFPT_ECHO_REQUEST, 2) - eq_(OFPT_ECHO_REPLY, 3) - eq_(OFPT_EXPERIMENTER, 4) - eq_(OFPT_FEATURES_REQUEST, 5) - eq_(OFPT_FEATURES_REPLY, 6) - eq_(OFPT_GET_CONFIG_REQUEST, 7) - eq_(OFPT_GET_CONFIG_REPLY, 8) - eq_(OFPT_SET_CONFIG, 9) - eq_(OFPT_PACKET_IN, 10) - eq_(OFPT_FLOW_REMOVED, 11) - eq_(OFPT_PORT_STATUS, 12) - eq_(OFPT_PACKET_OUT, 13) - eq_(OFPT_FLOW_MOD, 14) - eq_(OFPT_GROUP_MOD, 15) - eq_(OFPT_PORT_MOD, 16) - eq_(OFPT_TABLE_MOD, 17) - eq_(OFPT_STATS_REQUEST, 18) - eq_(OFPT_STATS_REPLY, 19) - eq_(OFPT_BARRIER_REQUEST, 20) - eq_(OFPT_BARRIER_REPLY, 21) - eq_(OFPT_QUEUE_GET_CONFIG_REQUEST, 22) - eq_(OFPT_QUEUE_GET_CONFIG_REPLY, 23) - eq_(OFPT_ROLE_REQUEST, 24) - eq_(OFPT_ROLE_REPLY, 25) - - def test_struct_ofp_port(self): - eq_(OFP_PORT_PACK_STR, '!I4x6s2x16sIIIIIIII') - eq_(OFP_PORT_SIZE, 64) - - def test_enum_ofp_port_config(self): - eq_(OFPPC_PORT_DOWN, 1 << 0) - eq_(OFPPC_NO_RECV, 1 << 2) - eq_(OFPPC_NO_FWD, 1 << 5) - eq_(OFPPC_NO_PACKET_IN, 1 << 6) - - def test_enum_ofp_port_state(self): - eq_(OFPPS_LINK_DOWN, 1 << 0) - eq_(OFPPS_BLOCKED, 1 << 1) - eq_(OFPPS_LIVE, 1 << 2) - - def test_enum_ofp_port_no(self): - eq_(OFPP_MAX, 0xffffff00) - eq_(OFPP_IN_PORT, 0xfffffff8) - eq_(OFPP_TABLE, 0xfffffff9) - eq_(OFPP_NORMAL, 0xfffffffa) - eq_(OFPP_FLOOD, 0xfffffffb) - eq_(OFPP_ALL, 0xfffffffc) - eq_(OFPP_CONTROLLER, 0xfffffffd) - eq_(OFPP_LOCAL, 0xfffffffe) - eq_(OFPP_ANY, 0xffffffff) - eq_(OFPQ_ALL, 0xffffffff) - - def test_enum_ofp_port_features(self): - eq_(OFPPF_10MB_HD, 1 << 0) - eq_(OFPPF_10MB_FD, 1 << 1) - eq_(OFPPF_100MB_HD, 1 << 2) - eq_(OFPPF_100MB_FD, 1 << 3) - eq_(OFPPF_1GB_HD, 1 << 4) - eq_(OFPPF_1GB_FD, 1 << 5) - eq_(OFPPF_10GB_FD, 1 << 6) - eq_(OFPPF_40GB_FD, 1 << 7) - eq_(OFPPF_100GB_FD, 1 << 8) - eq_(OFPPF_1TB_FD, 1 << 9) - eq_(OFPPF_OTHER, 1 << 10) - eq_(OFPPF_COPPER, 1 << 11) - eq_(OFPPF_FIBER, 1 << 12) - eq_(OFPPF_AUTONEG, 1 << 13) - eq_(OFPPF_PAUSE, 1 << 14) - eq_(OFPPF_PAUSE_ASYM, 1 << 15) - - def test_struct_ofp_packet_queue(self): - eq_(OFP_PACKET_QUEUE_PACK_STR, '!IIH6x') - eq_(OFP_PACKET_QUEUE_SIZE, 16) - - def test_enum_ofp_queue_properties(self): - eq_(OFPQT_MIN_RATE, 1) - eq_(OFPQT_MAX_RATE, 2) - eq_(OFPQT_EXPERIMENTER, 0xffff) - - def test_struct_ofp_queue_prop_header(self): - eq_(OFP_QUEUE_PROP_HEADER_PACK_STR, '!HH4x') - eq_(OFP_QUEUE_PROP_HEADER_SIZE, 8) - - def test_struct_ofp_queue_prop_min_rate(self): - eq_(OFP_QUEUE_PROP_MIN_RATE_PACK_STR, '!H6x') - eq_(OFP_QUEUE_PROP_MIN_RATE_SIZE, 16) - - def test_struct_ofp_queue_prop_max_rate(self): - eq_(OFP_QUEUE_PROP_MAX_RATE_PACK_STR, '!H6x') - eq_(OFP_QUEUE_PROP_MAX_RATE_SIZE, 16) - - def test_struct_ofp_queue_prop_experimenter(self): - eq_(OFP_QUEUE_PROP_EXPERIMENTER_PACK_STR, '!I4x') - eq_(OFP_QUEUE_PROP_EXPERIMENTER_SIZE, 16) - - def test_struct_ofp_match(self): - eq_(OFP_MATCH_PACK_STR, '!HHBBBB') - eq_(OFP_MATCH_SIZE, 8) - - def test_enum_ofp_match_type(self): - eq_(OFPMT_STANDARD, 0) - eq_(OFPMT_OXM, 1) - - def test_enum_ofp_oxm_class(self): - eq_(OFPXMC_NXM_0, 0x0000) - eq_(OFPXMC_NXM_1, 0x0001) - eq_(OFPXMC_OPENFLOW_BASIC, 0x8000) - eq_(OFPXMC_EXPERIMENTER, 0xFFFF) - - def test_enmu_oxm_ofb_match_fields(self): - eq_(OFPXMT_OFB_IN_PORT, 0) - eq_(OFPXMT_OFB_IN_PHY_PORT, 1) - eq_(OFPXMT_OFB_METADATA, 2) - eq_(OFPXMT_OFB_ETH_DST, 3) - eq_(OFPXMT_OFB_ETH_SRC, 4) - eq_(OFPXMT_OFB_ETH_TYPE, 5) - eq_(OFPXMT_OFB_VLAN_VID, 6) - eq_(OFPXMT_OFB_VLAN_PCP, 7) - eq_(OFPXMT_OFB_IP_DSCP, 8) - eq_(OFPXMT_OFB_IP_ECN, 9) - eq_(OFPXMT_OFB_IP_PROTO, 10) - eq_(OFPXMT_OFB_IPV4_SRC, 11) - eq_(OFPXMT_OFB_IPV4_DST, 12) - eq_(OFPXMT_OFB_TCP_SRC, 13) - eq_(OFPXMT_OFB_TCP_DST, 14) - eq_(OFPXMT_OFB_UDP_SRC, 15) - eq_(OFPXMT_OFB_UDP_DST, 16) - eq_(OFPXMT_OFB_SCTP_SRC, 17) - eq_(OFPXMT_OFB_SCTP_DST, 18) - eq_(OFPXMT_OFB_ICMPV4_TYPE, 19) - eq_(OFPXMT_OFB_ICMPV4_CODE, 20) - eq_(OFPXMT_OFB_ARP_OP, 21) - eq_(OFPXMT_OFB_ARP_SPA, 22) - eq_(OFPXMT_OFB_ARP_TPA, 23) - eq_(OFPXMT_OFB_ARP_SHA, 24) - eq_(OFPXMT_OFB_ARP_THA, 25) - eq_(OFPXMT_OFB_IPV6_SRC, 26) - eq_(OFPXMT_OFB_IPV6_DST, 27) - eq_(OFPXMT_OFB_IPV6_FLABEL, 28) - eq_(OFPXMT_OFB_ICMPV6_TYPE, 29) - eq_(OFPXMT_OFB_ICMPV6_CODE, 30) - eq_(OFPXMT_OFB_IPV6_ND_TARGET, 31) - eq_(OFPXMT_OFB_IPV6_ND_SLL, 32) - eq_(OFPXMT_OFB_IPV6_ND_TLL, 33) - eq_(OFPXMT_OFB_MPLS_LABEL, 34) - eq_(OFPXMT_OFB_MPLS_TC, 35) - - def test_enum_ofp_vlan_id(self): - eq_(OFPVID_PRESENT, 0x1000) - eq_(OFPVID_NONE, 0x0000) - - def test_struct_ofp_oxm_experimenter_header(self): - eq_(OFP_OXM_EXPERIMENTER_HEADER_PACK_STR, '!II') - eq_(OFP_OXM_EXPERIMENTER_HEADER_SIZE, 8) - - def test_enum_ofp_instruction_type(self): - eq_(OFPIT_GOTO_TABLE, 1) - eq_(OFPIT_WRITE_METADATA, 2) - eq_(OFPIT_WRITE_ACTIONS, 3) - eq_(OFPIT_APPLY_ACTIONS, 4) - eq_(OFPIT_CLEAR_ACTIONS, 5) - eq_(OFPIT_EXPERIMENTER, 0xFFFF) - - def test_struct_ofp_instruction_goto_table(self): - eq_(OFP_INSTRUCTION_GOTO_TABLE_PACK_STR, '!HHB3x') - eq_(OFP_INSTRUCTION_GOTO_TABLE_SIZE, 8) - - def test_struct_ofp_instruction_write_metadata(self): - eq_(OFP_INSTRUCTION_WRITE_METADATA_PACK_STR, '!HH4xQQ') - eq_(OFP_INSTRUCTION_WRITE_METADATA_SIZE, 24) - - def test_struct_ofp_instaruction_actions(self): - eq_(OFP_INSTRUCTION_ACTIONS_PACK_STR, '!HH4x') - eq_(OFP_INSTRUCTION_ACTIONS_SIZE, 8) - - def test_enum_ofp_action_type(self): - eq_(OFPAT_OUTPUT, 0) - eq_(OFPAT_COPY_TTL_OUT, 11) - eq_(OFPAT_COPY_TTL_IN, 12) - eq_(OFPAT_SET_MPLS_TTL, 15) - eq_(OFPAT_DEC_MPLS_TTL, 16) - eq_(OFPAT_PUSH_VLAN, 17) - eq_(OFPAT_POP_VLAN, 18) - eq_(OFPAT_PUSH_MPLS, 19) - eq_(OFPAT_POP_MPLS, 20) - eq_(OFPAT_SET_QUEUE, 21) - eq_(OFPAT_GROUP, 22) - eq_(OFPAT_SET_NW_TTL, 23) - eq_(OFPAT_DEC_NW_TTL, 24) - eq_(OFPAT_SET_FIELD, 25) - eq_(OFPAT_EXPERIMENTER, 0xffff) - - def test_struct_ofp_action_header(self): - eq_(OFP_ACTION_HEADER_PACK_STR, '!HH4x') - eq_(OFP_ACTION_HEADER_SIZE, 8) - - def test_struct_ofp_action_output(self): - eq_(OFP_ACTION_OUTPUT_PACK_STR, '!HHIH6x') - eq_(OFP_ACTION_OUTPUT_SIZE, 16) - - def test_enum_ofp_controller_max_len(self): - eq_(OFPCML_MAX, 0xffe5) - eq_(OFPCML_NO_BUFFER, 0xffff) - - def test_struct_ofp_action_group(self): - eq_(OFP_ACTION_GROUP_PACK_STR, '!HHI') - eq_(OFP_ACTION_GROUP_SIZE, 8) - - def test_struct_ofp_action_set_queue(self): - eq_(OFP_ACTION_SET_QUEUE_PACK_STR, '!HHI') - eq_(OFP_ACTION_SET_QUEUE_SIZE, 8) - - def test_struct_ofp_aciton_mpls_ttl(self): - eq_(OFP_ACTION_MPLS_TTL_PACK_STR, '!HHB3x') - eq_(OFP_ACTION_MPLS_TTL_SIZE, 8) - - def test_struct_ofp_action_nw_ttl(self): - eq_(OFP_ACTION_NW_TTL_PACK_STR, '!HHB3x') - eq_(OFP_ACTION_NW_TTL_SIZE, 8) - - def test_struct_ofp_action_push(self): - eq_(OFP_ACTION_PUSH_PACK_STR, '!HHH2x') - eq_(OFP_ACTION_PUSH_SIZE, 8) - - def test_struct_ofp_action_pop_mpls(self): - eq_(OFP_ACTION_POP_MPLS_PACK_STR, '!HHH2x') - eq_(OFP_ACTION_POP_MPLS_SIZE, 8) - - def test_struct_ofp_action_set_field(self): - eq_(OFP_ACTION_SET_FIELD_PACK_STR, '!HH4B') - eq_(OFP_ACTION_SET_FIELD_SIZE, 8) - - def test_struct_ofp_action_experimenter_header(self): - eq_(OFP_ACTION_EXPERIMENTER_HEADER_PACK_STR, '!HHI') - eq_(OFP_ACTION_EXPERIMENTER_HEADER_SIZE, 8) - - def test_struct_ofp_switch_feature(self): - eq_(OFP_SWITCH_FEATURES_PACK_STR, '!QIB3xII') - eq_(OFP_SWITCH_FEATURES_SIZE, 32) - - def test_enum_ofp_capabilities(self): - eq_(OFPC_FLOW_STATS, 1 << 0) - eq_(OFPC_TABLE_STATS, 1 << 1) - eq_(OFPC_PORT_STATS, 1 << 2) - eq_(OFPC_GROUP_STATS, 1 << 3) - eq_(OFPC_IP_REASM, 1 << 5) - eq_(OFPC_QUEUE_STATS, 1 << 6) - eq_(OFPC_PORT_BLOCKED, 1 << 8) - - def test_struct_ofp_switch_config(self): - eq_(OFP_SWITCH_CONFIG_PACK_STR, '!HH') - eq_(OFP_SWITCH_CONFIG_SIZE, 12) - - def test_enum_ofp_config_flags(self): - eq_(OFPC_FRAG_NORMAL, 0) - eq_(OFPC_FRAG_DROP, 1 << 0) - eq_(OFPC_FRAG_REASM, 1 << 1) - eq_(OFPC_FRAG_MASK, 3) - eq_(OFPC_INVALID_TTL_TO_CONTROLLER, 1 << 2) - - def test_enum_ofp_table(self): - eq_(OFPTT_MAX, 0xfe) - eq_(OFPTT_ALL, 0xff) - - def test_struct_ofp_table_mod(self): - eq_(OFP_TABLE_MOD_PACK_STR, '!B3xI') - eq_(OFP_TABLE_MOD_SIZE, 16) - - def test_enum_ofp_table_config(self): - eq_(OFPTC_TABLE_MISS_CONTROLLER, 0) - eq_(OFPTC_TABLE_MISS_CONTINUE, 1 << 0) - eq_(OFPTC_TABLE_MISS_DROP, 1 << 1) - eq_(OFPTC_TABLE_MISS_MASK, 3) - - def test_struct_ofp_flow_mod(self): - eq_(OFP_FLOW_MOD_PACK_STR, '!QQBBHHHIIIH2xHHBBBB') - eq_(OFP_FLOW_MOD_SIZE, 56) - - def test_enum_ofp_flow_mod_command(self): - eq_(OFPFC_ADD, 0) - eq_(OFPFC_MODIFY, 1) - eq_(OFPFC_MODIFY_STRICT, 2) - eq_(OFPFC_DELETE, 3) - eq_(OFPFC_DELETE_STRICT, 4) - - def test_enum_ofp_flow_mod_flags(self): - eq_(OFPFF_SEND_FLOW_REM, 1 << 0) - eq_(OFPFF_CHECK_OVERLAP, 1 << 1) - eq_(OFPFF_RESET_COUNTS, 1 << 2) - - def test_struct_ofp_group_mod(self): - eq_(OFP_GROUP_MOD_PACK_STR, '!HBxI') - eq_(OFP_GROUP_MOD_SIZE, 16) - - # same to OFPP_* - def test_enum_ofp_group(self): - eq_(OFPG_MAX, 0xffffff00) - eq_(OFPG_ALL, 0xfffffffc) - eq_(OFPG_ANY, 0xffffffff) - - def test_enum_ofp_group_mod_command(self): - eq_(OFPGC_ADD, 0) - eq_(OFPGC_MODIFY, 1) - eq_(OFPGC_DELETE, 2) - - def test_enum_ofp_group_type(self): - eq_(OFPGT_ALL, 0) - eq_(OFPGT_SELECT, 1) - eq_(OFPGT_INDIRECT, 2) - eq_(OFPGT_FF, 3) - - def test_struct_ofp_bucket(self): - eq_(OFP_BUCKET_PACK_STR, '!HHII4x') - eq_(OFP_BUCKET_SIZE, 16) - - def test_struct_ofp_port_mod(self): - eq_(OFP_PORT_MOD_PACK_STR, '!I4x6s2xIII4x') - eq_(OFP_PORT_MOD_SIZE, 40) - - def test_sturct_ofp_stats_request(self): - eq_(OFP_STATS_REQUEST_PACK_STR, '!HH4x') - eq_(OFP_STATS_REQUEST_SIZE, 16) - - # OFPSF_REQ_* flags (none yet defined). - # The only value defined for flags in a reply is whether more - # replies will follow this one - this has the value 0x0001. - def test_enum_ofp_stats_reply_flags(self): - eq_(OFPSF_REPLY_MORE, 0x0001) - - def test_struct_ofp_stats_reply(self): - eq_(OFP_STATS_REPLY_PACK_STR, '!HH4x') - eq_(OFP_STATS_REPLY_SIZE, 16) - - def test_enum_ofp_stats_types(self): - eq_(OFPST_DESC, 0) - eq_(OFPST_FLOW, 1) - eq_(OFPST_AGGREGATE, 2) - eq_(OFPST_TABLE, 3) - eq_(OFPST_PORT, 4) - eq_(OFPST_QUEUE, 5) - eq_(OFPST_GROUP, 6) - eq_(OFPST_GROUP_DESC, 7) - eq_(OFPST_GROUP_FEATURES, 8) - eq_(OFPST_EXPERIMENTER, 0xffff) - - def test_struct_ofp_desc_stats(self): - eq_(OFP_DESC_STATS_PACK_STR, '!256s256s256s32s256s') - eq_(OFP_DESC_STATS_SIZE, 1056) - - def test_struct_ofp_flow_stats_request(self): - eq_(OFP_FLOW_STATS_REQUEST_PACK_STR, '!B3xII4xQQ') - eq_(OFP_FLOW_STATS_REQUEST_SIZE, 40) - - def test_struct_ofp_flow_stats(self): - eq_(OFP_FLOW_STATS_PACK_STR, '!HBxIIHHH6xQQQ') - eq_(OFP_FLOW_STATS_SIZE, 56) - - def test_struct_ofp_aggregate_stats_request(self): - eq_(OFP_AGGREGATE_STATS_REQUEST_PACK_STR, '!B3xII4xQQ') - eq_(OFP_AGGREGATE_STATS_REQUEST_SIZE, 40) - - def test_struct_ofp_aggregate_stats_reply(self): - eq_(OFP_AGGREGATE_STATS_REPLY_PACK_STR, '!QQI4x') - eq_(OFP_AGGREGATE_STATS_REPLY_SIZE, 24) - - def test_sturct_ofp_table_stats(self): - eq_(OFP_TABLE_STATS_PACK_STR, '!B7x32sQQIIQQQQIIIIQQ') - eq_(OFP_TABLE_STATS_SIZE, 128) - - def test_struct_ofp_port_stats_request(self): - eq_(OFP_PORT_STATS_REQUEST_PACK_STR, '!I4x') - eq_(OFP_PORT_STATS_REQUEST_SIZE, 8) - - def test_struct_ofp_port_stats(self): - eq_(OFP_PORT_STATS_PACK_STR, '!I4xQQQQQQQQQQQQ') - eq_(OFP_PORT_STATS_SIZE, 104) - - def test_struct_ofp_queue_stats_request(self): - eq_(OFP_QUEUE_STATS_REQUEST_PACK_STR, '!II') - eq_(OFP_QUEUE_STATS_REQUEST_SIZE, 8) - - def test_struct_ofp_queue_stats(self): - eq_(OFP_QUEUE_STATS_PACK_STR, '!IIQQQ') - eq_(OFP_QUEUE_STATS_SIZE, 32) - - def test_struct_ofp_group_stats_request(self): - eq_(OFP_GROUP_STATS_REQUEST_PACK_STR, '!I4x') - eq_(OFP_GROUP_STATS_REQUEST_SIZE, 8) - - def test_struct_ofp_group_stats(self): - eq_(OFP_GROUP_STATS_PACK_STR, '!H2xII4xQQ') - eq_(OFP_GROUP_STATS_SIZE, 32) - - def test_struct_ofp_bucket_counter(self): - eq_(OFP_BUCKET_COUNTER_PACK_STR, '!QQ') - eq_(OFP_BUCKET_COUNTER_SIZE, 16) - - def test_struct_ofp_group_desc_stats(self): - eq_(OFP_GROUP_DESC_STATS_PACK_STR, '!HBxI') - eq_(OFP_GROUP_DESC_STATS_SIZE, 8) - - def test_struct_ofp_group_features_stats(self): - eq_(OFP_GROUP_FEATURES_STATS_PACK_STR, '!II4I4I') - eq_(OFP_GROUP_FEATURES_STATS_SIZE, 40) - - def test_enmu_ofp_group_capabilities(self): - eq_(OFPGFC_SELECT_WEIGHT, 1 << 0) - eq_(OFPGFC_SELECT_LIVENESS, 1 << 1) - eq_(OFPGFC_CHAINING, 1 << 2) - eq_(OFPGFC_CHAINING_CHECKS, 1 << 3) - - def test_struct_ofp_experimenter_stats_header(self): - eq_(OFP_EXPERIMENTER_STATS_HEADER_PACK_STR, '!II') - eq_(OFP_EXPERIMENTER_STATS_HEADER_SIZE, 8) - - def test_struct_opf_queue_get_config_request(self): - eq_(OFP_QUEUE_GET_CONFIG_REQUEST_PACK_STR, '!I4x') - eq_(OFP_QUEUE_GET_CONFIG_REQUEST_SIZE, 16) - - def test_struct_ofp_queue_get_config_reply(self): - eq_(OFP_QUEUE_GET_CONFIG_REPLY_PACK_STR, '!I4x') - eq_(OFP_QUEUE_GET_CONFIG_REPLY_SIZE, 16) - - def test_struct_ofp_packet_out(self): - eq_(OFP_PACKET_OUT_PACK_STR, '!IIH6x') - eq_(OFP_PACKET_OUT_SIZE, 24) - - def test_struct_ofp_role_request(self): - eq_(OFP_ROLE_REQUEST_PACK_STR, '!I4xQ') - eq_(OFP_ROLE_REQUEST_SIZE, 24) - - def test_enum_ofp_controller_role(self): - eq_(OFPCR_ROLE_NOCHANGE, 0) - eq_(OFPCR_ROLE_EQUAL, 1) - eq_(OFPCR_ROLE_MASTER, 2) - eq_(OFPCR_ROLE_SLAVE, 3) - - def test_struct_ofp_packet_in(self): - eq_(OFP_PACKET_IN_PACK_STR, '!IHBB') - eq_(OFP_PACKET_IN_SIZE, 24) - - def test_enum_ofp_packet_in_reason(self): - eq_(OFPR_NO_MATCH, 0) - eq_(OFPR_ACTION, 1) - eq_(OFPR_INVALID_TTL, 2) - - def test_struct_ofp_flow_removed(self): - eq_(OFP_FLOW_REMOVED_PACK_STR, '!QHBBIIHHQQHHBBBB') - eq_(OFP_FLOW_REMOVED_PACK_STR0, '!QHBBIIHHQQ') - eq_(OFP_FLOW_REMOVED_SIZE, 56) - - def test_enum_ofp_flow_removed_reason(self): - eq_(OFPRR_IDLE_TIMEOUT, 0) - eq_(OFPRR_HARD_TIMEOUT, 1) - eq_(OFPRR_DELETE, 2) - eq_(OFPRR_GROUP_DELETE, 3) - - def test_struct_ofp_port_status(self): - eq_(OFP_PORT_STATUS_PACK_STR, '!B7xI4x6s2x16sIIIIIIII') - eq_(OFP_PORT_STATUS_DESC_OFFSET, 16) - eq_(OFP_PORT_STATUS_SIZE, 80) - - def test_enum_ofp_port_reason(self): - eq_(OFPPR_ADD, 0) - eq_(OFPPR_DELETE, 1) - eq_(OFPPR_MODIFY, 2) - - def test_struct_ofp_error_msg(self): - eq_(OFP_ERROR_MSG_PACK_STR, '!HH') - eq_(OFP_ERROR_MSG_SIZE, 12) - - def test_enum_ofp_error_type(self): - eq_(OFPET_HELLO_FAILED, 0) - eq_(OFPET_BAD_REQUEST, 1) - eq_(OFPET_BAD_ACTION, 2) - eq_(OFPET_BAD_INSTRUCTION, 3) - eq_(OFPET_BAD_MATCH, 4) - eq_(OFPET_FLOW_MOD_FAILED, 5) - eq_(OFPET_GROUP_MOD_FAILED, 6) - eq_(OFPET_PORT_MOD_FAILED, 7) - eq_(OFPET_TABLE_MOD_FAILED, 8) - eq_(OFPET_QUEUE_OP_FAILED, 9) - eq_(OFPET_SWITCH_CONFIG_FAILED, 10) - eq_(OFPET_ROLE_REQUEST_FAILED, 11) - eq_(OFPET_EXPERIMENTER, 0xffff) - - def test_enum_ofp_hello_failed_code(self): - eq_(OFPHFC_INCOMPATIBLE, 0) - eq_(OFPHFC_EPERM, 1) - - def test_enum_ofp_bad_request_code(self): - eq_(OFPBRC_BAD_VERSION, 0) - eq_(OFPBRC_BAD_TYPE, 1) - eq_(OFPBRC_BAD_STAT, 2) - eq_(OFPBRC_BAD_EXPERIMENTER, 3) - eq_(OFPBRC_BAD_EXP_TYPE, 4) - eq_(OFPBRC_EPERM, 5) - eq_(OFPBRC_BAD_LEN, 6) - eq_(OFPBRC_BUFFER_EMPTY, 7) - eq_(OFPBRC_BUFFER_UNKNOWN, 8) - eq_(OFPBRC_BAD_TABLE_ID, 9) - eq_(OFPBRC_IS_SLAVE, 10) - eq_(OFPBRC_BAD_PORT, 11) - eq_(OFPBRC_BAD_PACKET, 12) - - def test_enum_ofp_bad_action_code(self): - eq_(OFPBAC_BAD_TYPE, 0) - eq_(OFPBAC_BAD_LEN, 1) - eq_(OFPBAC_BAD_EXPERIMENTER, 2) - eq_(OFPBAC_BAD_EXP_TYPE, 3) - eq_(OFPBAC_BAD_OUT_PORT, 4) - eq_(OFPBAC_BAD_ARGUMENT, 5) - eq_(OFPBAC_EPERM, 6) - eq_(OFPBAC_TOO_MANY, 7) - eq_(OFPBAC_BAD_QUEUE, 8) - eq_(OFPBAC_BAD_OUT_GROUP, 9) - eq_(OFPBAC_MATCH_INCONSISTENT, 10) - eq_(OFPBAC_UNSUPPORTED_ORDER, 11) - eq_(OFPBAC_BAD_TAG, 12) - eq_(OFPBAC_BAD_SET_TYPE, 13) - eq_(OFPBAC_BAD_SET_LEN, 14) - eq_(OFPBAC_BAD_SET_ARGUMENT, 15) - - def test_enum_ofp_bad_instruction_code(self): - eq_(OFPBIC_UNKNOWN_INST, 0) - eq_(OFPBIC_UNSUP_INST, 1) - eq_(OFPBIC_BAD_TABLE_ID, 2) - eq_(OFPBIC_UNSUP_METADATA, 3) - eq_(OFPBIC_UNSUP_METADATA_MASK, 4) - eq_(OFPBIC_BAD_EXPERIMENTER, 5) - eq_(OFPBIC_BAD_EXP_TYPE, 6) - eq_(OFPBIC_BAD_LEN, 7) - eq_(OFPBIC_EPERM, 8) - - def test_enum_ofp_bad_match_code(self): - eq_(OFPBMC_BAD_TYPE, 0) - eq_(OFPBMC_BAD_LEN, 1) - eq_(OFPBMC_BAD_TAG, 2) - eq_(OFPBMC_BAD_DL_ADDR_MASK, 3) - eq_(OFPBMC_BAD_NW_ADDR_MASK, 4) - eq_(OFPBMC_BAD_WILDCARDS, 5) - eq_(OFPBMC_BAD_FIELD, 6) - eq_(OFPBMC_BAD_VALUE, 7) - eq_(OFPBMC_BAD_MASK, 8) - eq_(OFPBMC_BAD_PREREQ, 9) - eq_(OFPBMC_DUP_FIELD, 10) - eq_(OFPBMC_EPERM, 11) - - def test_enum_ofp_flow_mod_failed_code(self): - eq_(OFPFMFC_UNKNOWN, 0) - eq_(OFPFMFC_TABLE_FULL, 1) - eq_(OFPFMFC_BAD_TABLE_ID, 2) - eq_(OFPFMFC_OVERLAP, 3) - eq_(OFPFMFC_EPERM, 4) - eq_(OFPFMFC_BAD_TIMEOUT, 5) - eq_(OFPFMFC_BAD_COMMAND, 6) - eq_(OFPFMFC_BAD_FLAGS, 7) - - def test_enum_ofp_group_mod_failed_code(self): - eq_(OFPGMFC_GROUP_EXISTS, 0) - eq_(OFPGMFC_INVALID_GROUP, 1) - eq_(OFPGMFC_WEIGHT_UNSUPPORTED, 2) - eq_(OFPGMFC_OUT_OF_GROUPS, 3) - eq_(OFPGMFC_OUT_OF_BUCKETS, 4) - eq_(OFPGMFC_CHAINING_UNSUPPORTED, 5) - eq_(OFPGMFC_WATCH_UNSUPPORTED, 6) - eq_(OFPGMFC_LOOP, 7) - eq_(OFPGMFC_UNKNOWN_GROUP, 8) - eq_(OFPGMFC_CHAINED_GROUP, 9) - eq_(OFPGMFC_BAD_TYPE, 10) - eq_(OFPGMFC_BAD_COMMAND, 11) - eq_(OFPGMFC_BAD_BUCKET, 12) - eq_(OFPGMFC_BAD_WATCH, 13) - eq_(OFPGMFC_EPERM, 14) - - def test_enum_ofp_port_mod_failed_code(self): - eq_(OFPPMFC_BAD_PORT, 0) - eq_(OFPPMFC_BAD_HW_ADDR, 1) - eq_(OFPPMFC_BAD_CONFIG, 2) - eq_(OFPPMFC_BAD_ADVERTISE, 3) - eq_(OFPPMFC_EPERM, 4) - - def test_enum_ofp_table_mod_failed_code(self): - eq_(OFPTMFC_BAD_TABLE, 0) - eq_(OFPTMFC_BAD_CONFIG, 1) - eq_(OFPTMFC_EPERM, 2) - - def test_enum_ofp_queue_op_failed_code(self): - eq_(OFPQOFC_BAD_PORT, 0) - eq_(OFPQOFC_BAD_QUEUE, 1) - eq_(OFPQOFC_EPERM, 2) - - def test_enum_ofp_switch_config_failed_code(self): - eq_(OFPSCFC_BAD_FLAGS, 0) - eq_(OFPSCFC_BAD_LEN, 1) - eq_(OFPSCFC_EPERM, 2) - - def test_enum_ofp_role_request_failed_code(self): - eq_(OFPRRFC_STALE, 0) - eq_(OFPRRFC_UNSUP, 1) - eq_(OFPRRFC_BAD_ROLE, 2) - - def test_struct_ofp_error_experimenter_msg(self): - eq_(OFP_ERROR_EXPERIMENTER_MSG_PACK_STR, '!HHI') - eq_(OFP_ERROR_EXPERIMENTER_MSG_SIZE, 16) - - def test_struct_ofp_experimenter_header(self): - eq_(OFP_EXPERIMENTER_HEADER_PACK_STR, '!II') - eq_(OFP_EXPERIMENTER_HEADER_SIZE, 16) - - # OXM is interpreted as a 32-bit word in network byte order. - # - oxm_class 17-bit to 32-bit (OFPXMC_*). - # - oxm_field 10-bit to 16-bit (OFPXMT_OFB_*). - # - oxm_hasmask 9-bit (Set if OXM include a bitmask). - # - oxm_length 1-bit to 8-bit (Lenght of OXM payload). - def _test_OXM(self, value, class_, field, hasmask, length): - virfy = (class_ << 16) | (field << 9) | (hasmask << 8) | length - eq_(value >> 32, 0) - eq_(value, virfy) - - def _test_OXM_basic(self, value, field, hasmask, length): - self._test_OXM(value, OFPXMC_OPENFLOW_BASIC, field, hasmask, length) - - def test_OXM_basic(self): - self._test_OXM_basic(OXM_OF_IN_PORT, OFPXMT_OFB_IN_PORT, 0, 4) - self._test_OXM_basic(OXM_OF_IN_PHY_PORT, OFPXMT_OFB_IN_PHY_PORT, 0, 4) - self._test_OXM_basic(OXM_OF_METADATA, OFPXMT_OFB_METADATA, 0, 8) - self._test_OXM_basic(OXM_OF_METADATA_W, OFPXMT_OFB_METADATA, 1, 16) - self._test_OXM_basic(OXM_OF_ETH_DST, OFPXMT_OFB_ETH_DST, 0, 6) - self._test_OXM_basic(OXM_OF_ETH_DST_W, OFPXMT_OFB_ETH_DST, 1, 12) - self._test_OXM_basic(OXM_OF_ETH_SRC, OFPXMT_OFB_ETH_SRC, 0, 6) - self._test_OXM_basic(OXM_OF_ETH_SRC_W, OFPXMT_OFB_ETH_SRC, 1, 12) - self._test_OXM_basic(OXM_OF_ETH_TYPE, OFPXMT_OFB_ETH_TYPE, 0, 2) - self._test_OXM_basic(OXM_OF_VLAN_VID, OFPXMT_OFB_VLAN_VID, 0, 2) - self._test_OXM_basic(OXM_OF_VLAN_VID_W, OFPXMT_OFB_VLAN_VID, 1, 4) - self._test_OXM_basic(OXM_OF_VLAN_PCP, OFPXMT_OFB_VLAN_PCP, 0, 1) - self._test_OXM_basic(OXM_OF_IP_DSCP, OFPXMT_OFB_IP_DSCP, 0, 1) - self._test_OXM_basic(OXM_OF_IP_ECN, OFPXMT_OFB_IP_ECN, 0, 1) - self._test_OXM_basic(OXM_OF_IP_PROTO, OFPXMT_OFB_IP_PROTO, 0, 1) - self._test_OXM_basic(OXM_OF_IPV4_SRC, OFPXMT_OFB_IPV4_SRC, 0, 4) - self._test_OXM_basic(OXM_OF_IPV4_SRC_W, OFPXMT_OFB_IPV4_SRC, 1, 8) - self._test_OXM_basic(OXM_OF_IPV4_DST, OFPXMT_OFB_IPV4_DST, 0, 4) - self._test_OXM_basic(OXM_OF_IPV4_DST_W, OFPXMT_OFB_IPV4_DST, 1, 8) - self._test_OXM_basic(OXM_OF_TCP_SRC, OFPXMT_OFB_TCP_SRC, 0, 2) - self._test_OXM_basic(OXM_OF_TCP_DST, OFPXMT_OFB_TCP_DST, 0, 2) - self._test_OXM_basic(OXM_OF_UDP_SRC, OFPXMT_OFB_UDP_SRC, 0, 2) - self._test_OXM_basic(OXM_OF_UDP_DST, OFPXMT_OFB_UDP_DST, 0, 2) - self._test_OXM_basic(OXM_OF_SCTP_SRC, OFPXMT_OFB_SCTP_SRC, 0, 2) - self._test_OXM_basic(OXM_OF_SCTP_DST, OFPXMT_OFB_SCTP_DST, 0, 2) - self._test_OXM_basic(OXM_OF_ICMPV4_TYPE, OFPXMT_OFB_ICMPV4_TYPE, 0, 1) - self._test_OXM_basic(OXM_OF_ICMPV4_CODE, OFPXMT_OFB_ICMPV4_CODE, 0, 1) - self._test_OXM_basic(OXM_OF_ARP_OP, OFPXMT_OFB_ARP_OP, 0, 2) - self._test_OXM_basic(OXM_OF_ARP_SPA, OFPXMT_OFB_ARP_SPA, 0, 4) - self._test_OXM_basic(OXM_OF_ARP_SPA_W, OFPXMT_OFB_ARP_SPA, 1, 8) - self._test_OXM_basic(OXM_OF_ARP_TPA, OFPXMT_OFB_ARP_TPA, 0, 4) - self._test_OXM_basic(OXM_OF_ARP_TPA_W, OFPXMT_OFB_ARP_TPA, 1, 8) - self._test_OXM_basic(OXM_OF_ARP_SHA, OFPXMT_OFB_ARP_SHA, 0, 6) - self._test_OXM_basic(OXM_OF_ARP_SHA_W, OFPXMT_OFB_ARP_SHA, 1, 12) - self._test_OXM_basic(OXM_OF_ARP_THA, OFPXMT_OFB_ARP_THA, 0, 6) - self._test_OXM_basic(OXM_OF_ARP_THA_W, OFPXMT_OFB_ARP_THA, 1, 12) - self._test_OXM_basic(OXM_OF_IPV6_SRC, OFPXMT_OFB_IPV6_SRC, 0, 16) - self._test_OXM_basic(OXM_OF_IPV6_SRC_W, OFPXMT_OFB_IPV6_SRC, 1, 32) - self._test_OXM_basic(OXM_OF_IPV6_DST, OFPXMT_OFB_IPV6_DST, 0, 16) - self._test_OXM_basic(OXM_OF_IPV6_DST_W, OFPXMT_OFB_IPV6_DST, 1, 32) - self._test_OXM_basic(OXM_OF_IPV6_FLABEL, OFPXMT_OFB_IPV6_FLABEL, 0, 4) - self._test_OXM_basic(OXM_OF_IPV6_FLABEL_W, - OFPXMT_OFB_IPV6_FLABEL, 1, 8) - self._test_OXM_basic(OXM_OF_ICMPV6_TYPE, OFPXMT_OFB_ICMPV6_TYPE, 0, 1) - self._test_OXM_basic(OXM_OF_ICMPV6_CODE, OFPXMT_OFB_ICMPV6_CODE, 0, 1) - self._test_OXM_basic(OXM_OF_IPV6_ND_TARGET, - OFPXMT_OFB_IPV6_ND_TARGET, 0, 16) - self._test_OXM_basic(OXM_OF_IPV6_ND_SLL, OFPXMT_OFB_IPV6_ND_SLL, 0, 6) - self._test_OXM_basic(OXM_OF_IPV6_ND_TLL, OFPXMT_OFB_IPV6_ND_TLL, 0, 6) - self._test_OXM_basic(OXM_OF_MPLS_LABEL, OFPXMT_OFB_MPLS_LABEL, 0, 4) - self._test_OXM_basic(OXM_OF_MPLS_TC, OFPXMT_OFB_MPLS_TC, 0, 1) - - def test_define_constants(self): - eq_(OFP_VERSION, 0x03) - eq_(OFP_TCP_PORT, 6633) - eq_(MAX_XID, 0xffffffff) diff --git a/ryu/tests/unit/ofproto/test_oxm.py b/ryu/tests/unit/ofproto/test_oxm.py deleted file mode 100644 index ffb762fc..00000000 --- a/ryu/tests/unit/ofproto/test_oxm.py +++ /dev/null @@ -1,188 +0,0 @@ -# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2015 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest - -import ryu.ofproto.ofproto_v1_3 as ofp - - -class Test_OXM(unittest.TestCase): - def _test_encode(self, user, on_wire): - (f, uv) = user - (n, v, m) = ofp.oxm_from_user(f, uv) - buf = bytearray() - ofp.oxm_serialize(n, v, m, buf, 0) - self.assertEqual(on_wire, buf) - - def _test_decode(self, user, on_wire): - (n, v, m, l) = ofp.oxm_parse(on_wire, 0) - self.assertEqual(len(on_wire), l) - (f, uv) = ofp.oxm_to_user(n, v, m) - self.assertEqual(user, (f, uv)) - - def _test_encode_header(self, user, on_wire): - f = user - n = ofp.oxm_from_user_header(f) - buf = bytearray() - ofp.oxm_serialize_header(n, buf, 0) - self.assertEqual(on_wire, buf) - - def _test_decode_header(self, user, on_wire): - (n, l) = ofp.oxm_parse_header(on_wire, 0) - self.assertEqual(len(on_wire), l) - f = ofp.oxm_to_user_header(n) - self.assertEqual(user, f) - - def _test(self, user, on_wire, header_bytes): - self._test_encode(user, on_wire) - self._test_decode(user, on_wire) - if isinstance(user[1], tuple): # has mask? - return - user_header = user[0] - on_wire_header = on_wire[:header_bytes] - self._test_decode_header(user_header, on_wire_header) - if user_header.startswith('field_'): - return # not supported - self._test_encode_header(user_header, on_wire_header) - - def test_basic_nomask(self): - user = ('ipv4_src', '192.0.2.1') - on_wire = ( - b'\x80\x00\x16\x04' - b'\xc0\x00\x02\x01' - ) - self._test(user, on_wire, 4) - - def test_basic_mask(self): - user = ('ipv4_src', ('192.0.2.1', '255.255.0.0')) - on_wire = ( - b'\x80\x00\x17\x08' - b'\xc0\x00\x02\x01' - b'\xff\xff\x00\x00' - ) - self._test(user, on_wire, 4) - - def test_exp_nomask(self): - user = ('_dp_hash', 0x12345678) - on_wire = ( - b'\xff\xff\x00\x08' - b'\x00\x00\x23\x20' # Nicira - b'\x12\x34\x56\x78' - ) - self._test(user, on_wire, 8) - - def test_exp_mask(self): - user = ('_dp_hash', (0x12345678, 0x7fffffff)) - on_wire = ( - b'\xff\xff\x01\x0c' - b'\x00\x00\x23\x20' # Nicira - b'\x12\x34\x56\x78' - b'\x7f\xff\xff\xff' - ) - self._test(user, on_wire, 8) - - def test_exp_nomask_2(self): - user = ('tcp_flags', 0x876) - on_wire = ( - b'\xff\xff\x54\x06' - b'\x4f\x4e\x46\x00' # ONF - b'\x08\x76' - ) - self._test(user, on_wire, 8) - - def test_exp_mask_2(self): - user = ('tcp_flags', (0x876, 0x7ff)) - on_wire = ( - b'\xff\xff\x55\x08' - b'\x4f\x4e\x46\x00' # ONF - b'\x08\x76' - b'\x07\xff' - ) - self._test(user, on_wire, 8) - - def test_exp_nomask_3(self): - user = ('actset_output', 0x98765432) - on_wire = ( - b'\xff\xff\x56\x08' - b'\x4f\x4e\x46\x00' # ONF - b'\x98\x76\x54\x32' - ) - self._test(user, on_wire, 8) - - def test_exp_mask_3(self): - user = ('actset_output', (0x98765432, 0xfffffffe)) - on_wire = ( - b'\xff\xff\x57\x0c' - b'\x4f\x4e\x46\x00' # ONF - b'\x98\x76\x54\x32' - b'\xff\xff\xff\xfe' - ) - self._test(user, on_wire, 8) - - def test_nxm_1_nomask(self): - user = ('tun_ipv4_src', '192.0.2.1') - on_wire = ( - b'\x00\x01\x3e\x04' - b'\xc0\x00\x02\x01' - ) - self._test(user, on_wire, 4) - - def test_nxm_1_mask(self): - user = ('tun_ipv4_src', ('192.0.2.1', '255.255.0.0')) - on_wire = ( - b'\x00\x01\x3f\x08' - b'\xc0\x00\x02\x01' - b'\xff\xff\x00\x00' - ) - self._test(user, on_wire, 4) - - def test_ext_256_nomask(self): - user = ('pbb_uca', 50) - on_wire = ( - b'\xff\xff\x00\x07' - b'\x4f\x4e\x46\x00' # ONF - b'\x0a\x00' - b'\x32' - ) - self._test(user, on_wire, 10) - - def test_ext_256_mask(self): - user = ('pbb_uca', (50, 51)) - on_wire = ( - b'\xff\xff\x01\x08' - b'\x4f\x4e\x46\x00' # ONF - b'\x0a\x00' - b'\x32' - b'\x33' - ) - self._test(user, on_wire, 10) - - def test_basic_unknown_nomask(self): - user = ('field_100', 'aG9nZWhvZ2U=') - on_wire = ( - b'\x00\x00\xc8\x08' - b'hogehoge' - ) - self._test(user, on_wire, 4) - - def test_basic_unknown_mask(self): - user = ('field_100', ('aG9nZWhvZ2U=', 'ZnVnYWZ1Z2E=')) - on_wire = ( - b'\x00\x00\xc9\x10' - b'hogehoge' - b'fugafuga' - ) - self._test(user, on_wire, 4) diff --git a/ryu/tests/unit/ofproto/test_oxs.py b/ryu/tests/unit/ofproto/test_oxs.py deleted file mode 100644 index 289731f0..00000000 --- a/ryu/tests/unit/ofproto/test_oxs.py +++ /dev/null @@ -1,116 +0,0 @@ -# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import unittest - -import ryu.ofproto.ofproto_v1_5 as ofp - - -LOG = logging.getLogger(__name__) - - -class Test_OXS(unittest.TestCase): - def _test_encode(self, user, on_wire): - """ test encording user value into on-wire bytes. - - n: name of OXS field - uv: user vale - t: oxs_type - v: on-wire bytes value - """ - (n, uv) = user - (t, v, _) = ofp.oxs_from_user(n, uv) - buf = bytearray() - ofp.oxs_serialize(t, v, None, buf, 0) - self.assertEqual(on_wire, buf) - - def _test_decode(self, user, on_wire): - """ test decording user value from on-wire bytes. - - t: oxs_type - v: on-wire bytes value - l: length of field - n: name of OXS field - uv: user vale - """ - (t, v, _, l) = ofp.oxs_parse(on_wire, 0) - self.assertEqual(len(on_wire), l) - (n, uv) = ofp.oxs_to_user(t, v, None) - self.assertEqual(user, (n, uv)) - - def _test_encode_header(self, user, on_wire): - """ test encording header. - - t: oxs_type - """ - t = ofp.oxs_from_user_header(user) - buf = bytearray() - ofp.oxs_serialize_header(t, buf, 0) - self.assertEqual(on_wire, buf) - - def _test_decode_header(self, user, on_wire): - """ test decording header. - - t: oxs_type - l: length of header - n: name of OXS field - """ - (t, l) = ofp.oxs_parse_header(on_wire, 0) - self.assertEqual(len(on_wire), l) - n = ofp.oxs_to_user_header(t) - self.assertEqual(user, n) - - def _test(self, user, on_wire, header_bytes): - """ execute tests. - - user: user specified value. - eg. user = ('duration', (100, 100)) - on_wire: on-wire bytes - header_bytes: header length - """ - self._test_encode(user, on_wire) - self._test_decode(user, on_wire) - user_header = user[0] - on_wire_header = on_wire[:header_bytes] - self._test_decode_header(user_header, on_wire_header) - if user_header.startswith('field_'): - return # not supported - self._test_encode_header(user_header, on_wire_header) - - def test_basic_single(self): - user = ('flow_count', 100) - on_wire = ( - b'\x80\x02\x06\x04' - b'\x00\x00\x00\x64' - ) - self._test(user, on_wire, 4) - - def test_basic_double(self): - user = ('duration', (100, 200)) - on_wire = ( - b'\x80\x02\x00\x08' - b'\x00\x00\x00\x64' - b'\x00\x00\x00\xc8' - ) - self._test(user, on_wire, 4) - - def test_basic_unknown(self): - user = ('field_100', 'aG9nZWhvZ2U=') - on_wire = ( - b'\x00\x00\xc8\x08' - b'hogehoge' - ) - self._test(user, on_wire, 4) diff --git a/ryu/tests/unit/ofproto/test_parser.py b/ryu/tests/unit/ofproto/test_parser.py deleted file mode 100644 index 2f9061cc..00000000 --- a/ryu/tests/unit/ofproto/test_parser.py +++ /dev/null @@ -1,310 +0,0 @@ -# Copyright (C) 2013,2014,2015 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013,2014,2015 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import six -import sys -import unittest -from nose.tools import eq_ - -from ryu.ofproto import ofproto_parser -from ryu.ofproto import ofproto_protocol -from ryu.ofproto import ofproto_v1_0 -from ryu.ofproto import ofproto_v1_2 -from ryu.ofproto import ofproto_v1_3 -from ryu.ofproto import ofproto_v1_4 -from ryu.ofproto import ofproto_v1_5 -from ryu.tests import test_lib -from ryu import exception -import json - - -# (has_parser, has_serializer) -implemented = { - 1: { - ofproto_v1_0.OFPT_PACKET_OUT: (False, True), - ofproto_v1_0.OFPT_FEATURES_REQUEST: (False, True), - ofproto_v1_0.OFPT_FEATURES_REPLY: (True, False), - ofproto_v1_0.OFPT_PACKET_IN: (True, False), - ofproto_v1_0.OFPT_FLOW_MOD: (True, True), - }, - 3: { - ofproto_v1_2.OFPT_FEATURES_REQUEST: (False, True), - ofproto_v1_2.OFPT_FEATURES_REPLY: (True, False), - ofproto_v1_2.OFPT_GET_CONFIG_REQUEST: (False, True), - ofproto_v1_2.OFPT_GET_CONFIG_REPLY: (True, False), - ofproto_v1_2.OFPT_SET_CONFIG: (False, True), - ofproto_v1_2.OFPT_PACKET_IN: (True, False), - ofproto_v1_2.OFPT_FLOW_REMOVED: (True, False), - ofproto_v1_2.OFPT_PORT_STATUS: (True, False), - ofproto_v1_2.OFPT_PACKET_OUT: (False, True), - ofproto_v1_2.OFPT_FLOW_MOD: (True, True), - ofproto_v1_2.OFPT_GROUP_MOD: (False, True), - ofproto_v1_2.OFPT_PORT_MOD: (False, True), - ofproto_v1_2.OFPT_TABLE_MOD: (False, True), - ofproto_v1_2.OFPT_STATS_REQUEST: (False, True), - ofproto_v1_2.OFPT_STATS_REPLY: (True, False), - ofproto_v1_2.OFPT_BARRIER_REQUEST: (False, True), - ofproto_v1_2.OFPT_QUEUE_GET_CONFIG_REQUEST: (False, True), - ofproto_v1_2.OFPT_QUEUE_GET_CONFIG_REPLY: (True, False), - ofproto_v1_2.OFPT_ROLE_REQUEST: (False, True), - ofproto_v1_2.OFPT_ROLE_REPLY: (True, False), - }, - 4: { - ofproto_v1_3.OFPT_HELLO: (True, False), - ofproto_v1_3.OFPT_FEATURES_REQUEST: (False, True), - ofproto_v1_3.OFPT_FEATURES_REPLY: (True, False), - ofproto_v1_3.OFPT_GET_CONFIG_REQUEST: (False, True), - ofproto_v1_3.OFPT_GET_CONFIG_REPLY: (True, False), - ofproto_v1_3.OFPT_SET_CONFIG: (False, True), - ofproto_v1_3.OFPT_PACKET_IN: (True, False), - ofproto_v1_3.OFPT_FLOW_REMOVED: (True, False), - ofproto_v1_3.OFPT_PORT_STATUS: (True, False), - ofproto_v1_3.OFPT_PACKET_OUT: (False, True), - ofproto_v1_3.OFPT_FLOW_MOD: (True, True), - ofproto_v1_3.OFPT_GROUP_MOD: (False, True), - ofproto_v1_3.OFPT_PORT_MOD: (False, True), - ofproto_v1_3.OFPT_METER_MOD: (False, True), - ofproto_v1_3.OFPT_TABLE_MOD: (False, True), - ofproto_v1_3.OFPT_MULTIPART_REQUEST: (False, True), - ofproto_v1_3.OFPT_MULTIPART_REPLY: (True, False), - ofproto_v1_3.OFPT_BARRIER_REQUEST: (False, True), - ofproto_v1_3.OFPT_QUEUE_GET_CONFIG_REQUEST: (False, True), - ofproto_v1_3.OFPT_QUEUE_GET_CONFIG_REPLY: (True, False), - ofproto_v1_3.OFPT_ROLE_REQUEST: (False, True), - ofproto_v1_3.OFPT_ROLE_REPLY: (True, False), - ofproto_v1_3.OFPT_GET_ASYNC_REQUEST: (False, True), - ofproto_v1_3.OFPT_GET_ASYNC_REPLY: (True, False), - ofproto_v1_3.OFPT_SET_ASYNC: (False, True), - }, - 5: { - ofproto_v1_4.OFPT_HELLO: (True, False), - ofproto_v1_4.OFPT_FEATURES_REQUEST: (False, True), - ofproto_v1_4.OFPT_FEATURES_REPLY: (True, False), - ofproto_v1_4.OFPT_GET_CONFIG_REQUEST: (False, True), - ofproto_v1_4.OFPT_GET_CONFIG_REPLY: (True, False), - ofproto_v1_4.OFPT_SET_CONFIG: (False, True), - ofproto_v1_4.OFPT_PACKET_IN: (True, False), - ofproto_v1_4.OFPT_FLOW_REMOVED: (True, False), - ofproto_v1_4.OFPT_PORT_STATUS: (True, False), - ofproto_v1_4.OFPT_PACKET_OUT: (False, True), - ofproto_v1_4.OFPT_FLOW_MOD: (True, True), - ofproto_v1_4.OFPT_GROUP_MOD: (True, True), - ofproto_v1_4.OFPT_PORT_MOD: (False, True), - ofproto_v1_4.OFPT_METER_MOD: (True, True), - ofproto_v1_4.OFPT_TABLE_MOD: (False, True), - ofproto_v1_4.OFPT_MULTIPART_REQUEST: (False, True), - ofproto_v1_4.OFPT_MULTIPART_REPLY: (True, False), - ofproto_v1_4.OFPT_BARRIER_REQUEST: (False, True), - ofproto_v1_4.OFPT_ROLE_REQUEST: (False, True), - ofproto_v1_4.OFPT_ROLE_REPLY: (True, False), - ofproto_v1_4.OFPT_GET_ASYNC_REQUEST: (False, True), - ofproto_v1_4.OFPT_GET_ASYNC_REPLY: (True, False), - ofproto_v1_4.OFPT_SET_ASYNC: (False, True), - ofproto_v1_4.OFPT_ROLE_STATUS: (True, False), - ofproto_v1_4.OFPT_TABLE_STATUS: (True, False), - ofproto_v1_4.OFPT_REQUESTFORWARD: (True, True), - ofproto_v1_4.OFPT_BUNDLE_CONTROL: (False, True), - ofproto_v1_4.OFPT_BUNDLE_ADD_MESSAGE: (False, True), - }, - 6: { - ofproto_v1_5.OFPT_HELLO: (True, False), - ofproto_v1_5.OFPT_FEATURES_REQUEST: (False, True), - ofproto_v1_5.OFPT_FEATURES_REPLY: (True, False), - ofproto_v1_5.OFPT_GET_CONFIG_REQUEST: (False, True), - ofproto_v1_5.OFPT_GET_CONFIG_REPLY: (True, False), - ofproto_v1_5.OFPT_SET_CONFIG: (False, True), - ofproto_v1_5.OFPT_PACKET_IN: (True, False), - ofproto_v1_5.OFPT_FLOW_REMOVED: (True, False), - ofproto_v1_5.OFPT_PORT_STATUS: (True, False), - ofproto_v1_5.OFPT_PACKET_OUT: (False, True), - ofproto_v1_5.OFPT_FLOW_MOD: (True, True), - ofproto_v1_5.OFPT_GROUP_MOD: (True, True), - ofproto_v1_5.OFPT_PORT_MOD: (False, True), - ofproto_v1_5.OFPT_METER_MOD: (True, True), - ofproto_v1_5.OFPT_TABLE_MOD: (False, True), - ofproto_v1_5.OFPT_MULTIPART_REQUEST: (False, True), - ofproto_v1_5.OFPT_MULTIPART_REPLY: (True, False), - ofproto_v1_5.OFPT_BARRIER_REQUEST: (False, True), - ofproto_v1_5.OFPT_ROLE_REQUEST: (False, True), - ofproto_v1_5.OFPT_ROLE_REPLY: (True, False), - ofproto_v1_5.OFPT_GET_ASYNC_REQUEST: (False, True), - ofproto_v1_5.OFPT_GET_ASYNC_REPLY: (True, False), - ofproto_v1_5.OFPT_SET_ASYNC: (False, True), - ofproto_v1_5.OFPT_ROLE_STATUS: (True, False), - ofproto_v1_5.OFPT_TABLE_STATUS: (True, False), - ofproto_v1_5.OFPT_REQUESTFORWARD: (True, True), - ofproto_v1_5.OFPT_BUNDLE_CONTROL: (True, True), - ofproto_v1_5.OFPT_BUNDLE_ADD_MESSAGE: (False, True), - ofproto_v1_5.OFPT_CONTROLLER_STATUS: (True, False), - }, -} - - -class Test_Parser(unittest.TestCase): - """ Test case for ryu.ofproto, especially json representation - """ - - def __init__(self, methodName): - print('init %s' % methodName) - super(Test_Parser, self).__init__(methodName) - - def setUp(self): - pass - - def tearDown(self): - pass - - @staticmethod - def _msg_to_jsondict(msg): - return msg.to_jsondict() - - @staticmethod - def _jsondict_to_msg(dp, jsondict): - return ofproto_parser.ofp_msg_from_jsondict(dp, jsondict) - - def _test_msg(self, name, wire_msg, json_str): - def bytes_eq(buf1, buf2): - if buf1 != buf2: - msg = 'EOF in either data' - for i in range(0, min(len(buf1), len(buf2))): - c1 = six.indexbytes(six.binary_type(buf1), i) - c2 = six.indexbytes(six.binary_type(buf2), i) - if c1 != c2: - msg = 'differs at chr %d, %d != %d' % (i, c1, c2) - break - assert buf1 == buf2, "%r != %r, %s" % (buf1, buf2, msg) - - json_dict = json.loads(json_str) - # on-wire -> OFPxxx -> json - (version, msg_type, msg_len, xid) = ofproto_parser.header(wire_msg) - try: - has_parser, has_serializer = implemented[version][msg_type] - except KeyError: - has_parser = True - has_serializer = True - - dp = ofproto_protocol.ProtocolDesc(version=version) - if has_parser: - try: - msg = ofproto_parser.msg(dp, version, msg_type, msg_len, xid, - wire_msg) - json_dict2 = self._msg_to_jsondict(msg) - except exception.OFPTruncatedMessage as e: - json_dict2 = {'OFPTruncatedMessage': - self._msg_to_jsondict(e.ofpmsg)} - # XXXdebug code - open(('/tmp/%s.json' % name), 'w').write(json.dumps(json_dict2)) - eq_(json_dict, json_dict2) - if 'OFPTruncatedMessage' in json_dict2: - return - - # json -> OFPxxx -> json - xid = json_dict[list(json_dict.keys())[0]].pop('xid', None) - msg2 = self._jsondict_to_msg(dp, json_dict) - msg2.set_xid(xid) - if has_serializer: - msg2.serialize() - eq_(self._msg_to_jsondict(msg2), json_dict) - bytes_eq(wire_msg, msg2.buf) - - # check if "len" "length" fields can be omitted - - def _remove(d, names): - f = lambda x: _remove(x, names) - if isinstance(d, list): - return list(map(f, d)) - if isinstance(d, dict): - d2 = {} - for k, v in d.items(): - if k in names: - continue - d2[k] = f(v) - return d2 - return d - - json_dict3 = _remove(json_dict, ['len', 'length']) - msg3 = self._jsondict_to_msg(dp, json_dict3) - msg3.set_xid(xid) - msg3.serialize() - bytes_eq(wire_msg, msg3.buf) - - msg2.serialize() - bytes_eq(wire_msg, msg2.buf) - - -def _add_tests(): - import os - import os.path - import functools - - this_dir = os.path.dirname(sys.modules[__name__].__file__) - packet_data_dir = os.path.join(this_dir, '../../packet_data') - json_dir = os.path.join(this_dir, 'json') - ofvers = [ - 'of10', - 'of12', - 'of13', - 'of14', - 'of15', - ] - cases = set() - for ver in ofvers: - pdir = packet_data_dir + '/' + ver - jdir = json_dir + '/' + ver - n_added = 0 - for file in os.listdir(pdir): - if file.endswith('.packet'): - truncated = None - elif '.truncated' in file: - # contents of .truncated files aren't relevant - s1, s2 = file.split('.truncated') - try: - truncated = int(s2) - except ValueError: - continue - file = s1 + '.packet' - else: - continue - wire_msg = open(pdir + '/' + file, 'rb').read() - if not truncated: - json_str = open(jdir + '/' + file + '.json', 'r').read() - else: - json_str = open(jdir + '/' + file + - '.truncated%d.json' % truncated, 'r').read() - wire_msg = wire_msg[:truncated] - method_name = ('test_' + file).replace('-', '_').replace('.', '_') - if truncated: - method_name += '_truncated%d' % truncated - - def _run(self, name, wire_msg, json_str): - print('processing %s ...' % name) - if six.PY3: - self._test_msg(self, name, wire_msg, json_str) - else: - self._test_msg(name, wire_msg, json_str) - print('adding %s ...' % method_name) - f = functools.partial(_run, name=method_name, wire_msg=wire_msg, - json_str=json_str) - test_lib.add_method(Test_Parser, method_name, f) - cases.add(method_name) - n_added += 1 - assert n_added > 0 - assert (cases == - set(unittest.defaultTestLoader.getTestCaseNames(Test_Parser))) - -_add_tests() diff --git a/ryu/tests/unit/ofproto/test_parser_compat.py b/ryu/tests/unit/ofproto/test_parser_compat.py deleted file mode 100644 index dcca56bd..00000000 --- a/ryu/tests/unit/ofproto/test_parser_compat.py +++ /dev/null @@ -1,160 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import six -import sys -import unittest -from nose.tools import eq_ -from nose.tools import ok_ - -from ryu.ofproto import ofproto_v1_2 -from ryu.ofproto import ofproto_v1_3 -from ryu.ofproto import ofproto_v1_2_parser -from ryu.ofproto import ofproto_v1_3_parser - -from ryu.lib import addrconv -from ryu.tests import test_lib -from struct import unpack - - -class Test_Parser_Compat(unittest.TestCase): - def __init__(self, methodName): - print('init %s' % methodName) - super(Test_Parser_Compat, self).__init__(methodName) - - def setUp(self): - pass - - def tearDown(self): - pass - - def _test(self, name, ofpp): - ofp = { - ofproto_v1_2_parser: ofproto_v1_2, - ofproto_v1_3_parser: ofproto_v1_3, - }[ofpp] - - in_port = 987654321 - eth_src = 'aa:bb:cc:dd:ee:ff' - ipv4_src = '192.0.2.9' - ipv6_src = 'fe80::f00b:a4ff:feef:5d8f' - - old_in_port = in_port - old_eth_src = addrconv.mac.text_to_bin(eth_src) - old_ipv4_src = unpack('!I', addrconv.ipv4.text_to_bin(ipv4_src))[0] - old_ipv6_src = list(unpack('!8H', - addrconv.ipv6.text_to_bin(ipv6_src))) - - def check(o): - check_old(o) - check_new(o) - - def check_old(o): - # old api - def get_field(m, t): - for f in m.fields: - if isinstance(f, t): - return f - get_value = lambda m, t: get_field(m, t).value - - eq_(get_value(o, ofpp.MTInPort), old_in_port) - eq_(get_value(o, ofpp.MTEthSrc), old_eth_src) - eq_(get_value(o, ofpp.MTIPV4Src), old_ipv4_src) - eq_(get_value(o, ofpp.MTIPv6Src), old_ipv6_src) - - def check_new(o): - # new api - eq_(o['in_port'], in_port) - eq_(o['eth_src'], eth_src) - eq_(o['ipv4_src'], ipv4_src) - eq_(o['ipv6_src'], ipv6_src) - - # ensure that old and new api produces the same thing - - # old api - old = ofpp.OFPMatch() - old.set_in_port(old_in_port) - old.set_dl_src(old_eth_src) - old.set_ipv4_src(old_ipv4_src) - old.set_ipv6_src(old_ipv6_src) - - old_buf = bytearray() - old.serialize(old_buf, 0) - - # note: you can't inspect an object composed with the old set_XXX api - # before serialize(). - check_old(old) - - # another variant of old api; originally it was intended to be - # internal but actually used in the field. eg. LINC l2_switch_v1_3.py - old2 = ofpp.OFPMatch() - old2.append_field(ofp.OXM_OF_IN_PORT, old_in_port) - old2.append_field(ofp.OXM_OF_ETH_SRC, old_eth_src) - old2.append_field(ofp.OXM_OF_IPV4_SRC, old_ipv4_src) - old2.append_field(ofp.OXM_OF_IPV6_SRC, old_ipv6_src) - check_old(old2) - - old2_buf = bytearray() - old2.serialize(old2_buf, 0) - - # new api - new = ofpp.OFPMatch(in_port=in_port, eth_src=eth_src, - ipv4_src=ipv4_src, ipv6_src=ipv6_src) - check_new(new) - - new_buf = bytearray() - new.serialize(new_buf, 0) - eq_(new_buf, old_buf) - eq_(new_buf, old2_buf) - - old_jsondict = old.to_jsondict() - old2_jsondict = old2.to_jsondict() - new_jsondict = new.to_jsondict() - eq_(new_jsondict, old_jsondict) - eq_(new_jsondict, old2_jsondict) - - eq_(str(new), str(old)) - eq_(str(new), str(old2)) - - # a parsed object can be inspected by old and new api - - check(ofpp.OFPMatch.parser(six.binary_type(new_buf), 0)) - check(ofpp.OFPMatch.from_jsondict(list(new_jsondict.values())[0])) - - -def _add_tests(): - import functools - import itertools - - ofpps = [ofproto_v1_2_parser, ofproto_v1_3_parser] - for ofpp in ofpps: - mod = ofpp.__name__.split('.')[-1] - method_name = 'test_' + mod + '_ofpmatch_compat' - - def _run(self, name, ofpp): - print('processing %s ...' % name) - if six.PY3: - self._test(self, name, ofpp) - else: - self._test(name, ofpp) - print('adding %s ...' % method_name) - f = functools.partial(_run, name=method_name, - ofpp=ofpp) - test_lib.add_method(Test_Parser_Compat, method_name, f) - -_add_tests() diff --git a/ryu/tests/unit/ofproto/test_parser_ofpmatch.py b/ryu/tests/unit/ofproto/test_parser_ofpmatch.py deleted file mode 100644 index d4dba9ea..00000000 --- a/ryu/tests/unit/ofproto/test_parser_ofpmatch.py +++ /dev/null @@ -1,290 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -try: - # Python 3 - from functools import reduce -except ImportError: - # Python 2 - pass - -import six -import unittest -from nose.tools import eq_ -from nose.tools import ok_ - -from ryu.ofproto import ofproto_v1_2 -from ryu.ofproto import ofproto_v1_3 -from ryu.ofproto import ofproto_v1_4 -from ryu.ofproto import ofproto_v1_5 -from ryu.ofproto import ofproto_v1_2_parser -from ryu.ofproto import ofproto_v1_3_parser -from ryu.ofproto import ofproto_v1_4_parser -from ryu.ofproto import ofproto_v1_5_parser -from ryu.tests import test_lib - - -class Test_Parser_OFPMatch(unittest.TestCase): - _ofp = {ofproto_v1_2_parser: ofproto_v1_2, - ofproto_v1_3_parser: ofproto_v1_3, - ofproto_v1_4_parser: ofproto_v1_4, - ofproto_v1_5_parser: ofproto_v1_5} - - def __init__(self, methodName): - print('init %s' % methodName) - super(Test_Parser_OFPMatch, self).__init__(methodName) - - def setUp(self): - pass - - def tearDown(self): - pass - - def _test(self, name, ofpp, d, domask): - if domask: - d = dict(self._ofp[ofpp].oxm_normalize_user(k, uv) - for (k, uv) - in d.items()) - match = ofpp.OFPMatch(**d) - b = bytearray() - match.serialize(b, 0) - match2 = match.parser(six.binary_type(b), 0) - for k, v in d.items(): - ok_(k in match) - ok_(k in match2) - eq_(match[k], v) - eq_(match2[k], v) - for k, v in match.iteritems(): - ok_(k in d) - eq_(d[k], v) - for k, v in match2.iteritems(): - ok_(k in d) - eq_(d[k], v) - - -def _add_tests(): - import functools - import itertools - - class Field(object): - @classmethod - def generate_mask(cls): - return list(cls.generate())[1] - - class Int1(Field): - @staticmethod - def generate(): - yield 0 - yield 0xff - - class Int2(Field): - @staticmethod - def generate(): - yield 0 - yield 0x1234 - yield 0xffff - - class Int3(Field): - @staticmethod - def generate(): - yield 0 - yield 0x123456 - yield 0xffffff - - class Int4(Field): - @staticmethod - def generate(): - yield 0 - yield 0x12345678 - yield 0xffffffff - - class Int8(Field): - @staticmethod - def generate(): - yield 0 - yield 0x123456789abcdef0 - yield 0xffffffffffffffff - - class Mac(Field): - @staticmethod - def generate(): - yield '00:00:00:00:00:00' - yield 'f2:0b:a4:7d:f8:ea' - yield 'ff:ff:ff:ff:ff:ff' - - class IPv4(Field): - @staticmethod - def generate(): - yield '0.0.0.0' - yield '192.0.2.1' - yield '255.255.255.255' - - class IPv6(Field): - @staticmethod - def generate(): - yield '::' - yield 'fe80::f00b:a4ff:fed0:3f70' - yield 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' - - class B64(Field): - @staticmethod - def generate(): - yield 'aG9nZWhvZ2U=' - yield 'ZnVnYWZ1Z2E=' - - ofpps = [ofproto_v1_2_parser, ofproto_v1_3_parser, - ofproto_v1_4_parser, ofproto_v1_5_parser] - common = [ - # OpenFlow Basic - ('in_port', Int4), - ('in_phy_port', Int4), - ('metadata', Int8), - ('eth_dst', Mac), - ('eth_src', Mac), - ('eth_type', Int2), - ('vlan_vid', Int2), - ('vlan_pcp', Int1), - ('ip_dscp', Int1), - ('ip_ecn', Int1), - ('ip_proto', Int1), - ('ipv4_src', IPv4), - ('ipv4_dst', IPv4), - ('tcp_src', Int2), - ('tcp_dst', Int2), - ('udp_src', Int2), - ('udp_dst', Int2), - ('sctp_src', Int2), - ('sctp_dst', Int2), - ('icmpv4_type', Int1), - ('icmpv4_code', Int1), - ('arp_op', Int2), - ('arp_spa', IPv4), - ('arp_tpa', IPv4), - ('arp_sha', Mac), - ('arp_tha', Mac), - ('ipv6_src', IPv6), - ('ipv6_dst', IPv6), - ('ipv6_flabel', Int4), - ('icmpv6_type', Int1), - ('icmpv6_code', Int1), - ('ipv6_nd_target', IPv6), - ('ipv6_nd_sll', Mac), - ('ipv6_nd_tll', Mac), - ('mpls_label', Int4), - ('mpls_tc', Int1), - # Old ONF Experimenter --> OpenFlow Basic (OF1.4+) - ('pbb_uca', Int1), - # ONF Experimenter --> OpenFlow Basic (OF1.5+) - ('tcp_flags', Int2), - ('actset_output', Int4), - # Nicira Experimenter - ('eth_dst_nxm', Mac), - ('eth_src_nxm', Mac), - ('tunnel_id_nxm', Int8), - ('tun_ipv4_src', IPv4), - ('tun_ipv4_dst', IPv4), - ('pkt_mark', Int4), - ('conj_id', Int4), - ('tun_ipv6_src', IPv6), - ('tun_ipv6_dst', IPv6), - ('_dp_hash', Int4), - ('reg0', Int4), - ('reg1', Int4), - ('reg2', Int4), - ('reg3', Int4), - ('reg4', Int4), - ('reg5', Int4), - ('reg6', Int4), - ('reg7', Int4), - # Common Experimenter - ('field_100', B64), - ] - L = {} - L[ofproto_v1_2_parser] = common + [ - # OF1.2 doesn't have OXM_OF_PBB_ISID. - # OFPXMC_OPENFLOW_BASIC = 0x8000 - # OXM_OF_PBB_ISID = 37 - # (OFPXMC_OPENFLOW_BASIC << 7) + OXM_OF_PBB_ISID == 4194341 - ('field_4194341', B64), - ] - L[ofproto_v1_3_parser] = common + [ - # OpenFlow Basic (OF1.3+) - ('mpls_bos', Int1), - ('pbb_isid', Int3), - ('tunnel_id', Int8), - ('ipv6_exthdr', Int2), - ] - L[ofproto_v1_4_parser] = L[ofproto_v1_3_parser] - L[ofproto_v1_5_parser] = L[ofproto_v1_4_parser] + [ - # OpenFlow Basic (OF1.5+) - ('packet_type', Int4), - ] - - def flatten_one(l, i): - if isinstance(i, tuple): - return l + flatten(i) - else: - return l + [i] - flatten = lambda l: reduce(flatten_one, l, []) - - for ofpp in ofpps: - for n in range(1, 3): - for C in itertools.combinations(L[ofpp], n): - l = [1] - keys = [] - clss = [] - for (k, cls) in C: - l = itertools.product(l, cls.generate()) - keys.append(k) - clss.append(cls) - l = [flatten(x)[1:] for x in l] - for domask in [True, False]: - for values in l: - if domask: - values = [(value, cls.generate_mask()) - for (cls, value) - in zip(clss, values)] - d = dict(zip(keys, values)) - mod = ofpp.__name__.split('.')[-1] - method_name = 'test_' + mod - if domask: - method_name += '_mask' - for k in sorted(dict(d).keys()): - method_name += '_' + str(k) - method_name += '_' + str(d[k]) - method_name = method_name.replace(':', '_') - method_name = method_name.replace('.', '_') - method_name = method_name.replace('(', '_') - method_name = method_name.replace(')', '_') - method_name = method_name.replace(',', '_') - method_name = method_name.replace("'", '_') - method_name = method_name.replace(' ', '_') - - def _run(self, name, ofpp, d, domask): - print('processing %s ...' % name) - if six.PY3: - self._test(self, name, ofpp, d, domask) - else: - self._test(name, ofpp, d, domask) - print('adding %s ...' % method_name) - f = functools.partial(_run, name=method_name, - ofpp=ofpp, d=d, domask=domask) - test_lib.add_method(Test_Parser_OFPMatch, - method_name, f) - -_add_tests() diff --git a/ryu/tests/unit/ofproto/test_parser_ofpstats.py b/ryu/tests/unit/ofproto/test_parser_ofpstats.py deleted file mode 100644 index 0ce428ab..00000000 --- a/ryu/tests/unit/ofproto/test_parser_ofpstats.py +++ /dev/null @@ -1,207 +0,0 @@ -# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -try: - # Python 3 - from functools import reduce -except ImportError: - # Python 2 - pass - -import six -import sys -import unittest -from nose.tools import eq_ -from nose.tools import ok_ - -from ryu.ofproto import ofproto_v1_5 -from ryu.ofproto import ofproto_v1_5_parser -from ryu.tests import test_lib - - -class Test_Parser_OFPStats(unittest.TestCase): - _ofp = {ofproto_v1_5_parser: ofproto_v1_5} - - def __init__(self, methodName): - print('init %s' % methodName) - super(Test_Parser_OFPStats, self).__init__(methodName) - - def setUp(self): - pass - - def tearDown(self): - pass - - def _test(self, name, ofpp, d): - stats = ofpp.OFPStats(**d) - b = bytearray() - stats.serialize(b, 0) - stats2 = stats.parser(six.binary_type(b), 0) - for k, v in d.items(): - ok_(k in stats) - ok_(k in stats2) - eq_(stats[k], v) - eq_(stats2[k], v) - for k, v in stats.iteritems(): - ok_(k in d) - eq_(d[k], v) - for k, v in stats2.iteritems(): - ok_(k in d) - eq_(d[k], v) - - -def _add_tests(): - import functools - import itertools - - class Field(object): - pass - - class Int1(Field): - @staticmethod - def generate(): - yield 0 - yield 0xff - - class Int2(Field): - @staticmethod - def generate(): - yield 0 - yield 0x1234 - yield 0xffff - - class Int3(Field): - @staticmethod - def generate(): - yield 0 - yield 0x123456 - yield 0xffffff - - class Int4(Field): - @staticmethod - def generate(): - yield 0 - yield 0x12345678 - yield 0xffffffff - - class Int4double(Field): - @staticmethod - def generate(): - # Note: If yield value as a tuple, flatten_one() will reduce it - # into a single value. So the followings avoid this problem by - # using a list value. - yield [0, 1] - yield [0x12345678, 0x23456789] - yield [0xffffffff, 0xfffffffe] - - class Int8(Field): - @staticmethod - def generate(): - yield 0 - yield 0x123456789abcdef0 - yield 0xffffffffffffffff - - class Mac(Field): - @staticmethod - def generate(): - yield '00:00:00:00:00:00' - yield 'f2:0b:a4:7d:f8:ea' - yield 'ff:ff:ff:ff:ff:ff' - - class IPv4(Field): - @staticmethod - def generate(): - yield '0.0.0.0' - yield '192.0.2.1' - yield '255.255.255.255' - - class IPv6(Field): - @staticmethod - def generate(): - yield '::' - yield 'fe80::f00b:a4ff:fed0:3f70' - yield 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' - - class B64(Field): - @staticmethod - def generate(): - yield 'aG9nZWhvZ2U=' - yield 'ZnVnYWZ1Z2E=' - - ofpps = [ofproto_v1_5_parser] - common = [ - ('duration', Int4double), - ('idle_time', Int4double), - ('flow_count', Int4), - ('packet_count', Int8), - ('byte_count', Int8), - ('field_100', B64), - ] - L = {} - L[ofproto_v1_5_parser] = common - - def flatten_one(l, i): - if isinstance(i, tuple): - return l + flatten(i) - else: - return l + [i] - flatten = lambda l: reduce(flatten_one, l, []) - - for ofpp in ofpps: - for n in range(1, 3): - for C in itertools.combinations(L[ofpp], n): - l = [1] - keys = [] - clss = [] - for (k, cls) in C: - l = itertools.product(l, cls.generate()) - keys.append(k) - clss.append(cls) - l = [flatten(x)[1:] for x in l] - for values in l: - d = dict(zip(keys, values)) - for n, uv in d.items(): - if isinstance(uv, list): - # XXX - # OFPStats returns value as tuple when field is - # 'duration' or 'idle_time'. Then convert list - # value into tuple here. - d[n] = tuple(uv) - mod = ofpp.__name__.split('.')[-1] - method_name = 'test_' + mod - for k in sorted(dict(d).keys()): - method_name += '_' + str(k) - method_name += '_' + str(d[k]) - method_name = method_name.replace(':', '_') - method_name = method_name.replace('.', '_') - method_name = method_name.replace('(', '_') - method_name = method_name.replace(')', '_') - method_name = method_name.replace(',', '_') - method_name = method_name.replace("'", '_') - method_name = method_name.replace(' ', '_') - - def _run(self, name, ofpp, d): - print('processing %s ...' % name) - if six.PY3: - self._test(self, name, ofpp, d) - else: - self._test(name, ofpp, d) - print('adding %s ...' % method_name) - f = functools.partial(_run, name=method_name, - ofpp=ofpp, d=d) - test_lib.add_method(Test_Parser_OFPStats, - method_name, f) - -_add_tests() diff --git a/ryu/tests/unit/ofproto/test_parser_v10.py b/ryu/tests/unit/ofproto/test_parser_v10.py deleted file mode 100644 index eefb65f2..00000000 --- a/ryu/tests/unit/ofproto/test_parser_v10.py +++ /dev/null @@ -1,5556 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import six -from nose.tools import * -from ryu.ofproto.ofproto_v1_0_parser import * -from ryu.ofproto.nx_actions import * -from ryu.ofproto import ofproto_v1_0_parser -from ryu.lib import addrconv - - -LOG = logging.getLogger('test_ofproto_v10') - - -class TestOFPPhyPort(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPPhyPort - """ - - # OFP_PHY_PORT_PACK_STR - # '!H6s16sIIIIII'... port_no, hw_addr, name, config, state - # curr, advertised, supported, peer - port_no = {'buf': b'\xe7\x6b', 'val': 59243} - hw_addr = '52:54:54:10:20:99' - name = b'name'.ljust(16) - config = {'buf': b'\x84\xb6\x8c\x53', 'val': 2226555987} - state = {'buf': b'\x64\x07\xfb\xc9', 'val': 1678244809} - curr = {'buf': b'\xa9\xe8\x0a\x2b', 'val': 2850556459} - advertised = {'buf': b'\x78\xb9\x7b\x72', 'val': 2025421682} - supported = {'buf': b'\x7e\x65\x68\xad', 'val': 2120575149} - peer = {'buf': b'\xa4\x5b\x8b\xed', 'val': 2757463021} - - buf = port_no['buf'] \ - + addrconv.mac.text_to_bin(hw_addr) \ - + name \ - + config['buf'] \ - + state['buf'] \ - + curr['buf'] \ - + advertised['buf'] \ - + supported['buf'] \ - + peer['buf'] - - c = OFPPhyPort(port_no['val'], - hw_addr, - name, - config['val'], - state['val'], - curr['val'], - advertised['val'], - supported['val'], - peer['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.port_no['val'], self.c.port_no) - eq_(self.hw_addr, self.c.hw_addr) - eq_(self.name, self.c.name) - eq_(self.config['val'], self.c.config) - eq_(self.state['val'], self.c.state) - eq_(self.curr['val'], self.c.curr) - eq_(self.advertised['val'], self.c.advertised) - eq_(self.supported['val'], self.c.supported) - eq_(self.peer['val'], self.c.peer) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(self.port_no['val'], res.port_no) - eq_(self.hw_addr, res.hw_addr) - eq_(self.name, res.name) - eq_(self.config['val'], res.config) - eq_(self.state['val'], res.state) - eq_(self.curr['val'], res.curr) - eq_(self.advertised['val'], res.advertised) - eq_(self.supported['val'], res.supported) - eq_(self.peer['val'], res.peer) - - -class TestOFPMatch(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPMatch - """ - - # OFP_MATCH_PACK_STR - # '!IH6s6sHBxHBB2xIIHH'...wildcards, in_port, dl_src, dl_dst, dl_vlan, - # dl_vlan_pcp, dl_type, nw_tos, nw_proto, - # nw_src, nw_dst, tp_src, tp_dst - wildcards = {'buf': b'\x00\x02\x10\x00', 'val': 135168} - in_port = {'buf': b'\x37\x8b', 'val': 14219} - dl_src = {'buf': b'\x52\x54\x54\x10\x20\x99', - 'human': '52:54:54:10:20:99'} - dl_dst = {'buf': b'\x61\x31\x50\x6d\xc9\xe5', - 'human': '61:31:50:6d:c9:e5'} - dl_vlan = {'buf': b'\xc1\xf9', 'val': 49657} - dl_vlan_pcp = {'buf': b'\x79', 'val': 121} - zfill0 = b'\x00' - dl_type = {'buf': b'\xa6\x9e', 'val': 42654} - nw_tos = {'buf': b'\xde', 'val': 222} - nw_proto = {'buf': b'\xe5', 'val': 229} - zfil11 = b'\x00' * 2 - nw_src = {'buf': b'\x1b\x6d\x8d\x4b', 'val': 460164427, - 'human': '27.109.141.75'} - nw_dst = {'buf': b'\xab\x25\xe1\x20', 'val': 2871386400, - 'human': '171.37.225.32'} - tp_src = {'buf': b'\xd5\xc3', 'val': 54723} - tp_dst = {'buf': b'\x78\xb9', 'val': 30905} - - buf = wildcards['buf'] \ - + in_port['buf'] \ - + dl_src['buf'] \ - + dl_dst['buf'] \ - + dl_vlan['buf'] \ - + dl_vlan_pcp['buf'] \ - + zfill0 \ - + dl_type['buf'] \ - + nw_tos['buf'] \ - + nw_proto['buf'] \ - + zfil11 \ - + nw_src['buf'] \ - + nw_dst['buf'] \ - + tp_src['buf'] \ - + tp_dst['buf'] - - def _get_obj(self, dl_src, dl_dst): - c = OFPMatch(self.wildcards['val'], - self.in_port['val'], - dl_src, - dl_dst, - self.dl_vlan['val'], - self.dl_vlan_pcp['val'], - self.dl_type['val'], - self.nw_tos['val'], - self.nw_proto['val'], - self.nw_src['val'], - self.nw_dst['val'], - self.tp_src['val'], - self.tp_dst['val']) - return c - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - c = self._get_obj(self.dl_src['buf'], self.dl_dst['buf']) - - eq_(self.wildcards['val'], c.wildcards) - eq_(self.in_port['val'], c.in_port) - eq_(self.dl_src['buf'], c.dl_src) - eq_(self.dl_dst['buf'], c.dl_dst) - eq_(self.dl_vlan['val'], c.dl_vlan) - eq_(self.dl_vlan_pcp['val'], c.dl_vlan_pcp) - eq_(self.dl_type['val'], c.dl_type) - eq_(self.nw_tos['val'], c.nw_tos) - eq_(self.nw_proto['val'], c.nw_proto) - eq_(self.nw_src['val'], c.nw_src) - eq_(self.nw_dst['val'], c.nw_dst) - eq_(self.tp_src['val'], c.tp_src) - eq_(self.tp_dst['val'], c.tp_dst) - - def test_init_zero(self): - c = self._get_obj(0, 0) - eq_(mac.DONTCARE, c.dl_src) - eq_(mac.DONTCARE, c.dl_dst) - - def test_parse(self): - c = self._get_obj(self.dl_src['buf'], self.dl_dst['buf']) - res = c.parse(self.buf, 0) - - eq_(self.wildcards['val'], res.wildcards) - eq_(self.in_port['val'], res.in_port) - eq_(self.dl_src['buf'], res.dl_src) - eq_(self.dl_dst['buf'], res.dl_dst) - eq_(self.dl_vlan['val'], res.dl_vlan) - eq_(self.dl_vlan_pcp['val'], res.dl_vlan_pcp) - eq_(self.dl_type['val'], res.dl_type) - eq_(self.nw_tos['val'], res.nw_tos) - eq_(self.nw_proto['val'], res.nw_proto) - eq_(self.nw_src['val'], res.nw_src) - eq_(self.nw_dst['val'], res.nw_dst) - eq_(self.tp_src['val'], res.tp_src) - eq_(self.tp_dst['val'], res.tp_dst) - - def test_serialize(self): - buf = bytearray() - c = self._get_obj(self.dl_src['buf'], self.dl_dst['buf']) - - c.serialize(buf, 0) - - fmt = ofproto.OFP_MATCH_PACK_STR - res = struct.unpack_from(fmt, six.binary_type(buf)) - - eq_(self.wildcards['val'], res[0]) - eq_(self.in_port['val'], res[1]) - eq_(self.dl_src['buf'], res[2]) - eq_(self.dl_dst['buf'], res[3]) - eq_(self.dl_vlan['val'], res[4]) - eq_(self.dl_vlan_pcp['val'], res[5]) - eq_(self.dl_type['val'], res[6]) - eq_(self.nw_tos['val'], res[7]) - eq_(self.nw_proto['val'], res[8]) - eq_(self.nw_src['val'], res[9]) - eq_(self.nw_dst['val'], res[10]) - eq_(self.tp_src['val'], res[11]) - eq_(self.tp_dst['val'], res[12]) - - def test_getitem(self): - c = self._get_obj(self.dl_src['buf'], self.dl_dst['buf']) - - eq_(self.wildcards['val'], c["wildcards"]) - eq_(self.in_port['val'], c["in_port"]) - eq_(self.dl_src['human'], c["dl_src"]) - eq_(self.dl_dst['human'], c["dl_dst"]) - eq_(self.dl_vlan['val'], c["dl_vlan"]) - eq_(self.dl_vlan_pcp['val'], c["dl_vlan_pcp"]) - eq_(self.dl_type['val'], c["dl_type"]) - eq_(self.nw_tos['val'], c["nw_tos"]) - eq_(self.nw_proto['val'], c["nw_proto"]) - eq_(self.nw_src['human'], c["nw_src"]) - eq_(self.nw_dst['human'], c["nw_dst"]) - eq_(self.tp_src['val'], c["tp_src"]) - eq_(self.tp_dst['val'], c["tp_dst"]) - - -class TestOFPActionHeader(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionHeader - """ - - # OFP_ACTION_HEADER_PACK_STR - # '!HH4x'...type, len, zfill - type = {'buf': b'\x00\x02', 'val': ofproto.OFPAT_SET_VLAN_PCP} - len = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_HEADER_SIZE} - zfill = b'\x00' * 4 - - buf = type['buf'] \ - + len['buf'] \ - + zfill - - c = OFPActionHeader(type['val'], len['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.type['val'], self.c.type) - eq_(self.len['val'], self.c.len) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_HEADER_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type['val'], res[0]) - eq_(self.len['val'], res[1]) - - -class TestOFPActionOutput(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionOutput - """ - - # OFP_ACTION_OUTPUT_PACK_STR - # '!HHHH'...type, len, port, max_len - type_ = {'buf': b'\x00\x00', 'val': ofproto.OFPAT_OUTPUT} - len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} - port = {'buf': b'\x19\xce', 'val': 6606} - max_len = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} - - buf = type_['buf'] \ - + len_['buf'] \ - + port['buf'] \ - + max_len['buf'] - - c = OFPActionOutput(port['val'], max_len['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.port['val'], self.c.port) - eq_(self.max_len['val'], self.c.max_len) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(self.port['val'], res.port) - eq_(self.max_len['val'], res.max_len) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x01', 'val': 1} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.port['buf'] \ - + self.max_len['buf'] - - self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x07', 'val': 7} - - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.port['buf'] \ - + self.max_len['buf'] - - self.c.parser(buf, 0) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_OUTPUT_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.port['val'], res[2]) - eq_(self.max_len['val'], res[3]) - - -class TestOFPActionVlanVid(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionVlanVid - """ - - # OFP_ACTION_VLAN_VID_PACK_STR - # '!HHH2x'...type, len, vlan_vid, zfill - type_ = {'buf': b'\x00\x01', 'val': ofproto.OFPAT_SET_VLAN_VID} - len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_VLAN_VID_SIZE} - vlan_vid = {'buf': b'\x3c\x0e', 'val': 15374} - zfill = b'\x00' * 2 - - buf = type_['buf'] \ - + len_['buf'] \ - + vlan_vid['buf'] \ - + zfill - - c = OFPActionVlanVid(vlan_vid['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.vlan_vid['val'], self.c.vlan_vid) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(self.vlan_vid['val'], res.vlan_vid) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x02', 'val': 2} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.vlan_vid['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x07', 'val': 7} - - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.vlan_vid['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_VLAN_VID_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vlan_vid['val'], res[2]) - - -class TestOFPActionVlanPcp(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionVlanPcp - """ - - # OFP_ACTION_VLAN_PCP_PACK_STR - # '!HHB3x'...type, len, vlan_pcp, zfill - type_ = {'buf': b'\x00\x02', 'val': ofproto.OFPAT_SET_VLAN_PCP} - len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_VLAN_PCP_SIZE} - vlan_pcp = {'buf': b'\x1c', 'val': 28} - zfill = b'\x00' * 3 - - buf = type_['buf'] \ - + len_['buf'] \ - + vlan_pcp['buf'] \ - + zfill - - c = OFPActionVlanPcp(vlan_pcp['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.vlan_pcp['val'], self.c.vlan_pcp) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - eq_(self.vlan_pcp['val'], res.vlan_pcp) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x01', 'val': 1} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.vlan_pcp['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x07', 'val': 7} - - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.vlan_pcp['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_VLAN_PCP_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vlan_pcp['val'], res[2]) - - -class TestOFPActionStripVlan(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionStripVlan - """ - - # OFP_ACTION_HEADER_PACK_STR - # '!HH4x'...type, len, zfill - type_ = {'buf': b'\x00\x03', 'val': ofproto.OFPAT_STRIP_VLAN} - len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_HEADER_SIZE} - zfill = b'\x00' * 4 - - buf = type_['buf'] \ - + len_['buf'] \ - + zfill - - c = OFPActionStripVlan() - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - ok_(self.c.parser(self.buf, 0)) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x01', 'val': 1} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x07', 'val': 7} - - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - -class TestOFPActionSetDlSrc(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionSetDlSrc - """ - - # OFP_ACTION_DL_ADDR_PACK_STR - # '!HH6s6x'...type, len, dl_addr, zfill - type_ = {'buf': b'\x00\x04', 'val': ofproto.OFPAT_SET_DL_SRC} - len_ = {'buf': b'\x00\x10', 'val': ofproto.OFP_ACTION_DL_ADDR_SIZE} - dl_addr = b'\x0e\xde\x27\xce\xc6\xcf' - zfill = b'\x00' * 6 - - buf = type_['buf'] \ - + len_['buf'] \ - + dl_addr \ - + zfill - - c = OFPActionSetDlSrc(dl_addr) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.dl_addr, self.c.dl_addr) - - def test_parser_type_src(self): - res = self.c.parser(self.buf, 0) - eq_(self.dl_addr, res.dl_addr) - - def test_parser_type_dst(self): - type_ = {'buf': b'\x00\x05', 'val': ofproto.OFPAT_SET_DL_DST} - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.dl_addr \ - + self.zfill - - res = self.c.parser(buf, 0) - - eq_(self.dl_addr, res.dl_addr) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x06', 'val': 6} - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.dl_addr \ - + self.zfill - - res = self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x07', 'val': 7} - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.dl_addr \ - + self.zfill - - res = self.c.parser(buf, 0) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_DL_ADDR_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.dl_addr, res[2]) - - -class TestOFPActionSetDlDst(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionSetDlDst - """ - - # OFP_ACTION_DL_ADDR_PACK_STR - # '!HH6s6x'...type, len, dl_addr, zfill - type_ = {'buf': b'\x00\x05', 'val': ofproto.OFPAT_SET_DL_DST} - len_ = {'buf': b'\x00\x10', 'val': ofproto.OFP_ACTION_DL_ADDR_SIZE} - dl_addr = b'\x37\x48\x38\x9a\xf4\x28' - zfill = b'\x00' * 6 - - buf = type_['buf'] \ - + len_['buf'] \ - + dl_addr \ - + zfill - - c = OFPActionSetDlDst(dl_addr) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.dl_addr, self.c.dl_addr) - - def test_parser_type_dst(self): - res = self.c.parser(self.buf, 0) - eq_(self.dl_addr, res.dl_addr) - - def test_parser_type_src(self): - type_ = {'buf': b'\x00\x04', 'val': ofproto.OFPAT_SET_DL_SRC} - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.dl_addr \ - + self.zfill - - res = self.c.parser(buf, 0) - - eq_(self.dl_addr, res.dl_addr) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x06', 'val': 6} - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.dl_addr \ - + self.zfill - - res = self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x07', 'val': 7} - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.dl_addr \ - + self.zfill - - res = self.c.parser(buf, 0) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_DL_ADDR_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.dl_addr, res[2]) - - -class TestOFPActionSetNwSrc(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionSetNwSrc - """ - - # OFP_ACTION_NW_ADDR_PACK_STR - # '!HHI'...type, len, nw_addr - type_ = {'buf': b'\x00\x06', 'val': ofproto.OFPAT_SET_NW_SRC} - len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_NW_ADDR_SIZE} - nw_addr = {'buf': b'\xc0\xa8\x7a\x0a', 'val': 3232266762} - - buf = type_['buf'] \ - + len_['buf'] \ - + nw_addr['buf'] - - c = OFPActionSetNwSrc(nw_addr['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.nw_addr['val'], self.c.nw_addr) - - def test_parser_src(self): - res = self.c.parser(self.buf, 0) - eq_(self.nw_addr['val'], res.nw_addr) - - def test_parser_dst(self): - type_ = {'buf': b'\x00\x07', 'val': ofproto.OFPAT_SET_NW_DST} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.nw_addr['buf'] - - res = self.c.parser(buf, 0) - eq_(self.nw_addr['val'], res.nw_addr) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x05', 'val': 5} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.nw_addr['buf'] - - self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x10', 'val': 16} - - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.nw_addr['buf'] - - self.c.parser(buf, 0) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_NW_ADDR_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.nw_addr['val'], res[2]) - - -class TestOFPActionSetNwDst(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionSetNwDst - """ - - # OFP_ACTION_NW_ADDR_PACK_STR - # '!HHI'...type, len, nw_addr - type_ = {'buf': b'\x00\x07', 'val': ofproto.OFPAT_SET_NW_DST} - len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_NW_ADDR_SIZE} - nw_addr = {'buf': b'\xc0\xa8\x7a\x0a', 'val': 3232266762} - - buf = type_['buf'] \ - + len_['buf'] \ - + nw_addr['buf'] - - c = OFPActionSetNwDst(nw_addr['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.nw_addr['val'], self.c.nw_addr) - - def test_parser_dst(self): - res = self.c.parser(self.buf, 0) - eq_(self.nw_addr['val'], res.nw_addr) - - def test_parser_src(self): - type_ = {'buf': b'\x00\x06', 'val': ofproto.OFPAT_SET_NW_SRC} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.nw_addr['buf'] - - res = self.c.parser(buf, 0) - eq_(self.nw_addr['val'], res.nw_addr) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x05', 'val': 5} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.nw_addr['buf'] - - self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x10', 'val': 16} - - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.nw_addr['buf'] - - self.c.parser(buf, 0) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_NW_ADDR_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.nw_addr['val'], res[2]) - - -class TestOFPActionSetNwTos(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionSetNwTos - """ - - # OFP_ACTION_NW_TOS_PACK_STR - # '!HHB3x'...type, len, tos, zfill - type_ = {'buf': b'\x00\x08', 'val': ofproto.OFPAT_SET_NW_TOS} - len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_NW_TOS_SIZE} - tos = {'buf': b'\xb6', 'val': 182} - zfill = b'\x00' * 3 - - buf = type_['buf'] \ - + len_['buf'] \ - + tos['buf'] \ - + zfill - - c = OFPActionSetNwTos(tos['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.tos['val'], self.c.tos) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - eq_(self.tos['val'], res.tos) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x05', 'val': 5} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.tos['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x07', 'val': 7} - - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.tos['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_NW_TOS_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.tos['val'], res[2]) - - -class TestOFPActionSetTpSrc(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionSetTpSrc - """ - - # OFP_ACTION_TP_PORT_PACK_STR - # '!HHH2x'...type, len, tp, zfill - type_ = {'buf': b'\x00\x09', 'val': ofproto.OFPAT_SET_TP_SRC} - len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_TP_PORT_SIZE} - tp = {'buf': b'\x07\xf1', 'val': 2033} - zfill = b'\x00' * 2 - - buf = type_['buf'] \ - + len_['buf'] \ - + tp['buf'] \ - + zfill - - c = OFPActionSetTpSrc(tp['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.tp['val'], self.c.tp) - - def test_parser_src(self): - res = self.c.parser(self.buf, 0) - eq_(self.tp['val'], res.tp) - - def test_parser_dst(self): - type_ = {'buf': b'\x00\x0a', 'val': ofproto.OFPAT_SET_TP_DST} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.tp['buf'] \ - + self.zfill - - res = self.c.parser(self.buf, 0) - eq_(self.tp['val'], res.tp) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x07', 'val': 7} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.tp['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x07', 'val': 7} - - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.tp['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_TP_PORT_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.tp['val'], res[2]) - - -class TestOFPActionSetTpDst(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionSetTpDst - """ - - # OFP_ACTION_TP_PORT_PACK_STR - # '!HHH2x'...type, len, tp, zfill - type_ = {'buf': b'\x00\x0a', 'val': ofproto.OFPAT_SET_TP_DST} - len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_TP_PORT_SIZE} - tp = {'buf': b'\x06\x6d', 'val': 1645} - zfill = b'\x00' * 2 - - buf = type_['buf'] \ - + len_['buf'] \ - + tp['buf'] \ - + zfill - - c = OFPActionSetTpDst(tp['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.tp['val'], self.c.tp) - - def test_parser_dst(self): - res = self.c.parser(self.buf, 0) - eq_(self.tp['val'], res.tp) - - def test_parser_src(self): - type_ = {'buf': b'\x00\x09', 'val': ofproto.OFPAT_SET_TP_SRC} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.tp['buf'] \ - + self.zfill - - res = self.c.parser(buf, 0) - eq_(self.tp['val'], res.tp) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x10', 'val': 16} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.tp['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x07', 'val': 7} - - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.tp['buf'] \ - + self.zfill - - self.c.parser(buf, 0) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_TP_PORT_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.tp['val'], res[2]) - - -class TestOFPActionEnqueue(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPActionEnqueue - """ - - # OFP_ACTION_ENQUEUE_PACK_STR - # '!HHH6xI'...type_, len_, port, zfill, queue_id - type_ = {'buf': b'\x00\x0b', 'val': ofproto.OFPAT_ENQUEUE} - len_ = {'buf': b'\x00\x10', 'val': ofproto.OFP_ACTION_ENQUEUE_SIZE} - port = {'buf': b'\x04\x55', 'val': 1109} - zfill = b'\x00' * 6 - queue_id = {'buf': b'\x0a\x5b\x03\x5e', 'val': 173736798} - - buf = type_['buf'] \ - + len_['buf'] \ - + port['buf'] \ - + zfill \ - + queue_id['buf'] - - c = OFPActionEnqueue(port['val'], queue_id['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.port['val'], self.c.port) - eq_(self.queue_id['val'], self.c.queue_id) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(self.port['val'], res.port) - eq_(self.queue_id['val'], res.queue_id) - - @raises(AssertionError) - def test_parser_check_type(self): - type_ = {'buf': b'\x00\x0a', 'val': 10} - - buf = type_['buf'] \ - + self.len_['buf'] \ - + self.port['buf'] \ - + self.zfill \ - + self.queue_id['buf'] - - self.c.parser(buf, 0) - - @raises(AssertionError) - def test_parser_check_len(self): - len_ = {'buf': b'\x00\x05', 'val': 5} - - buf = self.type_['buf'] \ - + len_['buf'] \ - + self.port['buf'] \ - + self.zfill \ - + self.queue_id['buf'] - - self.c.parser(buf, 0) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_ENQUEUE_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.port['val'], res[2]) - eq_(self.queue_id['val'], res[3]) - - -class TestNXActionResubmit(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionResubmit - """ - - # NX_ACTION_RESUBMIT_PACK_STR - # '!HHIHHB3x'...type, len, vendor, subtype, in_port, table, zfill - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_RESUBMIT_SIZE} - vendor = {'buf': b'\x00\x00\x23\x20', 'val': 8992} - subtype = {'buf': b'\x00\x01', 'val': 1} - in_port = {'buf': b'\x0a\x4c', 'val': 2636} - table = {'buf': b'\x52', 'val': 82} - zfill = b'\x00' * 3 - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + in_port['buf'] \ - + table['buf'] \ - + zfill - - c = NXActionResubmit(in_port['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - eq_(self.in_port['val'], self.c.in_port) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.in_port['val'], res.in_port) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.NX_ACTION_RESUBMIT_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - eq_(self.in_port['val'], res[4]) - - -class TestNXActionResubmitTable(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionResubmitTable - """ - - # NX_ACTION_RESUBMIT_PACK_STR - # '!HHIHHB3x'...type, len, vendor, subtype, in_port, table, zfill - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_RESUBMIT_SIZE} - vendor = {'buf': b'\x00\x00\x23\x20', 'val': 8992} - subtype = {'buf': b'\x00\x0e', 'val': 14} - in_port = {'buf': b'\x0a\x4c', 'val': 2636} - table_id = {'buf': b'\x52', 'val': 82} - zfill = b'\x00' * 3 - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + in_port['buf'] \ - + table_id['buf'] \ - + zfill - - c = NXActionResubmitTable(in_port['val'], table_id['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - eq_(self.in_port['val'], self.c.in_port) - eq_(self.table_id['val'], self.c.table_id) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.in_port['val'], res.in_port) - eq_(self.table_id['val'], res.table_id) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.NX_ACTION_RESUBMIT_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - eq_(self.in_port['val'], res[4]) - eq_(self.table_id['val'], res[5]) - - -class TestNXActionSetTunnel(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionSetTunnel - """ - - # NX_ACTION_SET_TUNNEL_PACK_STR - # '!HHIH2xI'...type, len, vendor, subtype, zfill, tun_id - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_SET_TUNNEL_SIZE} - vendor = {'buf': b'\x00\x00\x23\x20', 'val': 8992} - subtype = {'buf': b'\x00\x02', 'val': 2} - zfill = b'\x00' * 2 - tun_id = {'buf': b'\x01\x6f\x01\xd0', 'val': 24052176} - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + zfill \ - + tun_id['buf'] - - c = NXActionSetTunnel(tun_id['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - eq_(self.tun_id['val'], self.c.tun_id) - - def test_parse(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.tun_id['val'], res.tun_id) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.NX_ACTION_SET_TUNNEL_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - eq_(self.tun_id['val'], res[4]) - - -class TestNXActionSetQueue(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionSetQueue - """ - - # NX_ACTION_SET_QUEUE_PACK_STR - # '!HHIH2xI'...type, len, vendor, subtype, zfill, queue_id - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_SET_TUNNEL_SIZE} - vendor = {'buf': b'\x00\x00\x23\x20', - 'val': ofproto_common.NX_EXPERIMENTER_ID} - subtype = {'buf': b'\x00\x04', 'val': ofproto.NXAST_SET_QUEUE} - zfill = b'\x00' * 2 - queue_id = {'buf': b'\xde\xbe\xc5\x18', 'val': 3737044248} - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + zfill \ - + queue_id['buf'] - - c = NXActionSetQueue(queue_id['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - eq_(self.queue_id['val'], self.c.queue_id) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.queue_id['val'], res.queue_id) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.NX_ACTION_SET_QUEUE_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - eq_(self.queue_id['val'], res[4]) - - -class TestNXActionPopQueue(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionPopQueue - """ - - # NX_ACTION_POP_QUEUE_PACK_STR - # '!HHIH6x'...type, len, vendor, subtype, zfill - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_SET_TUNNEL_SIZE} - vendor = {'buf': b'\x00\x00\x23\x20', - 'val': ofproto_common.NX_EXPERIMENTER_ID} - subtype = {'buf': b'\x00\x05', 'val': ofproto.NXAST_POP_QUEUE} - zfill = b'\x00' * 6 - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + zfill - - c = NXActionPopQueue() - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.subtype['val'], res.subtype) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.NX_ACTION_POP_QUEUE_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - - -class TestNXActionRegMove(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionRegMove - """ - - # NX_ACTION_REG_MOVE_PACK_STR - # '!HHIHHHHII'...type_, len_, vendor, subtype, n_bits, - # src_ofs, dst_ofs, src, dst - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x18', 'val': ofproto.NX_ACTION_REG_MOVE_SIZE} - vendor = {'buf': b'\x00\x00\x23\x20', - 'val': ofproto_common.NX_EXPERIMENTER_ID} - subtype = {'buf': b'\x00\x06', 'val': ofproto.NXAST_REG_MOVE} - n_bits = {'buf': b'\x3d\x98', 'val': 15768} - src_ofs = {'buf': b'\xf3\xa3', 'val': 62371} - dst_ofs = {'buf': b'\xdc\x67', 'val': 56423} - src_field = {'buf': b'\x00\x01\x00\x04', 'val': "reg0", "val2": 65540} - dst_field = {'buf': b'\x00\x01\x02\x04', 'val': "reg1", "val2": 66052} - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + n_bits['buf'] \ - + src_ofs['buf'] \ - + dst_ofs['buf'] \ - + src_field['buf'] \ - + dst_field['buf'] - - c = NXActionRegMove(src_field['val'], - dst_field['val'], - n_bits['val'], - src_ofs['val'], - dst_ofs['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - eq_(self.src_field['val'], self.c.src_field) - eq_(self.dst_field['val'], self.c.dst_field) - eq_(self.n_bits['val'], self.c.n_bits) - eq_(self.src_field['val'], self.c.src_field) - eq_(self.dst_field['val'], self.c.dst_field) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.subtype['val'], res.subtype) - eq_(self.src_ofs['val'], res.src_ofs) - eq_(self.dst_ofs['val'], res.dst_ofs) - eq_(self.n_bits['val'], res.n_bits) - eq_(self.src_field['val'], res.src_field) - eq_(self.dst_field['val'], res.dst_field) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.NX_ACTION_REG_MOVE_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - eq_(self.n_bits['val'], res[4]) - eq_(self.src_ofs['val'], res[5]) - eq_(self.dst_ofs['val'], res[6]) - eq_(self.src_field['val2'], res[7]) - eq_(self.dst_field['val2'], res[8]) - - -class TestNXActionRegLoad(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionRegLoad - """ - - # NX_ACTION_REG_LOAD_PACK_STR - # '!HHIHHIQ'...type_, len_, vendor, subtype, - # ofs_nbits, dst, value - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x18', 'val': ofproto.NX_ACTION_REG_MOVE_SIZE} - vendor = {'buf': b'\x00\x00\x23\x20', - 'val': ofproto_common.NX_EXPERIMENTER_ID} - subtype = {'buf': b'\x00\x07', 'val': ofproto.NXAST_REG_LOAD} - ofs_nbits = {'buf': b'\x3d\x98', 'val': 15768} - dst = {'buf': b'\x00\x01\x00\x04', 'val': "reg0", "val2": 65540} - value = {'buf': b'\x33\x51\xcd\x43\x25\x28\x18\x99', - 'val': 3697962457317775513} - start = 246 - end = 270 - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + ofs_nbits['buf'] \ - + dst['buf'] \ - + value['buf'] - - c = NXActionRegLoad(ofs_nbits['val'], - dst['val'], - value['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - eq_(self.ofs_nbits['val'], self.c.ofs_nbits) - eq_(self.dst['val'], self.c.dst) - eq_(self.value['val'], self.c.value) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.ofs_nbits['val'], self.c.ofs_nbits) - eq_(self.dst['val'], res.dst) - eq_(self.value['val'], res.value) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.NX_ACTION_REG_LOAD_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - eq_(self.ofs_nbits['val'], res[4]) - eq_(self.dst['val2'], res[5]) - eq_(self.value['val'], res[6]) - - -class TestNXActionSetTunnel64(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionSetTunnel64 - """ - - # NX_ACTION_SET_TUNNEL64_PACK_STR - # '!HHIH6xQ'...type, len, vendor, subtype, zfill, tun_id - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x18', 'val': ofproto.NX_ACTION_SET_TUNNEL64_SIZE} - vendor = {'buf': b'\x00\x00\x23\x20', - 'val': ofproto_common.NX_EXPERIMENTER_ID} - subtype = {'buf': b'\x00\x09', 'val': ofproto.NXAST_SET_TUNNEL64} - zfill = b'\x00' * 6 - tun_id = {'buf': b'\x6e\x01\xa6\xea\x7e\x36\x1d\xd9', - 'val': 7926800345218817497} - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + zfill \ - + tun_id['buf'] - - c = NXActionSetTunnel64(tun_id['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - eq_(self.tun_id['val'], self.c.tun_id) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.subtype['val'], res.subtype) - eq_(self.tun_id['val'], res.tun_id) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.NX_ACTION_SET_TUNNEL64_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - eq_(self.tun_id['val'], res[4]) - - -class TestNXActionMultipath(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionMultipath - """ - - # NX_ACTION_MULTIPATH_PACK_STR - # '!HHIHHH2xHHI2xHI'...type, len, vendor, subtype, fields, basis, zfill - # algorithm, max_link, arg, zfill, ofs_nbits, dst - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x20', 'val': ofproto.NX_ACTION_MULTIPATH_SIZE} - vendor = {'buf': b'\x00\x00\x23\x20', - 'val': ofproto_common.NX_EXPERIMENTER_ID} - subtype = {'buf': b'\x00\x0a', 'val': ofproto.NXAST_MULTIPATH} - fields = {'buf': b'\x6d\xf5', 'val': 28149} - basis = {'buf': b'\x7c\x0a', 'val': 31754} - zfill0 = b'\x00' * 2 - algorithm = {'buf': b'\x82\x1d', 'val': 33309} - max_link = {'buf': b'\x06\x2b', 'val': 1579} - arg = {'buf': b'\x18\x79\x41\xc8', 'val': 410599880} - zfill1 = b'\x00' * 2 - ofs_nbits = {'buf': b'\xa9\x9a', 'val': 43418} - dst = {'buf': b'\x00\x01\x00\x04', 'val': "reg0", 'val2': 65540} - start = 678 - end = 704 - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + fields['buf'] \ - + basis['buf'] \ - + zfill0 \ - + algorithm['buf'] \ - + max_link['buf'] \ - + arg['buf'] \ - + zfill1 \ - + ofs_nbits['buf'] \ - + dst['buf'] - - c = NXActionMultipath(fields['val'], - basis['val'], - algorithm['val'], - max_link['val'], - arg['val'], - ofs_nbits['val'], - dst['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - eq_(self.fields['val'], self.c.fields) - eq_(self.basis['val'], self.c.basis) - eq_(self.algorithm['val'], self.c.algorithm) - eq_(self.max_link['val'], self.c.max_link) - eq_(self.arg['val'], self.c.arg) - eq_(self.ofs_nbits['val'], self.c.ofs_nbits) - eq_(self.dst['val'], self.c.dst) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.subtype['val'], res.subtype) - eq_(self.fields['val'], res.fields) - eq_(self.basis['val'], res.basis) - eq_(self.algorithm['val'], res.algorithm) - eq_(self.max_link['val'], res.max_link) - eq_(self.arg['val'], res.arg) - eq_(self.ofs_nbits['val'], res.ofs_nbits) - eq_(self.dst['val'], res.dst) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.NX_ACTION_MULTIPATH_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - eq_(self.fields['val'], res[4]) - eq_(self.basis['val'], res[5]) - eq_(self.algorithm['val'], res[6]) - eq_(self.max_link['val'], res[7]) - eq_(self.arg['val'], res[8]) - eq_(self.ofs_nbits['val'], res[9]) - eq_(self.dst['val2'], res[10]) - - -class TestNXActionBundle(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionBundle - """ - - # NX_ACTION_BUNDLE_PACK_STR - # '!HHIHHHHIHHI4x'...type, len, vendor, subtype, algorithm, - # fields, basis, slave_type, n_slaves, - # ofs_nbits, dst, zfill - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x28', 'val': (ofproto.NX_ACTION_BUNDLE_SIZE + 8)} - vendor = {'buf': b'\x00\x00\x23\x20', - 'val': ofproto_common.NX_EXPERIMENTER_ID} - subtype = {'buf': b'\x00\x0c', 'val': ofproto.NXAST_BUNDLE} - algorithm = {'buf': b'\x51\xa7', 'val': 20903} - fields = {'buf': b'\xf8\xef', 'val': 63727} - basis = {'buf': b'\xfd\x6f', 'val': 64879} - slave_type = {'buf': b'\x7c\x51\x0f\xe0', 'val': 2085687264} - n_slaves = {'buf': b'\x00\x02', 'val': 2} - ofs_nbits = {'buf': b'\x00\x00', 'val': 0} - dst = {'buf': b'\x00\x00\x00\x00', 'val': 0} - zfill = b'\x00' * 4 - - slaves_buf = (b'\x00\x01', b'\x00\x02') - slaves_val = (1, 2) - - _len = len_['val'] + len(slaves_val) * 2 - _len += (_len % 8) - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + algorithm['buf'] \ - + fields['buf'] \ - + basis['buf'] \ - + slave_type['buf'] \ - + n_slaves['buf'] \ - + ofs_nbits['buf'] \ - + dst['buf'] \ - + zfill \ - + slaves_buf[0] \ - + slaves_buf[1] - - c = NXActionBundle(algorithm['val'], - fields['val'], - basis['val'], - slave_type['val'], - n_slaves['val'], - ofs_nbits['val'], - dst['val'], - slaves_val) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - eq_(self.algorithm['val'], self.c.algorithm) - eq_(self.fields['val'], self.c.fields) - eq_(self.basis['val'], self.c.basis) - eq_(self.slave_type['val'], self.c.slave_type) - eq_(self.n_slaves['val'], self.c.n_slaves) - eq_(self.ofs_nbits['val'], self.c.ofs_nbits) - eq_(self.dst['val'], self.c.dst) - - # slaves - slaves = self.c.slaves - eq_(self.slaves_val[0], slaves[0]) - eq_(self.slaves_val[1], slaves[1]) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.subtype['val'], res.subtype) - eq_(self.algorithm['val'], res.algorithm) - eq_(self.fields['val'], res.fields) - eq_(self.basis['val'], res.basis) - eq_(self.slave_type['val'], res.slave_type) - eq_(self.n_slaves['val'], res.n_slaves) - eq_(self.ofs_nbits['val'], res.ofs_nbits) - eq_(self.dst['val'], res.dst) - - # slaves - slaves = res.slaves - eq_(self.slaves_val[0], slaves[0]) - eq_(self.slaves_val[1], slaves[1]) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = '!' \ - + ofproto.NX_ACTION_BUNDLE_PACK_STR.replace('!', '') \ - + 'HH4x' - - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - eq_(self.algorithm['val'], res[4]) - eq_(self.fields['val'], res[5]) - eq_(self.basis['val'], res[6]) - eq_(self.slave_type['val'], res[7]) - eq_(self.n_slaves['val'], res[8]) - eq_(self.ofs_nbits['val'], res[9]) - eq_(self.dst['val'], res[10]) - - -class TestNXActionBundleLoad(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionBundleLoad - """ - - # NX_ACTION_BUNDLE_PACK_STR - # '!HHIHHHHIHHI4x'...type, len, vendor, subtype, algorithm, - # fields, basis, slave_type, n_slaves, - # ofs_nbits, dst, zfill - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x28', 'val': (ofproto.NX_ACTION_BUNDLE_SIZE + 8)} - vendor = {'buf': b'\x00\x00\x23\x20', - 'val': ofproto_common.NX_EXPERIMENTER_ID} - subtype = {'buf': b'\x00\x0d', 'val': ofproto.NXAST_BUNDLE_LOAD} - algorithm = {'buf': b'\x83\x15', 'val': 33557} - fields = {'buf': b'\xc2\x7a', 'val': 49786} - basis = {'buf': b'\x86\x18', 'val': 34328} - slave_type = {'buf': b'\x18\x42\x0b\x55', 'val': 406981461} - n_slaves = {'buf': b'\x00\x02', 'val': 2} - ofs_nbits = {'buf': b'\xd2\x9d', 'val': 53917} - dst = {'buf': b'\x00\x01\x00\x04', 'val': "reg0", 'val2': 65540} - zfill = b'\x00' * 4 - - slaves_buf = (b'\x00\x01', b'\x00\x02') - slaves_val = (1, 2) - - _len = len_['val'] + len(slaves_val) * 2 - _len += (_len % 8) - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + algorithm['buf'] \ - + fields['buf'] \ - + basis['buf'] \ - + slave_type['buf'] \ - + n_slaves['buf'] \ - + ofs_nbits['buf'] \ - + dst['buf'] \ - + zfill \ - + slaves_buf[0] \ - + slaves_buf[1] - - c = NXActionBundleLoad(algorithm['val'], - fields['val'], - basis['val'], - slave_type['val'], - n_slaves['val'], - ofs_nbits['val'], - dst['val'], - slaves_val) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - eq_(self.algorithm['val'], self.c.algorithm) - eq_(self.fields['val'], self.c.fields) - eq_(self.basis['val'], self.c.basis) - eq_(self.slave_type['val'], self.c.slave_type) - eq_(self.n_slaves['val'], self.c.n_slaves) - eq_(self.ofs_nbits['val'], self.c.ofs_nbits) - eq_(self.dst['val'], self.c.dst) - - # slaves - slaves = self.c.slaves - eq_(self.slaves_val[0], slaves[0]) - eq_(self.slaves_val[1], slaves[1]) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.subtype['val'], res.subtype) - eq_(self.algorithm['val'], res.algorithm) - eq_(self.fields['val'], res.fields) - eq_(self.basis['val'], res.basis) - eq_(self.slave_type['val'], res.slave_type) - eq_(self.n_slaves['val'], res.n_slaves) - eq_(self.ofs_nbits['val'], res.ofs_nbits) - eq_(self.dst['val'], res.dst) - - # slaves - slaves = res.slaves - eq_(self.slaves_val[0], slaves[0]) - eq_(self.slaves_val[1], slaves[1]) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = '!' \ - + ofproto.NX_ACTION_BUNDLE_PACK_STR.replace('!', '') \ - + 'HH4x' - - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - eq_(self.algorithm['val'], res[4]) - eq_(self.fields['val'], res[5]) - eq_(self.basis['val'], res[6]) - eq_(self.slave_type['val'], res[7]) - eq_(self.n_slaves['val'], res[8]) - eq_(self.ofs_nbits['val'], res[9]) - eq_(self.dst['val2'], res[10]) - - -class TestNXActionOutputReg(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionOutputReg - """ - - # NX_ACTION_OUTPUT_REG_PACK_STR - # '!HHIHHIH6x'...type, len, vendor, subtype, ofs_nbits, - # src, max_len, zfill - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x18', 'val': ofproto.NX_ACTION_OUTPUT_REG_SIZE} - vendor = {'buf': b'\x00\x00\x23\x20', - 'val': ofproto_common.NX_EXPERIMENTER_ID} - subtype = {'buf': b'\x00\x0f', 'val': ofproto.NXAST_OUTPUT_REG} - ofs_nbits = {'buf': b'\xfe\x78', 'val': 65144} - src = {'buf': b'\x00\x01\x00\x04', 'val': "reg0", 'val2': 65540} - max_len = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} - zfill = b'\x00' * 6 - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + ofs_nbits['buf'] \ - + src['buf'] \ - + max_len['buf'] \ - + zfill - - c = NXActionOutputReg(ofs_nbits['val'], - src['val'], - max_len['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - eq_(self.ofs_nbits['val'], self.c.ofs_nbits) - eq_(self.src['val'], self.c.src) - eq_(self.max_len['val'], self.c.max_len) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.subtype['val'], res.subtype) - eq_(self.ofs_nbits['val'], self.c.ofs_nbits) - eq_(self.src['val'], res.src) - eq_(self.max_len['val'], res.max_len) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.NX_ACTION_OUTPUT_REG_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - eq_(self.ofs_nbits['val'], res[4]) - eq_(self.src['val2'], res[5]) - eq_(self.max_len['val'], res[6]) - - -class TestNXActionExit(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXActionExit - """ - - # NX_ACTION_HEADER_PACK_STR - # '!HHIH'...type, len, vendor, subtype - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} - len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_HEADER_SIZE} - vendor = {'buf': b'\x00\x00\x23\x20', - 'val': ofproto_common.NX_EXPERIMENTER_ID} - subtype = {'buf': b'\x00\x11', 'val': ofproto.NXAST_EXIT} - zfill = b'\x00' * 6 - - buf = type_['buf'] \ - + len_['buf'] \ - + vendor['buf'] \ - + subtype['buf'] \ - + zfill - - c = NXActionExit() - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.subtype['val'], self.c.subtype) - - def test_parser(self): - res = OFPActionVendor.parser(self.buf, 0) - eq_(self.type_['val'], res.type) - eq_(self.len_['val'], res.len) - eq_(self.subtype['val'], res.subtype) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - fmt = ofproto.NX_ACTION_HEADER_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(self.type_['val'], res[0]) - eq_(self.len_['val'], res[1]) - eq_(self.vendor['val'], res[2]) - eq_(self.subtype['val'], res[3]) - - -class TestOFPDescStats(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPDescStats - """ - - # OFP_DESC_STATS_PACK_STR - # '!256s256s256s32s256s'...mfr_desc, hw_desc, sw_desc, serial_num, dp_desc - mfr_desc = b'mfr_desc'.ljust(256) - hw_desc = b'hw_desc'.ljust(256) - sw_desc = b'sw_desc'.ljust(256) - serial_num = b'serial_num'.ljust(32) - dp_desc = b'dp_desc'.ljust(256) - - buf = mfr_desc \ - + hw_desc \ - + sw_desc \ - + serial_num \ - + dp_desc - - c = OFPDescStats(mfr_desc, hw_desc, sw_desc, serial_num, dp_desc) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.mfr_desc, self.c.mfr_desc) - eq_(self.hw_desc, self.c.hw_desc) - eq_(self.sw_desc, self.c.sw_desc) - eq_(self.serial_num, self.c.serial_num) - eq_(self.dp_desc, self.c.dp_desc) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(self.mfr_desc, self.mfr_desc) - eq_(self.hw_desc, self.hw_desc) - eq_(self.sw_desc, self.sw_desc) - eq_(self.serial_num, self.serial_num) - eq_(self.dp_desc, self.dp_desc) - - -class TestOFPFlowStats(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPFlowStats - """ - - # OFP_FLOW_STATS_0_PACK_STR - # '!HBx'...length, table_id, zfill - length = {'buf': b'\x00\x58', 'val': 88} - length_append_action = {'buf': b'\x00\x60', 'val': 96} - table_id = {'buf': b'\x51', 'val': 81} - zfill_0 = b'\x00' - - # OFP_MATCH_PACK_STR - # '!IH6s6sHBxHBB2xIIHH'... - match = b'\x97\x7c\xa6\x1e' \ - + b'\x5e\xa0' \ - + b'\x7a\x3e\xed\x30\x4a\x90' \ - + b'\x96\x8e\x67\xbe\x2f\xe2' \ - + b'\xb1\x81' \ - + b'\xbe' \ - + b'\x00' \ - + b'\x01\xab' \ - + b'\x42' \ - + b'\xfe' \ - + b'\x00\x00' \ - + b'\xa4\x5d\x5c\x42' \ - + b'\xa2\x5c\x2e\x05' \ - + b'\x5a\x94' \ - + b'\x64\xd4' - - # OFP_FLOW_STATS_1_PACK_STR - # '!IIHHH6xQQQ'...duration_sec, duration_nsec, priority, - # idle_timeout, hard_timeout, zfill, - # cookie, packet_count, byte_count - duration_sec = {'buf': b'\x94\x19\xb3\xd2', 'val': 2484712402} - duration_nsec = {'buf': b'\xee\x66\xcf\x7c', 'val': 3999715196} - priority = {'buf': b'\xe1\xc0', 'val': 57792} - idle_timeout = {'buf': b'\x8e\x10', 'val': 36368} - hard_timeout = {'buf': b'\xd4\x99', 'val': 54425} - zfill_1 = b'\x00\x00\x00\x00\x00\x00' - cookie = {'buf': b'\x0b\x01\xe8\xe5\xf0\x84\x8a\xe0', - 'val': 793171083674290912} - packet_count = {'buf': b'\x47\x5c\xc6\x05\x28\xff\x7c\xdb', - 'val': 5142202600015232219} - byte_count = {'buf': b'\x24\xe9\x4b\xee\xcb\x57\xd9\xc3', - 'val': 2659740543924820419} - - # _PACK_STR...type_, len_ [others...] - type = {'buf': b'\x00\x00', 'val': ofproto.OFPAT_OUTPUT} - len = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} - port = {'buf': b'\x59\x2a', 'val': 22826} - max_len = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} - action = (type, len, port, max_len) - - ACTION_TYPE = 0 - ACTION_LEN = 1 - ACTION_PORT = 2 - ACTION_MAX_LEN = 3 - - c = OFPFlowStats() - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def _parser(self, action=None): - buf = self.table_id['buf'] \ - + self.zfill_0 \ - + self.match \ - + self.duration_sec['buf'] \ - + self.duration_nsec['buf'] \ - + self.priority['buf'] \ - + self.idle_timeout['buf'] \ - + self.hard_timeout['buf'] \ - + self.zfill_1 \ - + self.cookie['buf'] \ - + self.packet_count['buf'] \ - + self.byte_count['buf'] - - if not action: - buf = self.length['buf'] + buf - else: - buf = self.length_append_action['buf'] + buf - - for a in self.action: - buf = buf + a['buf'] - - return self.c.parser(buf, 0) - - def test_parser(self): - res = self._parser() - - eq_(self.length['val'], res.length) - eq_(self.table_id['val'], res.table_id) - eq_(self.duration_sec['val'], res.duration_sec) - eq_(self.duration_nsec['val'], res.duration_nsec) - eq_(self.priority['val'], res.priority) - eq_(self.idle_timeout['val'], res.idle_timeout) - eq_(self.hard_timeout['val'], res.hard_timeout) - eq_(self.cookie['val'], res.cookie) - eq_(self.packet_count['val'], res.packet_count) - eq_(self.byte_count['val'], res.byte_count) - - def test_parser_append_actions(self): - res = self._parser(True).actions[0] - - eq_(self.action[self.ACTION_TYPE]['val'], res.type) - eq_(self.action[self.ACTION_LEN]['val'], res.len) - eq_(self.action[self.ACTION_PORT]['val'], res.port) - eq_(self.action[self.ACTION_MAX_LEN]['val'], res.max_len) - - -class TestOFPAggregateStats(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPAggregateStats - """ - - # OFP_AGGREGATE_STATS_REPLY_PACK_STR - # '!QQI4x'...packet_count, byte_count, flow_count, zfill - packet_count = {'buf': b'\x43\x95\x1b\xfb\x0f\xf6\xa7\xdd', - 'val': 4869829337189623773} - byte_count = {'buf': b'\x36\xda\x2d\x80\x2a\x95\x35\xdd', - 'val': 3952521651464517085} - flow_count = {'buf': b'\xc3\x0d\xc3\xed', 'val': 3272459245} - zfill = b'\x00' * 4 - - buf = packet_count['buf'] \ - + byte_count['buf'] \ - + flow_count['buf'] \ - + zfill - - c = OFPAggregateStats(packet_count['val'], - byte_count['val'], - flow_count['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.packet_count['val'], self.c.packet_count) - eq_(self.byte_count['val'], self.c.byte_count) - eq_(self.flow_count['val'], self.c.flow_count) - - def test_parser(self): - - res = self.c.parser(self.buf, 0) - - eq_(self.packet_count['val'], res.packet_count) - eq_(self.byte_count['val'], res.byte_count) - eq_(self.flow_count['val'], res.flow_count) - - -class TestOFPTableStats(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPTableStats - """ - - # OFP_TABLE_STATS_PACK_STR - # '!B3x32sIIIQQ'...table_id, zfill, name, wildcards, max_entries, - # active_count, lookup_count, matched_count - table_id = {'buf': b'\x5b', 'val': 91} - zfill = b'\x00' * 3 - name = b'name'.ljust(32) - wildcards = {'buf': b'\xc5\xaf\x6e\x12', 'val': 3316608530} - max_entries = {'buf': b'\x95\x6c\x78\x4d', 'val': 2506913869} - active_count = {'buf': b'\x78\xac\xa8\x1e', 'val': 2024581150} - lookup_count = {'buf': b'\x40\x1d\x9c\x39\x19\xec\xd4\x1c', - 'val': 4620020561814017052} - matched_count = {'buf': b'\x27\x35\x02\xb6\xc5\x5e\x17\x65', - 'val': 2825167325263435621} - - buf = table_id['buf'] \ - + zfill \ - + name \ - + wildcards['buf'] \ - + max_entries['buf'] \ - + active_count['buf'] \ - + lookup_count['buf'] \ - + matched_count['buf'] - - c = OFPTableStats(table_id['val'], - name, - wildcards['val'], - max_entries['val'], - active_count['val'], - lookup_count['val'], - matched_count['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.table_id['val'], self.c.table_id) - eq_(self.name, self.c.name) - eq_(self.wildcards['val'], self.c.wildcards) - eq_(self.max_entries['val'], self.c.max_entries) - eq_(self.active_count['val'], self.c.active_count) - eq_(self.lookup_count['val'], self.c.lookup_count) - eq_(self.matched_count['val'], self.c.matched_count) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(self.table_id['val'], res.table_id) - eq_(self.name, res.name) - eq_(self.wildcards['val'], res.wildcards) - eq_(self.max_entries['val'], res.max_entries) - eq_(self.active_count['val'], res.active_count) - eq_(self.lookup_count['val'], res.lookup_count) - eq_(self.matched_count['val'], res.matched_count) - - -class TestOFPPortStats(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPPortStats - """ - - # OFP_PORT_STATS_PACK_STR - # '!H6xQQQQQQQQQQQQ'... port_no, zfill, rx_packets, tx_packets, - # rx_bytes, tx_bytes, rx_dropped, tx_dropped, - # rx_errors, tx_errors, rx_frame_err, - # rx_over_err, rx_crc_err, collisions - port_no = {'buf': b'\xe7\x6b', 'val': 59243} - zfill = b'\x00' * 6 - rx_packets = {'buf': b'\x53\x44\x36\x61\xc4\x86\xc0\x37', - 'val': 5999980397101236279} - tx_packets = {'buf': b'\x27\xa4\x41\xd7\xd4\x53\x9e\x42', - 'val': 2856480458895760962} - rx_bytes = {'buf': b'\x55\xa1\x38\x60\x43\x97\x0d\x89', - 'val': 6170274950576278921} - tx_bytes = {'buf': b'\x77\xe1\xd5\x63\x18\xae\x63\xaa', - 'val': 8638420181865882538} - rx_dropped = {'buf': b'\x60\xe6\x20\x01\x24\xda\x4e\x5a', - 'val': 6982303461569875546} - tx_dropped = {'buf': b'\x09\x2d\x5d\x71\x71\xb6\x8e\xc7', - 'val': 661287462113808071} - rx_errors = {'buf': b'\x2f\x7e\x35\xb3\x66\x3c\x19\x0d', - 'val': 3422231811478788365} - tx_errors = {'buf': b'\x57\x32\x08\x2f\x88\x32\x40\x6b', - 'val': 6283093430376743019} - rx_frame_err = {'buf': b'\x0c\x28\x6f\xad\xce\x66\x6e\x8b', - 'val': 876072919806406283} - rx_over_err = {'buf': b'\x5a\x90\x8f\x9b\xfc\x82\x2e\xa0', - 'val': 6525873760178941600} - rx_crc_err = {'buf': b'\x73\x3a\x71\x17\xd6\x74\x69\x47', - 'val': 8303073210207070535} - collisions = {'buf': b'\x2f\x52\x0c\x79\x96\x03\x6e\x79', - 'val': 3409801584220270201} - - buf = port_no['buf'] \ - + zfill \ - + rx_packets['buf'] \ - + tx_packets['buf'] \ - + rx_bytes['buf'] \ - + tx_bytes['buf'] \ - + rx_dropped['buf'] \ - + tx_dropped['buf'] \ - + rx_errors['buf'] \ - + tx_errors['buf'] \ - + rx_frame_err['buf'] \ - + rx_over_err['buf'] \ - + rx_crc_err['buf'] \ - + collisions['buf'] - - c = OFPPortStats(port_no['val'], - rx_packets['val'], - tx_packets['val'], - rx_bytes['val'], - tx_bytes['val'], - rx_dropped['val'], - tx_dropped['val'], - rx_errors['val'], - tx_errors['val'], - rx_frame_err['val'], - rx_over_err['val'], - rx_crc_err['val'], - collisions['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.port_no['val'], self.c.port_no) - eq_(self.rx_packets['val'], self.c.rx_packets) - eq_(self.tx_packets['val'], self.c.tx_packets) - eq_(self.rx_bytes['val'], self.c.rx_bytes) - eq_(self.tx_bytes['val'], self.c.tx_bytes) - eq_(self.rx_dropped['val'], self.c.rx_dropped) - eq_(self.tx_dropped['val'], self.c.tx_dropped) - eq_(self.rx_errors['val'], self.c.rx_errors) - eq_(self.tx_errors['val'], self.c.tx_errors) - eq_(self.rx_frame_err['val'], self.c.rx_frame_err) - eq_(self.rx_over_err['val'], self.c.rx_over_err) - eq_(self.rx_crc_err['val'], self.c.rx_crc_err) - eq_(self.collisions['val'], self.c.collisions) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(self.port_no['val'], res.port_no) - eq_(self.rx_packets['val'], res.rx_packets) - eq_(self.tx_packets['val'], res.tx_packets) - eq_(self.rx_bytes['val'], res.rx_bytes) - eq_(self.tx_bytes['val'], res.tx_bytes) - eq_(self.rx_dropped['val'], res.rx_dropped) - eq_(self.tx_dropped['val'], res.tx_dropped) - eq_(self.rx_errors['val'], res.rx_errors) - eq_(self.tx_errors['val'], res.tx_errors) - eq_(self.rx_frame_err['val'], res.rx_frame_err) - eq_(self.rx_over_err['val'], res.rx_over_err) - eq_(self.rx_crc_err['val'], res.rx_crc_err) - eq_(self.collisions['val'], res.collisions) - - -class TestOFPQueueStats(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPQueueStats - """ - - # OFP_QUEUE_STATS_PACK_STR - # '!H2xIQQQ...port_no, queue_id, tx_bytes, tx_packets, tx_errors - port_no = {'buf': b'\xe7\x6b', 'val': 59243} - zfill = b'\x00' * 2 - queue_id = {'buf': b'\x2a\xa8\x7f\x32', 'val': 715685682} - tx_bytes = {'buf': b'\x77\xe1\xd5\x63\x18\xae\x63\xaa', - 'val': 8638420181865882538} - tx_packets = {'buf': b'\x27\xa4\x41\xd7\xd4\x53\x9e\x42', - 'val': 2856480458895760962} - tx_errors = {'buf': b'\x57\x32\x08\x2f\x88\x32\x40\x6b', - 'val': 6283093430376743019} - - c = OFPQueueStats(port_no['val'], - queue_id['val'], - tx_bytes['val'], - tx_packets['val'], - tx_errors['val']) - - buf = port_no['buf'] \ - + zfill \ - + queue_id['buf'] \ - + tx_bytes['buf'] \ - + tx_packets['buf'] \ - + tx_errors['buf'] - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.port_no['val'], self.c.port_no) - eq_(self.queue_id['val'], self.c.queue_id) - eq_(self.tx_bytes['val'], self.c.tx_bytes) - eq_(self.tx_packets['val'], self.c.tx_packets) - eq_(self.tx_errors['val'], self.c.tx_errors) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(self.port_no['val'], res.port_no) - eq_(self.queue_id['val'], res.queue_id) - eq_(self.tx_bytes['val'], res.tx_bytes) - eq_(self.tx_packets['val'], res.tx_packets) - eq_(self.tx_errors['val'], res.tx_errors) - - -class TestOFPVendorStats(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPVendorStats - """ - - specific_data = 'specific_data' - specific_data_after = 'data' - offset = specific_data.find(specific_data_after) - - c = OFPVendorStats(specific_data) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.specific_data, self.c.specific_data) - - def test_parser(self): - res = self.c.parser(self.specific_data, self.offset) - eq_(self.specific_data_after, res.specific_data) - - -class TestOFPQueuePropNone(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPQueuePropNone - """ - - # OFP_QUEUE_PROP_HEADER_PACK_STR - # '!HH4x'...property_, len_ - property = {'buf': b'\x00\x00', 'val': ofproto.OFPQT_NONE} - len = {'buf': b'\x00\x08', 'val': ofproto.OFP_QUEUE_PROP_HEADER_SIZE} - zfill = b'\x00' * 4 - - c = OFPQueuePropNone() - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - cls = OFPQueuePropHeader._QUEUE_PROPERTIES[self.c.cls_prop_type] - - eq_(self.property['val'], self.c.cls_prop_type) - eq_(self.property['val'], self.c.property) - eq_(self.property['val'], cls.cls_prop_type) - - eq_(self.len['val'], self.c.cls_prop_len) - eq_(self.len['val'], self.c.len) - eq_(self.len['val'], cls.cls_prop_len) - - def test_parser(self): - buf = self.property['buf'] \ - + self.len['buf'] \ - + self.zfill - - ok_(self.c.parser(buf, 0)) - - -class TestOFPQueuePropMinRate(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPQueuePropMinRate - """ - - # OFP_QUEUE_PROP_MIN_RATE_PACK_STR - # '!H6x'...rate - rate = {'buf': b'\x00\x01', 'val': ofproto.OFPQT_MIN_RATE} - len = {'buf': b'\x00\x10', 'val': ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE} - zfill = b'\x00' * 6 - - buf = rate['buf'] \ - + zfill - - c = OFPQueuePropMinRate(rate['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - cls = OFPQueuePropHeader._QUEUE_PROPERTIES[self.c.cls_prop_type] - - eq_(self.rate['val'], self.c.cls_prop_type) - eq_(self.rate['val'], self.c.rate) - eq_(self.rate['val'], cls.cls_prop_type) - - eq_(self.len['val'], self.c.cls_prop_len) - eq_(self.len['val'], cls.cls_prop_len) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - eq_(self.rate['val'], res.rate) - - -class TestOFPPacketQueue(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPPacketQueue - """ - - # OFP_PACKET_QUEUE_PQCK_STR - # '!IH2x'...queue_id, len_, zfill - queue_id = {'buf': b'\x4d\x4b\x3a\xd1', 'val': 1296775889} - len_ = {'buf': b'\x00\x08', - 'val': ofproto.OFP_QUEUE_PROP_HEADER_SIZE} - zfill = b'\x00' * 2 - - buf = queue_id['buf'] \ - + len_['buf'] \ - + zfill - - c = OFPPacketQueue(queue_id['val'], - len_['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.queue_id['val'], self.c.queue_id) - eq_(self.len_['val'], self.c.len) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - eq_(self.queue_id['val'], res.queue_id) - eq_(self.len_['val'], res.len) - - def test_parser_append_prop(self): - # OFP_QUEUE_PROP_HEADER_PACK_STR + OFP_QUEUE_PROP_MIN_RATE_PACK_STR - # '!HH4xH6x'...type, len, zfill, rate, zfill - len_ = {'buf': b'\x00\x10', - 'val': ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE} - a_type = {'buf': b'\x00\x01', 'val': ofproto.OFPQT_MIN_RATE} - a_len = {'buf': b'\x00\x10', - 'val': ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE} - a_zfill0 = b'\x00' * 4 - a_rate = {'buf': b'\x00\x01', 'val': ofproto.OFPQT_MIN_RATE} - a_zfill1 = b'\x00' * 6 - - buf = self.queue_id['buf'] \ - + len_['buf'] \ - + self.zfill \ - + a_type['buf'] \ - + a_len['buf'] \ - + a_zfill0 \ - + a_rate['buf'] \ - + a_zfill1 - - res = self.c.parser(buf, 0) - - eq_(self.queue_id['val'], res.queue_id) - eq_(len_['val'], res.len) - - append_cls = res.properties[0] - - eq_(a_type['val'], append_cls.property) - eq_(a_len['val'], append_cls.len) - eq_(a_rate['val'], append_cls.rate) - - -class TestOFPHello(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPHello - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_HELLO - msg_len = ofproto.OFP_HEADER_SIZE - xid = 2183948390 - data = b'\x00\x01\x02\x03' - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = struct.pack(fmt, version, msg_type, msg_len, xid) \ - + data - - res = OFPHello.parser(object, version, msg_type, msg_len, xid, - bytearray(buf)) - - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(six.binary_type(buf), six.binary_type(res.buf)) - - def test_serialize(self): - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPHello(Datapath) - c.serialize() - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_HELLO, c.msg_type) - eq_(0, c.xid) - - -class TestOFPErrorMsg(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPErrorMsg - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x01', 'val': ofproto.OFPT_ERROR} - msg_len = {'buf': b'\x00\x0c', - 'val': ofproto.OFP_ERROR_MSG_SIZE} - xid = {'buf': b'\x87\x8b\x26\x7c', 'val': 2274043516} - type = {'buf': b'\xab\x3e', 'val': 43838} - code = {'buf': b'\x5d\x3c', 'val': 23868} - data = b'Error Message.' - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] \ - + type['buf'] \ - + code['buf'] \ - + data - - res = OFPErrorMsg.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(type['val'], res.type) - eq_(code['val'], res.code) - eq_(data, res.data) - - def test_serialize(self): - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - type = 1306 - code = 13774 - data = b'Error Message.' - - c = OFPErrorMsg(Datapath) - c.type = type - c.code = code - c.data = data - - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_ERROR, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_ERROR_MSG_PACK_STR.replace('!', '') \ - + str(len(data)) + 's' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_ERROR, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, res[3]) - eq_(type, res[4]) - eq_(code, res[5]) - eq_(data, res[6]) - - -class TestOFPEchoRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPEchoRequest - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x02', 'val': ofproto.OFPT_ECHO_REQUEST} - msg_len = {'buf': b'\x00\x08', - 'val': ofproto.OFP_HEADER_SIZE} - xid = {'buf': b'\x84\x47\xef\x3f', 'val': 2219306815} - data = b'Request Message.' - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] \ - + data - - res = OFPEchoRequest.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(data, res.data) - - def test_serialize(self): - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - data = b'Request Message.' - - c = OFPEchoRequest(Datapath) - c.data = data - - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_ECHO_REQUEST, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + str(len(data)) + 's' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_ECHO_REQUEST, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, res[3]) - eq_(data, res[4]) - - -class TestOFPEchoReply(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPEchoReply - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x03', 'val': ofproto.OFPT_ECHO_REPLY} - msg_len = {'buf': b'\x00\x08', - 'val': ofproto.OFP_HEADER_SIZE} - xid = {'buf': b'\x6e\x21\x3e\x62', 'val': 1847672418} - data = b'Reply Message.' - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] \ - + data - - res = OFPEchoReply.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(data, res.data) - - def test_serialize(self): - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - data = b'Reply Message.' - - c = OFPEchoReply(Datapath) - c.data = data - - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_ECHO_REPLY, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + str(len(data)) + 's' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_ECHO_REPLY, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, res[3]) - eq_(data, res[4]) - - -class TestOFPVendor(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPVendor - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x04', 'val': ofproto.OFPT_VENDOR} - msg_len = {'buf': b'\x00\x0c', - 'val': ofproto.OFP_VENDOR_HEADER_SIZE} - xid = {'buf': b'\x05\x45\xdf\x18', 'val': 88465176} - vendor = {'buf': b'\x53\xea\x25\x3e', 'val': 1407853886} - data = b'Vendor Message.' - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] \ - + vendor['buf'] \ - + data - - res = OFPVendor.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(vendor['val'], res.vendor) - eq_(data, res.data) - - def test_serialize(self): - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - vendor = {'buf': b'\x38\x4b\xf9\x6c', 'val': 944503148} - data = b'Reply Message.' - - c = OFPVendor(Datapath) - c.vendor = vendor['val'] - c.data = data - - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_VENDOR, c.msg_type) - eq_(0, c.xid) - eq_(vendor['val'], c.vendor) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_VENDOR_HEADER_PACK_STR.replace('!', '') \ - + str(len(data)) + 's' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_VENDOR, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, res[3]) - eq_(vendor['val'], res[4]) - eq_(data, res[5]) - - -# class TestNXTRequest(unittest.TestCase): -class TestNiciraHeader(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NiciraHeader - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - subtype = ofproto.NXT_FLOW_MOD_TABLE_ID - - c = NiciraHeader(object, subtype) - eq_(subtype, c.subtype) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - data = b'Reply Message.' - subtype = ofproto.NXT_FLOW_MOD_TABLE_ID - - c = NiciraHeader(Datapath, subtype) - c.data = data - - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_VENDOR, c.msg_type) - eq_(0, c.xid) - eq_(ofproto_common.NX_EXPERIMENTER_ID, c.vendor) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ - + str(len(data)) + 's' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_VENDOR, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, res[3]) - eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) - eq_(subtype, res[5]) - eq_(data, res[6]) - - -class TestNXTSetFlowFormat(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXTSetFlowFormat - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - flow_format = {'buf': b'\xdc\x6b\xf5\x24', 'val': 3698062628} - - c = NXTSetFlowFormat(object, flow_format['val']) - eq_(flow_format['val'], c.format) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - flow_format = {'buf': b'\x5a\x4e\x59\xad', 'val': 1515084205} - - c = NXTSetFlowFormat(Datapath, flow_format['val']) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_VENDOR, c.msg_type) - eq_(0, c.xid) - eq_(ofproto_common.NX_EXPERIMENTER_ID, c.vendor) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ - + ofproto.NX_SET_FLOW_FORMAT_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_VENDOR, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, res[3]) - eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) - eq_(ofproto.NXT_SET_FLOW_FORMAT, res[5]) - eq_(flow_format['val'], res[6]) - - -class TestNXTFlowMod(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXTFlowMod - """ - - # NX_FLOW_MOD_PACK_STR - # '!Q4HI3H6x'...cokkie, command, idle_timeout, head_timeout, - # priority, buffer_id, out_port, flags, rule, zfill - cookie = {'buf': b'\x04\x56\x27\xad\xbd\x43\xd6\x83', - 'val': 312480851306993283} - command = {'buf': b'\x61\xaa', 'val': 25002} - idle_timeout = {'buf': b'\x4e\xff', 'val': 20223} - hard_timeout = {'buf': b'\x80\x16', 'val': 32790} - priority = {'buf': b'\x70\x5f', 'val': 28767} - buffer_id = {'buf': b'\x7b\x97\x3a\x09', 'val': 2073508361} - out_port = {'buf': b'\x11\x7d', 'val': 4477} - flags = {'buf': b'\x5c\xb9', 'val': 23737} - rule = nx_match.ClsRule() - zfill = b'\x00' * 6 - - port = {'buf': b'\x2a\xe0', 'val': 10976} - actions = [OFPActionOutput(port['val'])] - - def _get_obj(self, append_action=False): - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - actions = None - if append_action: - actions = self.actions - - c = NXTFlowMod(Datapath, - self.cookie['val'], - self.command['val'], - self.idle_timeout['val'], - self.hard_timeout['val'], - self.priority['val'], - self.buffer_id['val'], - self.out_port['val'], - self.flags['val'], - self.rule, - actions) - - return c - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - c = self._get_obj() - - eq_(self.cookie['val'], c.cookie) - eq_(self.command['val'], c.command) - eq_(self.idle_timeout['val'], c.idle_timeout) - eq_(self.hard_timeout['val'], c.hard_timeout) - eq_(self.priority['val'], c.priority) - eq_(self.buffer_id['val'], c.buffer_id) - eq_(self.out_port['val'], c.out_port) - eq_(self.flags['val'], c.flags) - eq_(self.rule.__hash__(), c.rule.__hash__()) - - def test_init_append_actions(self): - c = self._get_obj(True) - - action = c.actions[0] - eq_(ofproto.OFPAT_OUTPUT, action.type) - eq_(ofproto.OFP_ACTION_OUTPUT_SIZE, action.len) - eq_(self.port['val'], action.port) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - c = self._get_obj() - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_VENDOR, c.msg_type) - eq_(0, c.xid) - eq_(ofproto_common.NX_EXPERIMENTER_ID, c.vendor) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ - + ofproto.NX_FLOW_MOD_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_VENDOR, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, res[3]) - eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) - eq_(ofproto.NXT_FLOW_MOD, res[5]) - eq_(self.cookie['val'], res[6]) - eq_(self.command['val'], res[7]) - eq_(self.idle_timeout['val'], res[8]) - eq_(self.hard_timeout['val'], res[9]) - eq_(self.priority['val'], res[10]) - eq_(self.buffer_id['val'], res[11]) - eq_(self.out_port['val'], res[12]) - eq_(self.flags['val'], res[13]) - - def test_serialize_append_actions(self): - c = self._get_obj(True) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_VENDOR, c.msg_type) - eq_(0, c.xid) - eq_(ofproto_common.NX_EXPERIMENTER_ID, c.vendor) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ - + ofproto.NX_FLOW_MOD_PACK_STR.replace('!', '') \ - + ofproto.OFP_ACTION_OUTPUT_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_VENDOR, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, res[3]) - eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) - eq_(ofproto.NXT_FLOW_MOD, res[5]) - eq_(self.cookie['val'], res[6]) - eq_(self.command['val'], res[7]) - eq_(self.idle_timeout['val'], res[8]) - eq_(self.hard_timeout['val'], res[9]) - eq_(self.priority['val'], res[10]) - eq_(self.buffer_id['val'], res[11]) - eq_(self.out_port['val'], res[12]) - eq_(self.flags['val'], res[13]) - - # action - eq_(0, res[14]) - eq_(ofproto.OFPAT_OUTPUT, res[15]) - eq_(ofproto.OFP_ACTION_OUTPUT_SIZE, res[16]) - eq_(self.port['val'], res[17]) - eq_(0xffe5, res[18]) - - -class TestNXTRoleRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXTRoleRequest - """ - - # NX_ROLE_PACK_STR - # '!I'...role - role = {'buf': b'\x62\x81\x27\x61', 'val': 1652631393} - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = NXTRoleRequest(Datapath, role['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.role['val'], self.c.role) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_VENDOR, self.c.msg_type) - eq_(0, self.c.xid) - eq_(ofproto_common.NX_EXPERIMENTER_ID, self.c.vendor) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ - + ofproto.NX_ROLE_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_VENDOR, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) - eq_(ofproto.NXT_ROLE_REQUEST, res[5]) - eq_(self.role['val'], res[6]) - - -class TestNXTFlowModTableId(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.NXTFlowModTableId - """ - - # NX_FLOW_MOD_TABLE_ID_PACK_STR - # '!B7x'...set_, zfill - set_ = {'buf': b'\x71', 'val': 113} - zfill = b'\x00' * 7 - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = NXTFlowModTableId(Datapath, set_['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.set_['val'], self.c.set) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_VENDOR, self.c.msg_type) - eq_(0, self.c.xid) - eq_(ofproto_common.NX_EXPERIMENTER_ID, self.c.vendor) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ - + ofproto.NX_FLOW_MOD_TABLE_ID_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_VENDOR, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) - eq_(ofproto.NXT_FLOW_MOD_TABLE_ID, res[5]) - eq_(self.set_['val'], res[6]) - - -class TestOFPSwitchFeatures(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPSwitchFeatures - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPSwitchFeatures(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x06', 'val': ofproto.OFPT_FEATURES_REPLY} - msg_len_val = ofproto.OFP_SWITCH_FEATURES_SIZE \ - + ofproto.OFP_PHY_PORT_SIZE - msg_len = {'buf': b'\x00\x4c', 'val': msg_len_val} - xid = {'buf': b'\xcc\x0a\x41\xd4', 'val': 3423224276} - - # OFP_SWITCH_FEATURES_PACK_STR - # '!QIB3xII'...datapath_id, n_buffers, n_tables, - # zfill, capabilities, actions - datapath_id = {'buf': b'\x11\xa3\x72\x63\x61\xde\x39\x81', - 'val': 1270985291017894273} - n_buffers = {'buf': b'\x80\x14\xd7\xf6', 'val': 2148849654} - n_tables = {'buf': b'\xe4', 'val': 228} - zfill = b'\x00' * 3 - capabilities = {'buf': b'\x69\x4f\xe4\xc2', 'val': 1766843586} - actions = {'buf': b'\x78\x06\xd9\x0c', 'val': 2013714700} - - # OFP_PHY_PORT_PACK_STR - # '!H6s16sIIIIII'... port_no, hw_addr, name, config, state - # curr, advertised, supported, peer - port_no = {'buf': b'\xe7\x6b', 'val': 59243} - hw_addr = '3c:d1:2b:8d:3f:d6' - name = b'name'.ljust(16) - config = {'buf': b'\x84\xb6\x8c\x53', 'val': 2226555987} - state = {'buf': b'\x64\x07\xfb\xc9', 'val': 1678244809} - curr = {'buf': b'\xa9\xe8\x0a\x2b', 'val': 2850556459} - advertised = {'buf': b'\x78\xb9\x7b\x72', 'val': 2025421682} - supported = {'buf': b'\x7e\x65\x68\xad', 'val': 2120575149} - peer = {'buf': b'\xa4\x5b\x8b\xed', 'val': 2757463021} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] \ - + datapath_id['buf'] \ - + n_buffers['buf'] \ - + n_tables['buf'] \ - + zfill \ - + capabilities['buf'] \ - + actions['buf'] \ - + port_no['buf'] \ - + addrconv.mac.text_to_bin(hw_addr) \ - + name \ - + config['buf'] \ - + state['buf'] \ - + curr['buf'] \ - + advertised['buf'] \ - + supported['buf'] \ - + peer['buf'] - - res = OFPSwitchFeatures.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(datapath_id['val'], res.datapath_id) - eq_(n_buffers['val'], res.n_buffers) - eq_(n_tables['val'], res.n_tables) - eq_(capabilities['val'], res.capabilities) - eq_(actions['val'], res.actions) - - # port - port = res.ports[port_no['val']] - eq_(port_no['val'], port.port_no) - eq_(hw_addr, hw_addr) - eq_(name, port.name) - eq_(config['val'], port.config) - eq_(state['val'], port.state) - eq_(curr['val'], port.curr) - eq_(advertised['val'], port.advertised) - eq_(supported['val'], port.supported) - eq_(peer['val'], port.peer) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPPortStatus(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPPortStatus - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPPortStatus(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x0c', 'val': ofproto.OFPT_PORT_STATUS} - msg_len = {'buf': b'\x00\x40', - 'val': ofproto.OFP_PORT_STATUS_SIZE} - xid = {'buf': b'\x06\x27\x8b\x7b', 'val': 103254907} - - # OFP_PORT_STATUS_PACK_STR - # '!B7xH6s16sIIIIII'...reason, zfill, port_no, hw_addr, - # name, config, state, curr, - # advertised, supported, peer - reason = {'buf': b'\x71', 'val': 113} - zfill = b'\x00' * 7 - port_no = {'buf': b'\x48\xd8', 'val': 18648} - hw_addr = '41:f7:a3:52:8f:6b' - name = b'name'.ljust(16) - config = {'buf': b'\xae\x73\x90\xec', 'val': 2926809324} - state = {'buf': b'\x41\x37\x32\x1d', 'val': 1094136349} - curr = {'buf': b'\xa9\x47\x13\x2c', 'val': 2840007468} - advertised = {'buf': b'\xce\x6b\x4a\x87', 'val': 3463137927} - supported = {'buf': b'\xb8\x06\x65\xa1', 'val': 3087426977} - peer = {'buf': b'\x6a\x11\x52\x39', 'val': 1779520057} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] \ - + reason['buf'] \ - + zfill \ - + port_no['buf'] \ - + addrconv.mac.text_to_bin(hw_addr) \ - + name \ - + config['buf'] \ - + state['buf'] \ - + curr['buf'] \ - + advertised['buf'] \ - + supported['buf'] \ - + peer['buf'] - - res = OFPPortStatus.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(reason['val'], res.reason) - - # desc - desc = res.desc - eq_(port_no['val'], desc.port_no) - eq_(hw_addr, desc.hw_addr) - eq_(name, desc.name) - eq_(config['val'], desc.config) - eq_(state['val'], desc.state) - eq_(curr['val'], desc.curr) - eq_(advertised['val'], desc.advertised) - eq_(supported['val'], desc.supported) - eq_(peer['val'], desc.peer) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPPacketIn(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPPacketIn - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPPacketIn(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def _test_parser(self, padding=False): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x0a', 'val': ofproto.OFPT_PACKET_IN} - msg_len = {'buf': b'\x00\x14', - 'val': ofproto.OFP_PACKET_IN_SIZE} - xid = {'buf': b'\xd0\x23\x8c\x34', 'val': 3491990580} - - # OFP_PACKET_IN_PACK_STR - # '!IHHBx2x'...buffer_id, total_len, - # in_port, reason, zfill, data - buffer_id = {'buf': b'\xae\x73\x90\xec', 'val': 2926809324} - total_len = {'buf': b'\x00\x10', 'val': 16} - in_port = {'buf': b'\x08\x42', 'val': 2114} - reason = {'buf': b'\x43', 'val': 67} - zfill = b'\x00' * 1 - if padding: - data = b'PACKET IN'.ljust(20) - else: - data = b'PACKET IN'.ljust(16) - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] \ - + buffer_id['buf'] \ - + total_len['buf'] \ - + in_port['buf'] \ - + reason['buf'] \ - + zfill \ - + data - - res = OFPPacketIn.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(buffer_id['val'], res.buffer_id) - eq_(total_len['val'], res.total_len) - eq_(in_port['val'], res.in_port) - eq_(reason['val'], res.reason) - eq_(data[0:16], res.data) - - return True - - def test_parser(self): - ok_(self._test_parser()) - - def test_parser_padding(self): - ok_(self._test_parser(True)) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPGetConfigReply(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPGetConfigReply - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPGetConfigReply(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x0a', 'val': ofproto.OFPT_GET_CONFIG_REPLY} - msg_len = {'buf': b'\x00\x14', - 'val': ofproto.OFP_SWITCH_CONFIG_SIZE} - xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} - - # OFP_SWITCH_CONFIG_PACK_STR - # '!HH'...flags, miss_send_len - flags = {'buf': b'\xa0\xe2', 'val': 41186} - miss_send_len = {'buf': b'\x36\x0e', 'val': 13838} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] \ - + flags['buf'] \ - + miss_send_len['buf'] - - res = OFPGetConfigReply.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(flags['val'], res.flags) - eq_(miss_send_len['val'], res.miss_send_len) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPBarrierReply(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPBarrierReply - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPBarrierReply(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x13', 'val': ofproto.OFPT_BARRIER_REPLY} - msg_len = {'buf': b'\x00\x08', - 'val': ofproto.OFP_HEADER_SIZE} - xid = {'buf': b'\x66\xc4\xc3\xac', 'val': 1724171180} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] - - res = OFPBarrierReply.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPFlowRemoved(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPFlowRemoved - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPFlowRemoved(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x0a', 'val': ofproto.OFPT_FLOW_REMOVED} - msg_len = {'buf': b'\x00\x14', - 'val': ofproto.OFP_FLOW_REMOVED_SIZE} - xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] - - # OFP_MATCH_PACK_STR - # '!IH6s6sHBxHBB2xIIHH'...wildcards, in_port, dl_src, dl_dst, dl_vlan, - # dl_vlan_pcp, dl_type, nw_tos, nw_proto, - # nw_src, nw_dst, tp_src, tp_dst - wildcards = {'buf': b'\xd2\x71\x25\x23', 'val': 3530630435} - in_port = {'buf': b'\x37\x8b', 'val': 14219} - dl_src = b'\x7f\x85\xc4\x70\x12\xda' - dl_dst = b'\x0a\x51\x17\x58\xb0\xbb' - dl_vlan = {'buf': b'\xc1\xf9', 'val': 49657} - dl_vlan_pcp = {'buf': b'\x79', 'val': 121} - zfill0 = b'\x00' - dl_type = {'buf': b'\xa6\x9e', 'val': 42654} - nw_tos = {'buf': b'\xde', 'val': 222} - nw_proto = {'buf': b'\xe5', 'val': 229} - zfil11 = b'\x00' * 2 - nw_src = {'buf': b'\x1b\x6d\x8d\x4b', 'val': 460164427} - nw_dst = {'buf': b'\xab\x25\xe1\x20', 'val': 2871386400} - tp_src = {'buf': b'\xd5\xc3', 'val': 54723} - tp_dst = {'buf': b'\x78\xb9', 'val': 30905} - - buf += wildcards['buf'] \ - + in_port['buf'] \ - + dl_src \ - + dl_dst \ - + dl_vlan['buf'] \ - + dl_vlan_pcp['buf'] \ - + zfill0 \ - + dl_type['buf'] \ - + nw_tos['buf'] \ - + nw_proto['buf'] \ - + zfil11 \ - + nw_src['buf'] \ - + nw_dst['buf'] \ - + tp_src['buf'] \ - + tp_dst['buf'] - - # OFP_FLOW_REMOVED_PACK_STR0 - # '!QHBxIIH2xQQ'...cookie, priority, reason, zfill, - # duration_sec, duration_nsec, idle_timeout, - # zfill, packet_count, byte_count - cookie = {'buf': b'\x02\x79\xba\x00\xef\xab\xee\x44', - 'val': 178378173441633860} - priority = {'buf': b'\x02\xce', 'val': 718} - reason = {'buf': b'\xa9', 'val': 169} - zfill0 = b'\x00' * 1 - duration_sec = {'buf': b'\x86\x24\xa3\xba', 'val': 2250548154} - duration_nsec = {'buf': b'\x94\x94\xc2\x23', 'val': 2492776995} - idle_timeout = {'buf': b'\xeb\x7c', 'val': 60284} - zfill1 = b'\x00' * 2 - packet_count = {'buf': b'\x5a\x0d\xf2\x03\x8e\x0a\xbb\x8d', - 'val': 6489108735192644493} - byte_count = {'buf': b'\x65\xc8\xd3\x72\x51\xb5\xbb\x7c', - 'val': 7334344481123449724} - - buf += cookie['buf'] \ - + priority['buf'] \ - + reason['buf'] \ - + zfill0 \ - + duration_sec['buf'] \ - + duration_nsec['buf'] \ - + idle_timeout['buf'] \ - + zfill1 \ - + packet_count['buf'] \ - + byte_count['buf'] - - res = OFPFlowRemoved.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(cookie['val'], res.cookie) - eq_(priority['val'], res.priority) - eq_(reason['val'], res.reason) - eq_(duration_sec['val'], res.duration_sec) - eq_(duration_nsec['val'], res.duration_nsec) - eq_(idle_timeout['val'], res.idle_timeout) - eq_(packet_count['val'], res.packet_count) - eq_(byte_count['val'], res.byte_count) - - # match - match = res.match - eq_(wildcards['val'], match.wildcards) - eq_(in_port['val'], match.in_port) - eq_(dl_src, match.dl_src) - eq_(dl_dst, match.dl_dst) - eq_(dl_vlan['val'], match.dl_vlan) - eq_(dl_vlan_pcp['val'], match.dl_vlan_pcp) - eq_(dl_type['val'], match.dl_type) - eq_(nw_tos['val'], match.nw_tos) - eq_(nw_proto['val'], match.nw_proto) - eq_(nw_src['val'], match.nw_src) - eq_(nw_dst['val'], match.nw_dst) - eq_(tp_src['val'], match.tp_src) - eq_(tp_dst['val'], match.tp_dst) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPQueueGetConfigReply(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPQueueGetConfigReply - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPQueueGetConfigReply(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x0a', - 'val': ofproto.OFPT_QUEUE_GET_CONFIG_REPLY} - msg_len_val = ofproto.OFP_QUEUE_GET_CONFIG_REPLY_SIZE \ - + ofproto.OFP_PACKET_QUEUE_SIZE - msg_len = {'buf': b'\x00\x14', 'val': msg_len_val} - xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] - - # OFP_QUEUE_GET_CONFIG_REPLY_PACK_STR - # '!H6x'...port, zfill - port = {'buf': b'\xfe\x66', 'val': 65126} - zfill = b'\x00' * 6 - - buf += port['buf'] \ - + zfill - - # OFP_PACKET_QUEUE_PQCK_STR - # '!IH2x'...queue_id, len_, zfill - queue_id = {'buf': b'\x4d\x4b\x3a\xd1', 'val': 1296775889} - len_ = {'buf': b'\x00\x08', - 'val': ofproto.OFP_QUEUE_PROP_HEADER_SIZE} - zfill = b'\x00' * 2 - - buf += queue_id['buf'] \ - + len_['buf'] \ - + zfill - - res = OFPQueueGetConfigReply.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(port['val'], res.port) - - # queue - queue = res.queues[0] - eq_(queue_id['val'], queue.queue_id) - eq_(len_['val'], queue.len) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPDescStatsReply(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPDescStatsReply - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPDescStatsReply(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} - msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ - + ofproto.OFP_DESC_STATS_SIZE - msg_len = {'buf': b'\x04\x38', 'val': msg_len_val} - xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] - - # OFP_STATS_MSG_PACK_STR - # '!HH'...type_, flags - type_ = {'buf': b'\x00\x00', 'val': ofproto.OFPST_DESC} - flags = {'buf': b'\x30\xd9', 'val': 12505} - - buf += type_['buf'] \ - + flags['buf'] - - # stats_type_cls = OFPDescStats - # OFP_DESC_STATS_PACK_STR - # '!256s256s256s32s256s'...mfr_desc, hw_desc, sw_desc, - # serial_num, dp_desc - mfr_desc = b'mfr_desc'.ljust(256) - hw_desc = b'hw_desc'.ljust(256) - sw_desc = b'sw_desc'.ljust(256) - serial_num = b'serial_num'.ljust(32) - dp_desc = b'dp_desc'.ljust(256) - - buf += mfr_desc \ - + hw_desc \ - + sw_desc \ - + serial_num \ - + dp_desc - - res = OFPDescStatsReply.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(type_['val'], res.type) - eq_(flags['val'], res.flags) - - # body - body = res.body - eq_(mfr_desc, body.mfr_desc) - eq_(hw_desc, body.hw_desc) - eq_(sw_desc, body.sw_desc) - eq_(serial_num, body.serial_num) - eq_(dp_desc, body.dp_desc) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPFlowStatsReply(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPFlowStatsReply - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPFlowStatsReply(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} - msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ - + ofproto.OFP_FLOW_STATS_SIZE - msg_len = {'buf': b'\x00\x64', 'val': msg_len_val} - xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] - - # OFP_STATS_MSG_PACK_STR - # '!HH'...type_, flags - type_ = {'buf': b'\x00\x01', 'val': ofproto.OFPST_FLOW} - flags = {'buf': b'\x95\xf4', 'val': 38388} - - buf += type_['buf'] \ - + flags['buf'] - - # stats_type_cls = OFPFlowStats - # OFP_FLOW_STATS_0_PACK_STR - # '!HBx'...length, table_id, zfill - length = {'buf': b'\x00\x60', 'val': 96} - table_id = {'buf': b'\x51', 'val': 81} - zfill = b'\x00' - - buf += length['buf'] \ - + table_id['buf'] \ - + zfill - - # OFP_MATCH_PACK_STR - # '!IH6s6sHBxHBB2xIIHH'... - match = b'\x97\x7c\xa6\x1e' \ - + b'\x5e\xa0' \ - + b'\x70\x17\xdc\x80\x59\x9e' \ - + b'\x79\xc6\x56\x87\x92\x28' \ - + b'\xb1\x81' \ - + b'\xbe' \ - + b'\x00' \ - + b'\x01\xab' \ - + b'\x42' \ - + b'\xfe' \ - + b'\x00\x00' \ - + b'\xa4\x5d\x5c\x42' \ - + b'\xa2\x5c\x2e\x05' \ - + b'\x5a\x94' \ - + b'\x64\xd4' - - buf += match - - # OFP_FLOW_STATS_1_PACK_STR - # '!IIHHH6xQQQ'...duration_sec, duration_nsec, priority, - # idle_timeout, hard_timeout, zfill, - # cookie, packet_count, byte_count - duration_sec = {'buf': b'\x94\x19\xb3\xd2', 'val': 2484712402} - duration_nsec = {'buf': b'\xee\x66\xcf\x7c', 'val': 3999715196} - priority = {'buf': b'\xe1\xc0', 'val': 57792} - idle_timeout = {'buf': b'\x8e\x10', 'val': 36368} - hard_timeout = {'buf': b'\xd4\x99', 'val': 54425} - zfill = b'\x00' * 6 - cookie = {'buf': b'\x0b\x01\xe8\xe5\xf0\x84\x8a\xe0', - 'val': 793171083674290912} - packet_count = {'buf': b'\x47\x5c\xc6\x05\x28\xff\x7c\xdb', - 'val': 5142202600015232219} - byte_count = {'buf': b'\x24\xe9\x4b\xee\xcb\x57\xd9\xc3', - 'val': 2659740543924820419} - - buf += duration_sec['buf'] - buf += duration_nsec['buf'] - buf += priority['buf'] - buf += idle_timeout['buf'] - buf += hard_timeout['buf'] - buf += zfill - buf += cookie['buf'] - buf += packet_count['buf'] - buf += byte_count['buf'] - - # _PACK_STR...type_, len_ [others...] - type = {'buf': b'\x00\x00', 'val': ofproto.OFPAT_OUTPUT} - len = {'buf': b'\x00\x08', - 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} - port = {'buf': b'\x59\x2a', 'val': 22826} - max_len = {'buf': b'\x00\x08', - 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} - - buf += type['buf'] \ - + len['buf'] \ - + port['buf'] \ - + max_len['buf'] - - res = OFPFlowStatsReply.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(type_['val'], res.type) - eq_(flags['val'], res.flags) - - # body - body = res.body[0] - eq_(length['val'], body.length) - eq_(table_id['val'], body.table_id) - eq_(duration_sec['val'], body.duration_sec) - eq_(duration_nsec['val'], body.duration_nsec) - eq_(priority['val'], body.priority) - eq_(idle_timeout['val'], body.idle_timeout) - eq_(hard_timeout['val'], body.hard_timeout) - eq_(cookie['val'], body.cookie) - eq_(packet_count['val'], body.packet_count) - eq_(byte_count['val'], body.byte_count) - - # action - action = body.actions[0] - eq_(type['val'], action.type) - eq_(len['val'], action.len) - eq_(port['val'], action.port) - eq_(max_len['val'], action.max_len) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPAggregateStatsReply(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPAggregateStatsReply - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPAggregateStatsReply(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} - msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ - + ofproto.OFP_AGGREGATE_STATS_REPLY_SIZE - msg_len = {'buf': b'\x00\x4c', 'val': msg_len_val} - xid = {'buf': b'\xc6\xd6\xce\x38', 'val': 3335966264} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] - - # OFP_STATS_MSG_PACK_STR - # '!HH'...type_, flags - type_ = {'buf': b'\x00\x02', 'val': ofproto.OFPST_AGGREGATE} - flags = {'buf': b'\x65\x66', 'val': 25958} - - buf += type_['buf'] \ - + flags['buf'] - - # stats_type_cls = OFPAggregateStats - # OFP_AGGREGATE_STATS_REPLY_PACK_STR - # '!QQI4x'...packet_count, byte_count, flow_count, zfill - packet_count = {'buf': b'\x43\x95\x1b\xfb\x0f\xf6\xa7\xdd', - 'val': 4869829337189623773} - byte_count = {'buf': b'\x36\xda\x2d\x80\x2a\x95\x35\xdd', - 'val': 3952521651464517085} - flow_count = {'buf': b'\xc3\x0d\xc3\xed', 'val': 3272459245} - zfill = b'\x00' * 4 - - buf += packet_count['buf'] \ - + byte_count['buf'] \ - + flow_count['buf'] \ - + zfill - - res = OFPAggregateStatsReply.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(type_['val'], res.type) - eq_(flags['val'], res.flags) - - # body - body = res.body[0] - eq_(packet_count['val'], body.packet_count) - eq_(byte_count['val'], body.byte_count) - eq_(flow_count['val'], body.flow_count) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPTableStatsReply(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPTableStatsReply - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPTableStatsReply(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} - msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ - + ofproto.OFP_TABLE_STATS_SIZE - msg_len = {'buf': b'\x00\x4c', 'val': msg_len_val} - xid = {'buf': b'\xd6\xb4\x8d\xe6', 'val': 3602157030} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] - - # OFP_STATS_MSG_PACK_STR - # '!HH'...type_, flags - type_ = {'buf': b'\x00\x03', 'val': ofproto.OFPST_TABLE} - flags = {'buf': b'\xb3\xf0', 'val': 46064} - - buf += type_['buf'] \ - + flags['buf'] - - # stats_type_cls = OFPTableStats - # OFP_TABLE_STATS_PACK_STR - # '!B3x32sIIIQQ'...table_id, zfill, name, wildcards, max_entries, - # active_count, lookup_count, matched_count - table_id = {'buf': b'\x5b', 'val': 91} - zfill = b'\x00' * 3 - name = b'name'.ljust(32) - wildcards = {'buf': b'\xc5\xaf\x6e\x12', 'val': 3316608530} - max_entries = {'buf': b'\x95\x6c\x78\x4d', 'val': 2506913869} - active_count = {'buf': b'\x78\xac\xa8\x1e', 'val': 2024581150} - lookup_count = {'buf': b'\x40\x1d\x9c\x39\x19\xec\xd4\x1c', - 'val': 4620020561814017052} - matched_count = {'buf': b'\x27\x35\x02\xb6\xc5\x5e\x17\x65', - 'val': 2825167325263435621} - - buf += table_id['buf'] \ - + zfill \ - + name \ - + wildcards['buf'] \ - + max_entries['buf'] \ - + active_count['buf'] \ - + lookup_count['buf'] \ - + matched_count['buf'] - - res = OFPTableStatsReply.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(type_['val'], res.type) - eq_(flags['val'], res.flags) - - # body - body = res.body[0] - eq_(table_id['val'], body.table_id) - eq_(name, body.name) - eq_(wildcards['val'], body.wildcards) - eq_(max_entries['val'], body.max_entries) - eq_(active_count['val'], body.active_count) - eq_(lookup_count['val'], body.lookup_count) - eq_(matched_count['val'], body.matched_count) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPPortStatsReply(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPPortStatsReply - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPPortStatsReply(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} - msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ - + ofproto.OFP_PORT_STATS_SIZE - msg_len = {'buf': b'\x00\x74', 'val': msg_len_val} - xid = {'buf': b'\xc2\xaf\x3d\xff', 'val': 3266264575} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] - - # OFP_STATS_MSG_PACK_STR - # '!HH'...type_, flags - type_ = {'buf': b'\x00\x04', 'val': ofproto.OFPST_PORT} - flags = {'buf': b'\xda\xde', 'val': 56030} - - buf += type_['buf'] \ - + flags['buf'] - - # stats_type_cls = OFPPortStats - # OFP_PORT_STATS_PACK_STR - # '!H6xQQQQQQQQQQQQ'... port_no, zfill, rx_packets, tx_packets, - # rx_bytes, tx_bytes, rx_dropped, tx_dropped, - # rx_errors, tx_errors, rx_frame_err, - # rx_over_err, rx_crc_err, collisions - port_no = {'buf': b'\xe7\x6b', 'val': 59243} - zfill = b'\x00' * 6 - rx_packets = {'buf': b'\x53\x44\x36\x61\xc4\x86\xc0\x37', - 'val': 5999980397101236279} - tx_packets = {'buf': b'\x27\xa4\x41\xd7\xd4\x53\x9e\x42', - 'val': 2856480458895760962} - rx_bytes = {'buf': b'\x55\xa1\x38\x60\x43\x97\x0d\x89', - 'val': 6170274950576278921} - tx_bytes = {'buf': b'\x77\xe1\xd5\x63\x18\xae\x63\xaa', - 'val': 8638420181865882538} - rx_dropped = {'buf': b'\x60\xe6\x20\x01\x24\xda\x4e\x5a', - 'val': 6982303461569875546} - tx_dropped = {'buf': b'\x09\x2d\x5d\x71\x71\xb6\x8e\xc7', - 'val': 661287462113808071} - rx_errors = {'buf': b'\x2f\x7e\x35\xb3\x66\x3c\x19\x0d', - 'val': 3422231811478788365} - tx_errors = {'buf': b'\x57\x32\x08\x2f\x88\x32\x40\x6b', - 'val': 6283093430376743019} - rx_frame_err = {'buf': b'\x0c\x28\x6f\xad\xce\x66\x6e\x8b', - 'val': 876072919806406283} - rx_over_err = {'buf': b'\x5a\x90\x8f\x9b\xfc\x82\x2e\xa0', - 'val': 6525873760178941600} - rx_crc_err = {'buf': b'\x73\x3a\x71\x17\xd6\x74\x69\x47', - 'val': 8303073210207070535} - collisions = {'buf': b'\x2f\x52\x0c\x79\x96\x03\x6e\x79', - 'val': 3409801584220270201} - - buf += port_no['buf'] \ - + zfill \ - + rx_packets['buf'] \ - + tx_packets['buf'] \ - + rx_bytes['buf'] \ - + tx_bytes['buf'] \ - + rx_dropped['buf'] \ - + tx_dropped['buf'] \ - + rx_errors['buf'] \ - + tx_errors['buf'] \ - + rx_frame_err['buf'] \ - + rx_over_err['buf'] \ - + rx_crc_err['buf'] \ - + collisions['buf'] - - res = OFPPortStatsReply.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(type_['val'], res.type) - eq_(flags['val'], res.flags) - - # body - body = res.body[0] - eq_(port_no['val'], body.port_no) - eq_(rx_packets['val'], body.rx_packets) - eq_(tx_packets['val'], body.tx_packets) - eq_(rx_bytes['val'], body.rx_bytes) - eq_(tx_bytes['val'], body.tx_bytes) - eq_(rx_dropped['val'], body.rx_dropped) - eq_(tx_dropped['val'], body.tx_dropped) - eq_(rx_errors['val'], body.rx_errors) - eq_(tx_errors['val'], body.tx_errors) - eq_(rx_frame_err['val'], body.rx_frame_err) - eq_(rx_over_err['val'], body.rx_over_err) - eq_(rx_crc_err['val'], body.rx_crc_err) - eq_(collisions['val'], body.collisions) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPQueueStatsReply(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPQueueStatsReply - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPQueueStatsReply(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} - msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ - + ofproto.OFP_QUEUE_STATS_SIZE - msg_len = {'buf': b'\x00\x2c', 'val': msg_len_val} - xid = {'buf': b'\x19\xfc\x28\x6c', 'val': 435955820} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] - - # OFP_STATS_MSG_PACK_STR - # '!HH'...type_, flags - type_ = {'buf': b'\x00\x05', 'val': ofproto.OFPST_QUEUE} - flags = {'buf': b'\x3b\x2b', 'val': 15147} - - buf += type_['buf'] \ - + flags['buf'] - - # stats_type_cls = OFPQueueStats - # OFP_QUEUE_STATS_PACK_STR - # '!H2xIQQQ...port_no, queue_id, tx_bytes, tx_packets, tx_errors - port_no = {'buf': b'\xe7\x6b', 'val': 59243} - zfill = b'\x00' * 2 - queue_id = {'buf': b'\x2a\xa8\x7f\x32', 'val': 715685682} - tx_bytes = {'buf': b'\x77\xe1\xd5\x63\x18\xae\x63\xaa', - 'val': 8638420181865882538} - tx_packets = {'buf': b'\x27\xa4\x41\xd7\xd4\x53\x9e\x42', - 'val': 2856480458895760962} - tx_errors = {'buf': b'\x57\x32\x08\x2f\x88\x32\x40\x6b', - 'val': 6283093430376743019} - - buf += port_no['buf'] \ - + zfill \ - + queue_id['buf'] \ - + tx_bytes['buf'] \ - + tx_packets['buf'] \ - + tx_errors['buf'] - - res = OFPQueueStatsReply.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(type_['val'], res.type) - eq_(flags['val'], res.flags) - - # body - body = res.body[0] - eq_(port_no['val'], body.port_no) - eq_(queue_id['val'], body.queue_id) - eq_(tx_bytes['val'], body.tx_bytes) - eq_(tx_packets['val'], body.tx_packets) - eq_(tx_errors['val'], body.tx_errors) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPVendorStatsReply(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPVendorStatsReply - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPVendorStatsReply(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} - msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} - # ofproto.OFP_STATS_MSG_SIZE + len(specific_data) - msg_len = {'buf': b'\x00\x18', - 'val': ofproto.OFP_STATS_MSG_SIZE + 12} - xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} - - buf = version['buf'] \ - + msg_type['buf'] \ - + msg_len['buf'] \ - + xid['buf'] - - # OFP_STATS_MSG_PACK_STR - # '!HH'...type_, flags - type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPST_VENDOR} - flags = {'buf': b'\x30\xd9', 'val': 12505} - - buf += type_['buf'] \ - + flags['buf'] - - # stats_type_cls = OFPVendorStats - specific_data = b'specific_data' - - buf += specific_data - - res = OFPVendorStatsReply.parser(object, - version['val'], - msg_type['val'], - msg_len['val'], - xid['val'], - buf) - - eq_(version['val'], res.version) - eq_(msg_type['val'], res.msg_type) - eq_(msg_len['val'], res.msg_len) - eq_(xid['val'], res.xid) - eq_(type_['val'], res.type) - eq_(flags['val'], res.flags) - - # body - body = res.body[0] - eq_(specific_data, body) - - def test_serialize(self): - # Not used. - pass - - -class TestOFPFeaturesRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPFeaturesRequest - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPFeaturesRequest(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_FEATURES_REQUEST, self.c.msg_type) - eq_(0, self.c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_FEATURES_REQUEST, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - - -class TestOFPGetConfigRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPGetConfigRequest - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPGetConfigRequest(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_GET_CONFIG_REQUEST, self.c.msg_type) - eq_(0, self.c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_GET_CONFIG_REQUEST, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - - -class TestOFPSetConfig(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPSetConfig - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - # OFP_SWITCH_CONFIG_PACK_STR - # '!HH'...flags, miss_send_len - flags = {'buf': b'\xa0\xe2', 'val': 41186} - miss_send_len = {'buf': b'\x36\x0e', 'val': 13838} - - c = OFPSetConfig(Datapath, - flags['val'], - miss_send_len['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.flags['val'], self.c.flags) - eq_(self.miss_send_len['val'], self.c.miss_send_len) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_SET_CONFIG, self.c.msg_type) - eq_(0, self.c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_SWITCH_CONFIG_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_SET_CONFIG, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - eq_(self.flags['val'], res[4]) - eq_(self.miss_send_len['val'], res[5]) - - -class TestOFPPacketOut(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPPacketOut - """ - - port = 0x2ae0 - actions = [OFPActionOutput(port, max_len=0)] - - def setUp(self): - pass - - def tearDown(self): - pass - - def _get_obj(self, buffer_id, in_port, data=None): - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPPacketOut(Datapath, - buffer_id, - in_port, - self.actions, - data) - return c - - def test_init(self): - buffer_id = 0xffffffff - in_port = 0x40455 - data = 'Message' - - c = self._get_obj(buffer_id, in_port, data) - - eq_(buffer_id, c.buffer_id) - eq_(in_port, c.in_port) - eq_(data, c.data) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - buffer_id = 0xffffffff - in_port = 0x9e07 - data = b'Message' - - c = self._get_obj(buffer_id, in_port, data) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_PACKET_OUT, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_PACKET_OUT_PACK_STR.replace('!', '') \ - + ofproto.OFP_ACTION_OUTPUT_PACK_STR.replace('!', '') \ - + str(len(data)) + 's' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - # OFP_HEADER_PACK_STR - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_PACKET_OUT, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, res[3]) - - # OFP_PACKET_OUT_PACK_STR - eq_(buffer_id, res[4]) - eq_(in_port, res[5]) - eq_(ofproto.OFP_ACTION_OUTPUT_SIZE, res[6]) - - # OFP_ACTION_OUTPUT_PACK_STR - eq_(ofproto.OFPAT_OUTPUT, res[7]) - eq_(ofproto.OFP_ACTION_OUTPUT_SIZE, res[8]) - eq_(self.port, res[9]) - eq_(0, res[10]) - - # data - eq_(data, res[11]) - - @raises(AssertionError) - def test_serialize_check_buffer_id(self): - buffer_id = 0xffffff00 - in_port = 0xaa92 - data = 'Message' - - c = self._get_obj(buffer_id, in_port, data) - c.serialize() - - -class TestOFPFlowMod(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPFlowMod - """ - - # OFP_FLOW_MOD_PACK_STR0 - # '!QHHHHIHH'...cookie, command, idle_timeout, hard_timeout, - # priority, buffer_id, out_port, flags - cookie = {'buf': b'\x1d\x86\xce\x6e\x8d\xc0\xbe\xa8', - 'val': 2127614848199081640} - command = {'buf': b'\xe1\x55', 'val': 57685} - idle_timeout = {'buf': b'\xf3\x6d', 'val': 62317} - hard_timeout = {'buf': b'\x1c\xc5', 'val': 7365} - priority = {'buf': b'\x9c\xe3', 'val': 40163} - buffer_id = {'buf': b'\xf0\xa1\x80\x33', 'val': 4037115955} - out_port = {'buf': b'\xfe\x0d', 'val': 65037} - flags = {'buf': b'\x00\x87', 'val': 135} - - # OFP_MATCH_PACK_STR - # '!IH6s6sHBxHBB2xIIHH'...wildcards, in_port, dl_src, dl_dst, dl_vlan, - # dl_vlan_pcp, dl_type, nw_tos, nw_proto, - # nw_src, nw_dst, tp_src, tp_dst - wildcards = {'buf': b'\xd2\x71\x25\x23', 'val': 3530630435} - in_port = {'buf': b'\x37\x8b', 'val': 14219} - dl_src = b'\xdf\xcf\xe1\x5d\xcf\xc0' - dl_dst = b'\x76\xb3\xfb\xc6\x21\x2f' - dl_vlan = {'buf': b'\xc1\xf9', 'val': 49657} - dl_vlan_pcp = {'buf': b'\x79', 'val': 121} - zfill0 = b'\x00' - dl_type = {'buf': b'\xa6\x9e', 'val': 42654} - nw_tos = {'buf': b'\xde', 'val': 222} - nw_proto = {'buf': b'\xe5', 'val': 229} - zfil11 = b'\x00' * 2 - nw_src = {'buf': b'\x1b\x6d\x8d\x4b', 'val': 460164427} - nw_dst = {'buf': b'\xab\x25\xe1\x20', 'val': 2871386400} - tp_src = {'buf': b'\xd5\xc3', 'val': 54723} - tp_dst = {'buf': b'\x78\xb9', 'val': 30905} - - match = OFPMatch(wildcards['val'], - in_port['val'], - dl_src, - dl_dst, - dl_vlan['val'], - dl_vlan_pcp['val'], - dl_type['val'], - nw_tos['val'], - nw_proto['val'], - nw_src['val'], - nw_dst['val'], - tp_src['val'], - tp_dst['val']) - - port = 0x2ae0 - actions = [OFPActionOutput(port, max_len=1000)] - - def setUp(self): - pass - - def tearDown(self): - pass - - def _get_obj(self, actions=None): - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPFlowMod(Datapath, - self.match, - self.cookie['val'], - self.command['val'], - self.idle_timeout['val'], - self.hard_timeout['val'], - self.priority['val'], - self.buffer_id['val'], - self.out_port['val'], - self.flags['val'], - actions) - - return c - - def test_init(self): - c = self._get_obj() - - eq_(self.cookie['val'], c.cookie) - eq_(self.command['val'], c.command) - eq_(self.idle_timeout['val'], c.idle_timeout) - eq_(self.hard_timeout['val'], c.hard_timeout) - eq_(self.priority['val'], c.priority) - eq_(self.buffer_id['val'], c.buffer_id) - eq_(self.out_port['val'], c.out_port) - eq_(self.flags['val'], c.flags) - - def test_init_actions(self): - c = self._get_obj(self.actions) - action = c.actions[0] - - eq_(self.port, action.port) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - c = self._get_obj(self.actions) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_FLOW_MOD, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_MATCH_PACK_STR.replace('!', '') \ - + ofproto.OFP_FLOW_MOD_PACK_STR0.replace('!', '') \ - + ofproto.OFP_ACTION_OUTPUT_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - # OFP_HEADER_PACK_STR - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_FLOW_MOD, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, res[3]) - - # OFP_MATCH_PACK_STR - eq_(self.wildcards['val'], res[4]) - eq_(self.in_port['val'], res[5]) - eq_(self.dl_src, res[6]) - eq_(self.dl_dst, res[7]) - eq_(self.dl_vlan['val'], res[8]) - eq_(self.dl_vlan_pcp['val'], res[9]) - eq_(self.dl_type['val'], res[10]) - eq_(self.nw_tos['val'], res[11]) - eq_(self.nw_proto['val'], res[12]) - eq_(self.nw_src['val'], res[13]) - eq_(self.nw_dst['val'], res[14]) - eq_(self.tp_src['val'], res[15]) - eq_(self.tp_dst['val'], res[16]) - - # OFP_FLOW_MOD_PACK_STR0 - eq_(self.cookie['val'], res[17]) - eq_(self.command['val'], res[18]) - eq_(self.idle_timeout['val'], res[19]) - eq_(self.hard_timeout['val'], res[20]) - eq_(self.priority['val'], res[21]) - eq_(self.buffer_id['val'], res[22]) - eq_(self.out_port['val'], res[23]) - eq_(self.flags['val'], res[24]) - - # OFP_ACTION_OUTPUT_PACK_STR - eq_(ofproto.OFPAT_OUTPUT, res[25]) - eq_(ofproto.OFP_ACTION_OUTPUT_SIZE, res[26]) - eq_(self.port, res[27]) - eq_(1000, res[28]) - - -class TestOFPBarrierRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPBarrierRequest - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - c = OFPBarrierRequest(Datapath) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - pass - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_BARRIER_REQUEST, self.c.msg_type) - eq_(0, self.c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_BARRIER_REQUEST, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - - -class TestOFPQueueGetConfigRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPQueueGetConfigRequest - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - # OFP_QUEUE_GET_CONFIG_REQUEST_PACK_STR - # '!H2x'...port, zfill - port = {'buf': b'\xa0\xe2', 'val': 41186} - zfill = b'\x00' * 2 - - c = OFPQueueGetConfigRequest(Datapath, - port['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.port['val'], self.c.port) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_QUEUE_GET_CONFIG_REQUEST, self.c.msg_type) - eq_(0, self.c.xid) - - a = ofproto.OFP_HEADER_PACK_STR.replace('!', '') - b = ofproto.OFP_QUEUE_GET_CONFIG_REQUEST_PACK_STR.replace('!', '') - fmt = '!' + a + b - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_QUEUE_GET_CONFIG_REQUEST, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - eq_(self.port['val'], res[4]) - - -class TestOFPDescStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPDescStatsRequest - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - flags = {'buf': b'\x00\x00', 'val': 0} - - c = OFPDescStatsRequest(Datapath, flags['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(ofproto.OFPST_DESC, self.c.type) - eq_(self.flags['val'], self.c.flags) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) - eq_(0, self.c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - - # OFP_HEADER_PACK_STR - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_STATS_REQUEST, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - - # OFP_STATS_MSG_PACK_STR - eq_(ofproto.OFPST_DESC, res[4]) - eq_(self.flags['val'], res[5]) - - -class TestOFPFlowStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPFlowStatsRequest - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - flags = {'buf': b'\x00\x00', 'val': 0} - - # OFP_MATCH_PACK_STR - # '!IH6s6sHBxHBB2xIIHH'...wildcards, in_port, dl_src, dl_dst, dl_vlan, - # dl_vlan_pcp, dl_type, nw_tos, nw_proto, - # nw_src, nw_dst, tp_src, tp_dst - wildcards = {'buf': b'\xd2\x71\x25\x23', 'val': 3530630435} - in_port = {'buf': b'\x37\x8b', 'val': 14219} - dl_src = b'\x58\xd0\x8a\x69\xa4\xfc' - dl_dst = b'\xb6\xe2\xef\xb1\xa6\x2d' - dl_vlan = {'buf': b'\xc1\xf9', 'val': 49657} - dl_vlan_pcp = {'buf': b'\x79', 'val': 121} - zfill0 = b'\x00' - dl_type = {'buf': b'\xa6\x9e', 'val': 42654} - nw_tos = {'buf': b'\xde', 'val': 222} - nw_proto = {'buf': b'\xe5', 'val': 229} - zfil11 = b'\x00' * 2 - nw_src = {'buf': b'\x1b\x6d\x8d\x4b', 'val': 460164427} - nw_dst = {'buf': b'\xab\x25\xe1\x20', 'val': 2871386400} - tp_src = {'buf': b'\xd5\xc3', 'val': 54723} - tp_dst = {'buf': b'\x78\xb9', 'val': 30905} - - match = OFPMatch(wildcards['val'], - in_port['val'], - dl_src, - dl_dst, - dl_vlan['val'], - dl_vlan_pcp['val'], - dl_type['val'], - nw_tos['val'], - nw_proto['val'], - nw_src['val'], - nw_dst['val'], - tp_src['val'], - tp_dst['val']) - - # OFP_FLOW_STATS_REQUEST_ID_PORT_STR - # '!BxH'...table_id, zfill, out_port - table_id = {'buf': b'\xd1', 'val': 209} - zfill = b'\x00' * 1 - out_port = {'buf': b'\xe4\x9a', 'val': 58522} - - c = OFPFlowStatsRequest(Datapath, - flags['val'], - match, - table_id['val'], - out_port['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(ofproto.OFPST_FLOW, self.c.type) - eq_(self.flags['val'], self.c.flags) - eq_(self.table_id['val'], self.c.table_id) - eq_(self.out_port['val'], self.c.out_port) - - # match - match = self.c.match - eq_(self.match.__hash__(), match.__hash__()) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) - eq_(0, self.c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') \ - + ofproto.OFP_MATCH_PACK_STR.replace('!', '') \ - + ofproto.OFP_FLOW_STATS_REQUEST_ID_PORT_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - - # OFP_HEADER_PACK_STR - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_STATS_REQUEST, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - - # OFP_STATS_MSG_PACK_STR - eq_(ofproto.OFPST_FLOW, res[4]) - eq_(self.flags['val'], res[5]) - - # OFP_MATCH_PACK_STR - eq_(self.wildcards['val'], res[6]) - eq_(self.in_port['val'], res[7]) - eq_(self.dl_src, res[8]) - eq_(self.dl_dst, res[9]) - eq_(self.dl_vlan['val'], res[10]) - eq_(self.dl_vlan_pcp['val'], res[11]) - eq_(self.dl_type['val'], res[12]) - eq_(self.nw_tos['val'], res[13]) - eq_(self.nw_proto['val'], res[14]) - eq_(self.nw_src['val'], res[15]) - eq_(self.nw_dst['val'], res[16]) - eq_(self.tp_src['val'], res[17]) - eq_(self.tp_dst['val'], res[18]) - - # OFP_FLOW_STATS_REQUEST_ID_PORT_STR - eq_(self.table_id['val'], res[19]) - eq_(self.out_port['val'], res[20]) - - -class TestOFPAggregateStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPAggregateStatsRequest - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - flags = {'buf': b'\x00\x00', 'val': 0} - - # OFP_MATCH_PACK_STR - # '!IH6s6sHBxHBB2xIIHH'...wildcards, in_port, dl_src, dl_dst, dl_vlan, - # dl_vlan_pcp, dl_type, nw_tos, nw_proto, - # nw_src, nw_dst, tp_src, tp_dst - wildcards = {'buf': b'\xea\x66\x4a\xd4', 'val': 3932572372} - in_port = {'buf': b'\x64\xac', 'val': 25772} - dl_src = b'\x90\x13\x60\x5e\x20\x4d' - dl_dst = b'\xb5\x5d\x14\x5e\xb9\x22' - dl_vlan = {'buf': b'\x8b\xeb', 'val': 35819} - dl_vlan_pcp = {'buf': b'\xe8', 'val': 232} - zfill0 = b'\x00' - dl_type = {'buf': b'\62\xc9', 'val': 25289} - nw_tos = {'buf': b'\xb5', 'val': 181} - nw_proto = {'buf': b'\xc4', 'val': 196} - zfil11 = b'\x00' * 2 - nw_src = {'buf': b'\xb7\xd1\xb7\xef', 'val': 3083974639} - nw_dst = {'buf': b'\x7c\xc6\x18\x15', 'val': 2093357077} - tp_src = {'buf': b'\x26\x9a', 'val': 9882} - tp_dst = {'buf': b'\x7a\x89', 'val': 31369} - - match = OFPMatch(wildcards['val'], - in_port['val'], - dl_src, - dl_dst, - dl_vlan['val'], - dl_vlan_pcp['val'], - dl_type['val'], - nw_tos['val'], - nw_proto['val'], - nw_src['val'], - nw_dst['val'], - tp_src['val'], - tp_dst['val']) - - # OFP_FLOW_STATS_REQUEST_ID_PORT_STR - # '!BxH'...table_id, zfill, out_port - table_id = {'buf': b'\xd1', 'val': 209} - zfill = b'\x00' * 1 - out_port = {'buf': b'\xb5\xe8', 'val': 46568} - - c = OFPAggregateStatsRequest(Datapath, - flags['val'], - match, - table_id['val'], - out_port['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(ofproto.OFPST_AGGREGATE, self.c.type) - eq_(self.flags['val'], self.c.flags) - eq_(self.table_id['val'], self.c.table_id) - eq_(self.out_port['val'], self.c.out_port) - - # match - match = self.c.match - eq_(self.match.__hash__(), match.__hash__()) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) - eq_(0, self.c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') \ - + ofproto.OFP_MATCH_PACK_STR.replace('!', '') \ - + ofproto.OFP_FLOW_STATS_REQUEST_ID_PORT_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - - # OFP_HEADER_PACK_STR - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_STATS_REQUEST, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - - # OFP_STATS_MSG_PACK_STR - eq_(ofproto.OFPST_AGGREGATE, res[4]) - eq_(self.flags['val'], res[5]) - - # OFP_MATCH_PACK_STR - eq_(self.wildcards['val'], res[6]) - eq_(self.in_port['val'], res[7]) - eq_(self.dl_src, res[8]) - eq_(self.dl_dst, res[9]) - eq_(self.dl_vlan['val'], res[10]) - eq_(self.dl_vlan_pcp['val'], res[11]) - eq_(self.dl_type['val'], res[12]) - eq_(self.nw_tos['val'], res[13]) - eq_(self.nw_proto['val'], res[14]) - eq_(self.nw_src['val'], res[15]) - eq_(self.nw_dst['val'], res[16]) - eq_(self.tp_src['val'], res[17]) - eq_(self.tp_dst['val'], res[18]) - - # OFP_FLOW_STATS_REQUEST_ID_PORT_STR - eq_(self.table_id['val'], res[19]) - eq_(self.out_port['val'], res[20]) - - -class TestOFPTableStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPTableStatsRequest - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - flags = {'buf': b'\x00\x00', 'val': 0} - - c = OFPTableStatsRequest(Datapath, flags['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(ofproto.OFPST_TABLE, self.c.type) - eq_(self.flags['val'], self.c.flags) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) - eq_(0, self.c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - - # OFP_HEADER_PACK_STR - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_STATS_REQUEST, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - - # OFP_STATS_MSG_PACK_STR - eq_(ofproto.OFPST_TABLE, res[4]) - eq_(self.flags['val'], res[5]) - - -class TestOFPPortStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPPortStatsRequest - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - flags = {'buf': b'\x00\x00', 'val': 0} - - # OFP_PORT_STATS_REQUEST_PACK_STR - # '!H6x'...port_no, zfill - port_no = {'buf': b'\x6d\x27', 'val': 27943} - - c = OFPPortStatsRequest(Datapath, - flags['val'], - port_no['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(ofproto.OFPST_PORT, self.c.type) - eq_(self.flags['val'], self.c.flags) - eq_(self.port_no['val'], self.c.port_no) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) - eq_(0, self.c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') \ - + ofproto.OFP_PORT_STATS_REQUEST_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - - # OFP_HEADER_PACK_STR - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_STATS_REQUEST, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - - # OFP_STATS_MSG_PACK_STR - eq_(ofproto.OFPST_PORT, res[4]) - eq_(self.flags['val'], res[5]) - - # OFP_PORT_STATS_REQUEST_PACK_STR - eq_(self.port_no['val'], res[6]) - - -class TestOFPQueueStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPQueueStatsRequest - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - flags = {'buf': b'\x00\x00', 'val': 0} - - # OFP_QUEUE_STATS_REQUEST_PACK_STR - # '!HxxI'...port_no, zfill, zfill, queue_id - port_no = {'buf': b'\x0c\x2d', 'val': 3117} - queue_id = {'buf': b'\x1b\xe6\xba\x36', 'val': 468105782} - - c = OFPQueueStatsRequest(Datapath, - flags['val'], - port_no['val'], - queue_id['val']) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(ofproto.OFPST_QUEUE, self.c.type) - eq_(self.flags['val'], self.c.flags) - eq_(self.port_no['val'], self.c.port_no) - eq_(self.queue_id['val'], self.c.queue_id) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) - eq_(0, self.c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') \ - + ofproto.OFP_QUEUE_STATS_REQUEST_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - - # OFP_HEADER_PACK_STR - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_STATS_REQUEST, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - - # OFP_STATS_MSG_PACK_STR - eq_(ofproto.OFPST_QUEUE, res[4]) - eq_(self.flags['val'], res[5]) - - # OFP_QUEUE_STATS_REQUEST_PACK_STR - eq_(self.port_no['val'], res[6]) - eq_(self.queue_id['val'], res[7]) - - -class TestOFPVendorStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_0_parser.OFPVendorStatsRequest - """ - - class Datapath(object): - ofproto = ofproto # copy to class attribute - ofproto_parser = ofproto_v1_0_parser - - flags = {'buf': b'\x00\x00', 'val': 0} - - # OFP_VENDOR_STATS_MSG_PACK_STR - # '!I'...vendor - vendor = {'buf': b'\xff\xff\xff\xff', 'val': ofproto.OFPAT_VENDOR} - - specific_data = b'specific_data' - - c = OFPVendorStatsRequest(Datapath, - flags['val'], - vendor['val'], - specific_data) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(ofproto.OFPST_VENDOR, self.c.type) - eq_(self.flags['val'], self.c.flags) - eq_(self.vendor['val'], self.c.vendor) - eq_(self.specific_data, self.c.specific_data) - - def test_parser(self): - # Not used. - pass - - def test_serialize(self): - self.c.serialize() - - eq_(ofproto.OFP_VERSION, self.c.version) - eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) - eq_(0, self.c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') \ - + ofproto.OFP_VENDOR_STATS_MSG_PACK_STR.replace('!', '') \ - + str(len(self.specific_data)) + 's' - - res = struct.unpack(fmt, six.binary_type(self.c.buf)) - - # OFP_HEADER_PACK_STR - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_STATS_REQUEST, res[1]) - eq_(len(self.c.buf), res[2]) - eq_(0, res[3]) - - # OFP_STATS_MSG_PACK_STR - eq_(ofproto.OFPST_VENDOR, res[4]) - eq_(self.flags['val'], res[5]) - - # OFP_VENDOR_STATS_MSG_PACK_STR - eq_(self.vendor['val'], res[6]) - - # specific_data - eq_(self.specific_data, res[7]) diff --git a/ryu/tests/unit/ofproto/test_parser_v12.py b/ryu/tests/unit/ofproto/test_parser_v12.py deleted file mode 100644 index cf04803d..00000000 --- a/ryu/tests/unit/ofproto/test_parser_v12.py +++ /dev/null @@ -1,7560 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import six -import socket -from struct import * -from nose.tools import * -from ryu.ofproto.ofproto_v1_2_parser import * -from ryu.ofproto import ofproto_v1_2_parser -from ryu.ofproto import ofproto_v1_2 -from ryu.ofproto import ofproto_protocol -from ryu.ofproto import ether -from ryu.ofproto.ofproto_parser import MsgBase -from ryu import utils -from ryu.lib import addrconv -from ryu.lib import pack_utils - -LOG = logging.getLogger('test_ofproto_v12') - - -_Datapath = ofproto_protocol.ProtocolDesc(version=ofproto_v1_2.OFP_VERSION) - - -class TestRegisterParser(unittest.TestCase): - """ Test case for ofproto_v1_2_parser._register_parser - """ - - class _OFPDummy(MsgBase): - def __init__(self, datapath): - self.dummy = 'dummy' - - def parser(self): - return self.dummy - - def test_cls_msg_type(self): - msg_type = 0xff - cls = self._OFPDummy(_Datapath) - cls.cls_msg_type = msg_type - - res = ofproto_v1_2_parser._register_parser(cls) - res_parser = ofproto_v1_2_parser._MSG_PARSERS[msg_type] - del ofproto_v1_2_parser._MSG_PARSERS[msg_type] - - eq_(res.cls_msg_type, msg_type) - ok_(res.dummy) - eq_(res_parser(), 'dummy') - - @raises(AssertionError) - def test_cls_msg_type_none(self): - cls = OFPHello(_Datapath) - cls.cls_msg_type = None - ofproto_v1_2_parser._register_parser(cls) - - @raises(AssertionError) - def test_cls_msg_type_already_registed(self): - cls = OFPHello(_Datapath) - ofproto_v1_2_parser._register_parser(cls) - - -class TestMsgParser(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.msg_parser - """ - - def _test_msg_parser(self, xid, msg_len): - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_HELLO - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - c = msg_parser(_Datapath, version, msg_type, msg_len, xid, buf) - - eq_(version, c.version) - eq_(msg_type, c.msg_type) - eq_(msg_len, c.msg_len) - eq_(xid, c.xid) - - # buf - fmt = ofproto.OFP_HEADER_PACK_STR - res = struct.unpack(fmt, c.buf) - - eq_(version, res[0]) - eq_(msg_type, res[1]) - eq_(msg_len, res[2]) - eq_(xid, res[3]) - - def test_parser_mid(self): - xid = 2147483648 - msg_len = 8 - self._test_msg_parser(xid, msg_len) - - def test_parser_max(self): - xid = 4294967295 - msg_len = 65535 - self._test_msg_parser(xid, msg_len) - - def test_parser_min(self): - xid = 0 - msg_len = 0 - self._test_msg_parser(xid, msg_len) - - -class TestOFPHello(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPHello - """ - - def _test_parser(self, xid): - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_HELLO - msg_len = ofproto.OFP_HEADER_SIZE - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - res = OFPHello.parser(object, version, msg_type, msg_len, xid, - bytearray(buf)) - - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(six.binary_type(buf), six.binary_type(res.buf)) - - def test_parser_xid_min(self): - xid = 0 - self._test_parser(xid) - - def test_parser_xid_mid(self): - xid = 2183948390 - self._test_parser(xid) - - def test_parser_xid_max(self): - xid = 4294967295 - self._test_parser(xid) - - def test_serialize(self): - c = OFPHello(_Datapath) - c.serialize() - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_HELLO, c.msg_type) - eq_(0, c.xid) - - -class TestOFPErrorMsg(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPErrorMsg - """ - - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_ERROR - msg_len = ofproto.OFP_ERROR_MSG_SIZE - xid = 2495926989 - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - def test_init(self): - c = OFPErrorMsg(_Datapath) - eq_(c.code, None) - eq_(c.type, None) - eq_(c.data, None) - - def _test_parser(self, type_, code, data=None): - - # OFP_ERROR_MSG_PACK_STR = '!HH' - fmt = ofproto.OFP_ERROR_MSG_PACK_STR - buf = self.buf + pack(fmt, type_, code) - - if data is not None: - buf += data - - res = OFPErrorMsg.parser(object, self.version, self.msg_type, - self.msg_len, self.xid, buf) - - eq_(res.version, self.version) - eq_(res.msg_type, self.msg_type) - eq_(res.msg_len, self.msg_len) - eq_(res.xid, self.xid) - eq_(res.type, type_) - eq_(res.code, code) - - if data is not None: - eq_(res.data, data) - - def test_parser_mid(self): - type_ = 32768 - code = 32768 - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_max(self): - type_ = 65534 - code = 65535 - data = b'Error Message.'.ljust(65523) - self._test_parser(type_, code, data) - - def test_parser_min(self): - type_ = 0 - code = 0 - data = None - self._test_parser(type_, code, data) - - def test_parser_p0_1(self): - type_ = ofproto.OFPET_HELLO_FAILED - code = ofproto.OFPHFC_EPERM - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_0(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_BAD_VERSION - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_1(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_BAD_TYPE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_2(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_BAD_STAT - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_3(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_BAD_EXPERIMENTER - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_4(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_BAD_EXP_TYPE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_5(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_EPERM - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_6(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_BAD_LEN - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_7(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_BUFFER_EMPTY - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_8(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_BUFFER_UNKNOWN - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_9(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_BAD_TABLE_ID - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_10(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_IS_SLAVE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_11(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_BAD_PORT - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p1_12(self): - type_ = ofproto.OFPET_BAD_REQUEST - code = ofproto.OFPBRC_BAD_PACKET - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_0(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_TYPE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_1(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_LEN - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_2(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_EXPERIMENTER - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_3(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_EXP_TYPE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_4(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_OUT_PORT - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_5(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_ARGUMENT - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_6(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_EPERM - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_7(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_TOO_MANY - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_8(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_QUEUE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_9(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_OUT_GROUP - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_10(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_MATCH_INCONSISTENT - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_11(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_UNSUPPORTED_ORDER - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_12(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_TAG - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_13(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_SET_TYPE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_14(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_SET_LEN - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p2_15(self): - type_ = ofproto.OFPET_BAD_ACTION - code = ofproto.OFPBAC_BAD_SET_ARGUMENT - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p3_0(self): - type_ = ofproto.OFPET_BAD_INSTRUCTION - code = ofproto.OFPBIC_UNKNOWN_INST - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p3_1(self): - type_ = ofproto.OFPET_BAD_INSTRUCTION - code = ofproto.OFPBIC_UNSUP_INST - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p3_2(self): - type_ = ofproto.OFPET_BAD_INSTRUCTION - code = ofproto.OFPBIC_BAD_TABLE_ID - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p3_3(self): - type_ = ofproto.OFPET_BAD_INSTRUCTION - code = ofproto.OFPBIC_UNSUP_METADATA - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p3_4(self): - type_ = ofproto.OFPET_BAD_INSTRUCTION - code = ofproto.OFPBIC_UNSUP_METADATA_MASK - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p3_5(self): - type_ = ofproto.OFPET_BAD_INSTRUCTION - code = ofproto.OFPBIC_BAD_EXPERIMENTER - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p3_6(self): - type_ = ofproto.OFPET_BAD_INSTRUCTION - code = ofproto.OFPBIC_BAD_EXP_TYPE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p3_7(self): - type_ = ofproto.OFPET_BAD_INSTRUCTION - code = ofproto.OFPBIC_BAD_LEN - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p3_8(self): - type_ = ofproto.OFPET_BAD_INSTRUCTION - code = ofproto.OFPBIC_EPERM - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_0(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_BAD_TYPE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_1(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_BAD_LEN - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_2(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_BAD_TAG - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_3(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_BAD_DL_ADDR_MASK - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_4(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_BAD_NW_ADDR_MASK - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_5(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_BAD_WILDCARDS - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_6(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_BAD_FIELD - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_7(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_BAD_VALUE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_8(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_BAD_MASK - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_9(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_BAD_PREREQ - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_10(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_DUP_FIELD - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p4_11(self): - type_ = ofproto.OFPET_BAD_MATCH - code = ofproto.OFPBMC_EPERM - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p5_0(self): - type_ = ofproto.OFPET_FLOW_MOD_FAILED - code = ofproto.OFPFMFC_UNKNOWN - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p5_1(self): - type_ = ofproto.OFPET_FLOW_MOD_FAILED - code = ofproto.OFPFMFC_TABLE_FULL - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p5_2(self): - type_ = ofproto.OFPET_FLOW_MOD_FAILED - code = ofproto.OFPFMFC_BAD_TABLE_ID - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p5_3(self): - type_ = ofproto.OFPET_FLOW_MOD_FAILED - code = ofproto.OFPFMFC_OVERLAP - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p5_4(self): - type_ = ofproto.OFPET_FLOW_MOD_FAILED - code = ofproto.OFPFMFC_EPERM - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p5_5(self): - type_ = ofproto.OFPET_FLOW_MOD_FAILED - code = ofproto.OFPFMFC_BAD_TIMEOUT - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p5_6(self): - type_ = ofproto.OFPET_FLOW_MOD_FAILED - code = ofproto.OFPFMFC_BAD_COMMAND - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p5_7(self): - type_ = ofproto.OFPET_FLOW_MOD_FAILED - code = ofproto.OFPFMFC_BAD_FLAGS - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_0(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_GROUP_EXISTS - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_1(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_INVALID_GROUP - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_2(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_WEIGHT_UNSUPPORTED - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_3(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_OUT_OF_GROUPS - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_4(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_OUT_OF_BUCKETS - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_5(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_CHAINING_UNSUPPORTED - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_6(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_WATCH_UNSUPPORTED - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_7(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_LOOP - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_8(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_UNKNOWN_GROUP - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_9(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_CHAINED_GROUP - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_10(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_BAD_TYPE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_11(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_BAD_COMMAND - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_12(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_BAD_BUCKET - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_13(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_BAD_WATCH - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p6_14(self): - type_ = ofproto.OFPET_GROUP_MOD_FAILED - code = ofproto.OFPGMFC_EPERM - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p7_0(self): - type_ = ofproto.OFPET_PORT_MOD_FAILED - code = ofproto.OFPPMFC_BAD_PORT - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p7_1(self): - type_ = ofproto.OFPET_PORT_MOD_FAILED - code = ofproto.OFPPMFC_BAD_HW_ADDR - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p7_2(self): - type_ = ofproto.OFPET_PORT_MOD_FAILED - code = ofproto.OFPPMFC_BAD_CONFIG - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p7_3(self): - type_ = ofproto.OFPET_PORT_MOD_FAILED - code = ofproto.OFPPMFC_BAD_ADVERTISE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p7_4(self): - type_ = ofproto.OFPET_PORT_MOD_FAILED - code = ofproto.OFPPMFC_EPERM - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p8_0(self): - type_ = ofproto.OFPET_TABLE_MOD_FAILED - code = ofproto.OFPTMFC_BAD_TABLE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p8_1(self): - type_ = ofproto.OFPET_TABLE_MOD_FAILED - code = ofproto.OFPTMFC_BAD_CONFIG - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p8_2(self): - type_ = ofproto.OFPET_TABLE_MOD_FAILED - code = ofproto.OFPTMFC_EPERM - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p9_0(self): - type_ = ofproto.OFPET_QUEUE_OP_FAILED - code = ofproto.OFPQOFC_BAD_PORT - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p9_1(self): - type_ = ofproto.OFPET_QUEUE_OP_FAILED - code = ofproto.OFPQOFC_BAD_QUEUE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p9_2(self): - type_ = ofproto.OFPET_QUEUE_OP_FAILED - code = ofproto.OFPQOFC_EPERM - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p10_0(self): - type_ = ofproto.OFPET_SWITCH_CONFIG_FAILED - code = ofproto.OFPSCFC_BAD_FLAGS - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p10_1(self): - type_ = ofproto.OFPET_SWITCH_CONFIG_FAILED - code = ofproto.OFPSCFC_BAD_LEN - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p10_2(self): - type_ = ofproto.OFPET_SWITCH_CONFIG_FAILED - code = ofproto.OFPSCFC_EPERM - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p11_0(self): - type_ = ofproto.OFPET_ROLE_REQUEST_FAILED - code = ofproto.OFPRRFC_STALE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p11_1(self): - type_ = ofproto.OFPET_ROLE_REQUEST_FAILED - code = ofproto.OFPRRFC_UNSUP - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_p11_2(self): - type_ = ofproto.OFPET_ROLE_REQUEST_FAILED - code = ofproto.OFPRRFC_BAD_ROLE - data = b'Error Message.' - self._test_parser(type_, code, data) - - def test_parser_experimenter(self): - type_ = 0xffff - exp_type = 1 - experimenter = 1 - data = b'Error Experimenter Message.' - - # OFP_ERROR_EXPERIMENTER_MSG_PACK_STR = '!HHI' - fmt = ofproto.OFP_ERROR_EXPERIMENTER_MSG_PACK_STR - buf = self.buf + pack(fmt, type_, exp_type, experimenter) \ - + data - - res = OFPErrorMsg.parser(object, self.version, self.msg_type, - self.msg_len, self.xid, buf) - - eq_(res.version, self.version) - eq_(res.msg_type, self.msg_type) - eq_(res.msg_len, self.msg_len) - eq_(res.xid, self.xid) - eq_(res.type, type_) - eq_(res.exp_type, exp_type) - eq_(res.experimenter, experimenter) - eq_(res.data, data) - - def _test_serialize(self, type_, code, data): - # OFP_ERROR_MSG_PACK_STR = '!HH' - fmt = ofproto.OFP_ERROR_MSG_PACK_STR - buf = self.buf + pack(fmt, type_, code) + data - - # initialization - c = OFPErrorMsg(_Datapath) - c.type = type_ - c.code = code - c.data = data - - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_ERROR, c.msg_type) - eq_(0, c.xid) - eq_(len(buf), c.msg_len) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_ERROR_MSG_PACK_STR.replace('!', '') \ - + str(len(c.data)) + 's' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_ERROR) - eq_(res[2], len(buf)) - eq_(res[3], 0) - eq_(res[4], type_) - eq_(res[5], code) - eq_(res[6], data) - - def test_serialize_mid(self): - type_ = 32768 - code = 32768 - data = b'Error Message.' - self._test_serialize(type_, code, data) - - def test_serialize_max(self): - type_ = 65535 - code = 65535 - data = b'Error Message.'.ljust(65523) - self._test_serialize(type_, code, data) - - def test_serialize_min_except_data(self): - type_ = ofproto.OFPET_HELLO_FAILED - code = ofproto.OFPHFC_INCOMPATIBLE - data = b'Error Message.' - self._test_serialize(type_, code, data) - - @raises(AssertionError) - def test_serialize_check_data(self): - c = OFPErrorMsg(_Datapath) - c.serialize() - - def _test_serialize_p(self, type_, code): - self._test_serialize(type_, code, b'Error Message.') - - def test_serialize_p0_1(self): - self._test_serialize_p(ofproto.OFPET_HELLO_FAILED, - ofproto.OFPHFC_EPERM) - - def test_serialize_p1_0(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_BAD_VERSION) - - def test_serialize_p1_1(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_BAD_TYPE) - - def test_serialize_p1_2(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_BAD_STAT) - - def test_serialize_p1_3(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_BAD_EXPERIMENTER) - - def test_serialize_p1_4(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_BAD_EXP_TYPE) - - def test_serialize_p1_5(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_EPERM) - - def test_serialize_p1_6(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_BAD_LEN) - - def test_serialize_p1_7(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_BUFFER_EMPTY) - - def test_serialize_p1_8(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_BUFFER_UNKNOWN) - - def test_serialize_p1_9(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_BAD_TABLE_ID) - - def test_serialize_p1_10(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_IS_SLAVE) - - def test_serialize_p1_11(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_BAD_PORT) - - def test_serialize_p1_12(self): - self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, - ofproto.OFPBRC_BAD_PACKET) - - def test_serialize_p2_0(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_TYPE) - - def test_serialize_p2_1(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_LEN) - - def test_serialize_p2_2(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_EXPERIMENTER) - - def test_serialize_p2_3(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_EXP_TYPE) - - def test_serialize_p2_4(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_OUT_PORT) - - def test_serialize_p2_5(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_ARGUMENT) - - def test_serialize_p2_6(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_EPERM) - - def test_serialize_p2_7(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_TOO_MANY) - - def test_serialize_p2_8(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_QUEUE) - - def test_serialize_p2_9(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_OUT_GROUP) - - def test_serialize_p2_10(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_MATCH_INCONSISTENT) - - def test_serialize_p2_11(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_UNSUPPORTED_ORDER) - - def test_serialize_p2_12(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_TAG) - - def test_serialize_p2_13(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_SET_TYPE) - - def test_serialize_p2_14(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_SET_LEN) - - def test_serialize_p2_15(self): - self._test_serialize_p(ofproto.OFPET_BAD_ACTION, - ofproto.OFPBAC_BAD_SET_ARGUMENT) - - def test_serialize_p3_0(self): - self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, - ofproto.OFPBIC_UNKNOWN_INST) - - def test_serialize_p3_1(self): - self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, - ofproto.OFPBIC_UNSUP_INST) - - def test_serialize_p3_2(self): - self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, - ofproto.OFPBIC_BAD_TABLE_ID) - - def test_serialize_p3_3(self): - self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, - ofproto.OFPBIC_UNSUP_METADATA) - - def test_serialize_p3_4(self): - self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, - ofproto.OFPBIC_UNSUP_METADATA_MASK) - - def test_serialize_p3_5(self): - self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, - ofproto.OFPBIC_BAD_EXPERIMENTER) - - def test_serialize_p3_6(self): - self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, - ofproto.OFPBIC_BAD_EXP_TYPE) - - def test_serialize_p3_7(self): - self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, - ofproto.OFPBIC_BAD_LEN) - - def test_serialize_p3_8(self): - self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, - ofproto.OFPBIC_EPERM) - - def test_serialize_p4_0(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_BAD_TYPE) - - def test_serialize_p4_1(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_BAD_LEN) - - def test_serialize_p4_2(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_BAD_TAG) - - def test_serialize_p4_3(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_BAD_DL_ADDR_MASK) - - def test_serialize_p4_4(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_BAD_NW_ADDR_MASK) - - def test_serialize_p4_5(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_BAD_WILDCARDS) - - def test_serialize_p4_6(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_BAD_FIELD) - - def test_serialize_p4_7(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_BAD_VALUE) - - def test_serialize_p4_8(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_BAD_MASK) - - def test_serialize_p4_9(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_BAD_PREREQ) - - def test_serialize_p4_10(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_DUP_FIELD) - - def test_serialize_p4_11(self): - self._test_serialize_p(ofproto.OFPET_BAD_MATCH, - ofproto.OFPBMC_EPERM) - - def test_serialize_p5_0(self): - self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, - ofproto.OFPFMFC_UNKNOWN) - - def test_serialize_p5_1(self): - self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, - ofproto.OFPFMFC_TABLE_FULL) - - def test_serialize_p5_2(self): - self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, - ofproto.OFPFMFC_BAD_TABLE_ID) - - def test_serialize_p5_3(self): - self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, - ofproto.OFPFMFC_OVERLAP) - - def test_serialize_p5_4(self): - self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, - ofproto.OFPFMFC_EPERM) - - def test_serialize_p5_5(self): - self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, - ofproto.OFPFMFC_BAD_TIMEOUT) - - def test_serialize_p5_6(self): - self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, - ofproto.OFPFMFC_BAD_COMMAND) - - def test_serialize_p5_7(self): - self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, - ofproto.OFPFMFC_BAD_FLAGS) - - def test_serialize_p6_0(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_GROUP_EXISTS) - - def test_serialize_p6_1(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_INVALID_GROUP) - - def test_serialize_p6_2(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_WEIGHT_UNSUPPORTED) - - def test_serialize_p6_3(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_OUT_OF_GROUPS) - - def test_serialize_p6_4(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_OUT_OF_BUCKETS) - - def test_serialize_p6_5(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_CHAINING_UNSUPPORTED) - - def test_serialize_p6_6(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_WATCH_UNSUPPORTED) - - def test_serialize_p6_7(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_LOOP) - - def test_serialize_p6_8(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_UNKNOWN_GROUP) - - def test_serialize_p6_9(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_CHAINED_GROUP) - - def test_serialize_p6_10(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_BAD_TYPE) - - def test_serialize_p6_11(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_BAD_COMMAND) - - def test_serialize_p6_12(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_BAD_BUCKET) - - def test_serialize_p6_13(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_BAD_WATCH) - - def test_serialize_p6_14(self): - self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, - ofproto.OFPGMFC_EPERM) - - def test_serialize_p7_0(self): - self._test_serialize_p(ofproto.OFPET_PORT_MOD_FAILED, - ofproto.OFPPMFC_BAD_PORT) - - def test_serialize_p7_1(self): - self._test_serialize_p(ofproto.OFPET_PORT_MOD_FAILED, - ofproto.OFPPMFC_BAD_HW_ADDR) - - def test_serialize_p7_2(self): - self._test_serialize_p(ofproto.OFPET_PORT_MOD_FAILED, - ofproto.OFPPMFC_BAD_CONFIG) - - def test_serialize_p7_3(self): - self._test_serialize_p(ofproto.OFPET_PORT_MOD_FAILED, - ofproto.OFPPMFC_BAD_ADVERTISE) - - def test_serialize_p7_4(self): - self._test_serialize_p(ofproto.OFPET_PORT_MOD_FAILED, - ofproto.OFPPMFC_EPERM) - - def test_serialize_p8_0(self): - self._test_serialize_p(ofproto.OFPET_TABLE_MOD_FAILED, - ofproto.OFPTMFC_BAD_TABLE) - - def test_serialize_p8_1(self): - self._test_serialize_p(ofproto.OFPET_TABLE_MOD_FAILED, - ofproto.OFPTMFC_BAD_CONFIG) - - def test_serialize_p8_2(self): - self._test_serialize_p(ofproto.OFPET_TABLE_MOD_FAILED, - ofproto.OFPTMFC_EPERM) - - def test_serialize_p9_0(self): - self._test_serialize_p(ofproto.OFPET_QUEUE_OP_FAILED, - ofproto.OFPQOFC_BAD_PORT) - - def test_serialize_p9_1(self): - self._test_serialize_p(ofproto.OFPET_QUEUE_OP_FAILED, - ofproto.OFPQOFC_BAD_QUEUE) - - def test_serialize_p9_2(self): - self._test_serialize_p(ofproto.OFPET_QUEUE_OP_FAILED, - ofproto.OFPQOFC_EPERM) - - def test_serialize_p10_0(self): - self._test_serialize_p(ofproto.OFPET_SWITCH_CONFIG_FAILED, - ofproto.OFPSCFC_BAD_FLAGS) - - def test_serialize_p10_1(self): - self._test_serialize_p(ofproto.OFPET_SWITCH_CONFIG_FAILED, - ofproto.OFPSCFC_BAD_LEN) - - def test_serialize_p10_2(self): - self._test_serialize_p(ofproto.OFPET_SWITCH_CONFIG_FAILED, - ofproto.OFPSCFC_EPERM) - - def test_serialize_p11_0(self): - self._test_serialize_p(ofproto.OFPET_ROLE_REQUEST_FAILED, - ofproto.OFPRRFC_STALE) - - def test_serialize_p11_1(self): - self._test_serialize_p(ofproto.OFPET_ROLE_REQUEST_FAILED, - ofproto.OFPRRFC_UNSUP) - - def test_serialize_p11_2(self): - self._test_serialize_p(ofproto.OFPET_ROLE_REQUEST_FAILED, - ofproto.OFPRRFC_BAD_ROLE) - - -class TestOFPErrorExperimenterMsg(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPErrorExperimenterMsg - """ - - def test_init(self): - c = OFPErrorExperimenterMsg(_Datapath) - eq_(c.type, 65535) - eq_(c.exp_type, None) - eq_(c.experimenter, None) - eq_(c.data, None) - - def _test_parser(self, exp_type, experimenter, data=None): - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_ERROR - msg_len = ofproto.OFP_ERROR_MSG_SIZE - xid = 2495926989 - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_ERROR_EXPERIMENTER_MSG_PACK_STR = '!HHI' - type_ = 0xffff - fmt = ofproto.OFP_ERROR_EXPERIMENTER_MSG_PACK_STR - buf += pack(fmt, type_, exp_type, experimenter) - - if data is not None: - buf += data - - res = OFPErrorExperimenterMsg.parser( - object, version, msg_type, msg_len, xid, buf) - - eq_(res.version, version) - eq_(res.msg_type, msg_type) - eq_(res.msg_len, msg_len) - eq_(res.xid, xid) - eq_(res.type, type_) - eq_(res.exp_type, exp_type) - eq_(res.experimenter, experimenter) - - if data is not None: - eq_(res.data, data) - - def test_parser_mid(self): - exp_type = 32768 - experimenter = 2147483648 - data = b'Error Experimenter Message.' - self._test_parser(exp_type, experimenter, data) - - def test_parser_max(self): - exp_type = 65535 - experimenter = 4294967295 - data = b'Error Experimenter Message.'.ljust(65519) - self._test_parser(exp_type, experimenter, data) - - def test_parser_min(self): - exp_type = 0 - experimenter = 0 - self._test_parser(exp_type, experimenter) - - -class TestOFPEchoRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPEchoRequest - """ - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_ECHO_REQUEST - msg_len = ofproto.OFP_HEADER_SIZE - xid = 2495926989 - - def test_init(self): - c = OFPEchoRequest(_Datapath) - eq_(c.data, None) - - def _test_parser(self, data=None): - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, self.version, self.msg_type, - self.msg_len, self.xid) - - if data is not None: - buf += data - - res = OFPEchoRequest.parser(object, self.version, self.msg_type, - self.msg_len, self.xid, buf) - - eq_(res.version, self.version) - eq_(res.msg_type, self.msg_type) - eq_(res.msg_len, self.msg_len) - eq_(res.xid, self.xid) - - if data is not None: - eq_(res.data, data) - - def test_parser_mid(self): - data = b'Request Message.' - self._test_parser(data) - - def test_parser_max(self): - data = b'Request Message.'.ljust(65527) - self._test_parser(data) - - def test_parser_min(self): - data = None - self._test_parser(data) - - def _test_serialize(self, data): - c = OFPEchoRequest(_Datapath) - c.data = data - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_ECHO_REQUEST, c.msg_type) - eq_(0, c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR - - if data is not None: - fmt += str(len(c.data)) + 's' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_ECHO_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - - if data is not None: - eq_(res[4], data) - - def test_serialize_mid(self): - data = b'Request Message.' - self._test_serialize(data) - - def test_serialize_max(self): - data = b'Request Message.'.ljust(65527) - self._test_serialize(data) - - def test_serialize_min(self): - data = None - self._test_serialize(data) - - -class TestOFPEchoReply(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPEchoReply - """ - - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_ECHO_REPLY - msg_len = ofproto.OFP_HEADER_SIZE - xid = 2495926989 - - def test_init(self): - c = OFPEchoReply(_Datapath) - eq_(c.data, None) - - def _test_parser(self, data): - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, self.version, self.msg_type, - self.msg_len, self.xid) - - if data is not None: - buf += data - - res = OFPEchoReply.parser(object, self.version, self.msg_type, - self.msg_len, self.xid, buf) - - eq_(res.version, self.version) - eq_(res.msg_type, self.msg_type) - eq_(res.msg_len, self.msg_len) - eq_(res.xid, self.xid) - - if data is not None: - eq_(res.data, data) - - def test_parser_mid(self): - data = b'Reply Message.' - self._test_parser(data) - - def test_parser_max(self): - data = b'Reply Message.'.ljust(65527) - self._test_parser(data) - - def test_parser_min(self): - data = None - self._test_parser(data) - - def _test_serialize(self, data): - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, self.version, self.msg_type, - self.msg_len, self.xid) + data - - c = OFPEchoReply(_Datapath) - c.data = data - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_ECHO_REPLY, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + str(len(c.data)) + 's' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_ECHO_REPLY) - eq_(res[2], len(buf)) - eq_(res[3], 0) - eq_(res[4], data) - - def test_serialize_mid(self): - data = b'Reply Message.' - self._test_serialize(data) - - def test_serialize_max(self): - data = b'Reply Message.'.ljust(65527) - self._test_serialize(data) - - @raises(AssertionError) - def test_serialize_check_data(self): - c = OFPEchoReply(_Datapath) - c.serialize() - - -class TestOFPExperimenter(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPExperimenter - """ - - c = OFPExperimenter(_Datapath) - - def _test_parser(self, xid, experimenter, exp_type): - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_EXPERIMENTER - msg_len = ofproto.OFP_EXPERIMENTER_HEADER_SIZE - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_EXPERIMENTER_HEADER_PACK_STR - # '!II'...experimenter, exp_type - fmt = ofproto.OFP_EXPERIMENTER_HEADER_PACK_STR - buf += pack(fmt, experimenter, exp_type) - - res = OFPExperimenter.parser(object, version, msg_type, - msg_len, xid, buf) - - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(experimenter, res.experimenter) - eq_(exp_type, res.exp_type) - - def test_parser_mid(self): - xid = 2495926989 - experimenter = 2147483648 - exp_type = 1 - self._test_parser(xid, experimenter, exp_type) - - def test_parser_max(self): - xid = 4294967295 - experimenter = 4294967295 - exp_type = 65535 - self._test_parser(xid, experimenter, exp_type) - - def test_parser_min(self): - xid = 0 - experimenter = 0 - exp_type = 0 - self._test_parser(xid, experimenter, exp_type) - - -class TestOFPPort(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPPort - """ - - def test_init(self): - # OFP_PORT_PACK_STR - # '!I4x6s2x16sIIIIIIII'... port_no, pad(4), hw_addr, pad(2), - # name, config, state, curr, advertised, - # peer, curr_speed, max_speed - port_no = 1119692796 - hw_addr = 'c0:26:53:c4:29:e2' - name = b'name'.ljust(16) - config = 2226555987 - state = 1678244809 - curr = 2850556459 - advertised = 2025421682 - supported = 2120575149 - peer = 2757463021 - curr_speed = 2641353507 - max_speed = 1797291672 - - fmt = ofproto.OFP_PORT_PACK_STR - - c = OFPPort(port_no, hw_addr, name, config, state, curr, - advertised, supported, peer, curr_speed, max_speed) - - eq_(port_no, c.port_no) - eq_(hw_addr, c.hw_addr) - eq_(name, c.name) - eq_(config, c.config) - eq_(state, c.state) - eq_(curr, c.curr) - eq_(advertised, c.advertised) - eq_(supported, c.supported) - eq_(peer, c.peer) - eq_(curr_speed, c.curr_speed) - eq_(max_speed, c.max_speed) - - def _test_parser(self, port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed): - name = b'name'.ljust(16) - fmt = ofproto.OFP_PORT_PACK_STR - buf = pack(fmt, port_no, addrconv.mac.text_to_bin(hw_addr), name, - config, state, curr, - advertised, supported, peer, curr_speed, max_speed) - - res = OFPPort.parser(buf, 0) - - eq_(port_no, res.port_no) - eq_(hw_addr, res.hw_addr) - eq_(name, res.name) - eq_(config, res.config) - eq_(state, res.state) - eq_(curr, res.curr) - eq_(advertised, res.advertised) - eq_(supported, res.supported) - eq_(peer, res.peer) - eq_(curr_speed, res.curr_speed) - eq_(max_speed, res.max_speed) - - def test_parser_mid(self): - port_no = 1119692796 - hw_addr = 'c0:26:53:c4:29:e2' - config = 2226555987 - state = 1678244809 - curr = 2850556459 - advertised = 2025421682 - supported = 2120575149 - peer = 2757463021 - curr_speed = 2641353507 - max_speed = 1797291672 - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_max(self): - port_no = ofproto.OFPP_ANY - hw_addr = 'ff:ff:ff:ff:ff:ff' - config = 4294967295 - state = 4294967295 - curr = 4294967295 - advertised = 4294967295 - supported = 4294967295 - peer = 4294967295 - curr_speed = 4294967295 - max_speed = 4294967295 - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_min(self): - port_no = 0 - hw_addr = '00:00:00:00:00:00' - config = 0 - state = 0 - curr = 0 - advertised = 0 - supported = 0 - peer = 0 - curr_speed = 0 - max_speed = 0 - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p1(self): - port_no = ofproto.OFPP_MAX - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_PORT_DOWN - state = ofproto.OFPPS_LINK_DOWN - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_10MB_HD - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p2(self): - port_no = ofproto.OFPP_IN_PORT - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_RECV - state = ofproto.OFPPS_BLOCKED - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_10MB_FD - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p3(self): - port_no = ofproto.OFPP_TABLE - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_FWD - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_100MB_HD - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p4(self): - port_no = ofproto.OFPP_NORMAL - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_100MB_FD - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p5(self): - port_no = ofproto.OFPP_FLOOD - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_1GB_HD - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p6(self): - port_no = ofproto.OFPP_ALL - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_1GB_FD - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p7(self): - port_no = ofproto.OFPP_CONTROLLER - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_10GB_FD - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p8(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_40GB_FD - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p9(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_100GB_FD - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p10(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_1TB_FD - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p11(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_OTHER - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p12(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_COPPER - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p13(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_FIBER - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p14(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_AUTONEG - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p15(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_PAUSE - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p16(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = 'c0:26:53:c4:29:e2' - config = ofproto.OFPPC_NO_PACKET_IN - state = ofproto.OFPPS_LIVE - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_PAUSE_ASYM - self._test_parser(port_no, hw_addr, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - -class TestOFPFeaturesRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPFeaturesRequest - """ - - def test_serialize(self): - c = OFPFeaturesRequest(_Datapath) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_FEATURES_REQUEST, c.msg_type) - eq_(0, c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_FEATURES_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - - -class TestOFPSwitchFeatures(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPSwitchFeatures - """ - - def _test_parser(self, xid, datapath_id, n_buffers, - n_tables, capabilities, reserved, port_cnt=0): - - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_FEATURES_REPLY - msg_len = ofproto.OFP_SWITCH_FEATURES_SIZE \ - + ofproto.OFP_PORT_SIZE * port_cnt - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_SWITCH_FEATURES_PACK_STR - # '!QIB3xII'...datapath_id, n_buffers, n_tables, - # pad(3), capabilities, reserved - - fmt = ofproto.OFP_SWITCH_FEATURES_PACK_STR - buf += pack(fmt, datapath_id, n_buffers, n_tables, - capabilities, reserved) - - for i in range(port_cnt): - # OFP_PORT_PACK_STR - # '!I4x6s2x16sIIIIIIII'... port_no, pad(4), hw_addr, pad(2), - # name, config, state, curr, advertised, - # peer, curr_speed, max_speed - port_no = i - - fmt = ofproto.OFP_PORT_PACK_STR - buf += pack(fmt, port_no, b'\x00' * 6, b'\x00' * 16, 0, 0, 0, - 0, 0, 0, 0, 0) - - res = OFPSwitchFeatures.parser(object, version, msg_type, - msg_len, xid, buf) - - eq_(res.version, version) - eq_(res.msg_type, msg_type) - eq_(res.msg_len, msg_len) - eq_(res.xid, xid) - - eq_(res.datapath_id, datapath_id) - eq_(res.n_buffers, n_buffers) - eq_(res.n_tables, n_tables) - eq_(res.capabilities, capabilities) - eq_(res._reserved, reserved) - - for i in range(port_cnt): - eq_(res.ports[i].port_no, i) - - def test_parser_mid(self): - xid = 2495926989 - datapath_id = 1270985291017894273 - n_buffers = 2148849654 - n_tables = 228 - capabilities = 1766843586 - reserved = 2013714700 - port_cnt = 1 - - self._test_parser(xid, datapath_id, n_buffers, n_tables, - capabilities, reserved, port_cnt) - - def test_parser_max(self): - xid = 4294967295 - datapath_id = 18446744073709551615 - n_buffers = 4294967295 - n_tables = 255 - capabilities = 4294967295 - reserved = 4294967295 - port_cnt = 1023 - - self._test_parser(xid, datapath_id, n_buffers, n_tables, - capabilities, reserved, port_cnt) - - def test_parser_min(self): - xid = 0 - datapath_id = 0 - n_buffers = 0 - n_tables = 0 - capabilities = 0 - reserved = 0 - port_cnt = 0 - - self._test_parser(xid, datapath_id, n_buffers, n_tables, - capabilities, reserved, port_cnt) - - -class TestOFPGetConfigRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPGetConfigRequest - """ - - def test_serialize(self): - c = OFPGetConfigRequest(_Datapath) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_GET_CONFIG_REQUEST, c.msg_type) - eq_(0, c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR - - res = struct.unpack(fmt, six.binary_type(c.buf)) - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_GET_CONFIG_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - - -class TestOFPGetConfigReply(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPGetConfigReply - """ - - def _test_parser(self, xid, flags, miss_send_len): - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_GET_CONFIG_REPLY - msg_len = ofproto.OFP_SWITCH_CONFIG_SIZE - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_SWITCH_CONFIG_PACK_STR - # '!HH'...flags, miss_send_len - fmt = ofproto.OFP_SWITCH_CONFIG_PACK_STR - buf += pack(fmt, flags, miss_send_len) - - res = OFPGetConfigReply.parser(object, version, msg_type, - msg_len, xid, buf) - - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(flags, res.flags) - eq_(miss_send_len, res.miss_send_len) - - def test_parser_mid(self): - xid = 3423224276 - flags = 41186 - miss_send_len = 13838 - self._test_parser(xid, flags, miss_send_len) - - def test_parser_max(self): - xid = 4294967295 - flags = 65535 - miss_send_len = 65535 - self._test_parser(xid, flags, miss_send_len) - - def test_parser_min(self): - xid = 0 - flags = ofproto.OFPC_FRAG_NORMAL - miss_send_len = 0 - self._test_parser(xid, flags, miss_send_len) - - def test_parser_p1(self): - xid = 3423224276 - flags = ofproto.OFPC_FRAG_DROP - miss_send_len = 13838 - self._test_parser(xid, flags, miss_send_len) - - def test_parser_p2(self): - xid = 3423224276 - flags = ofproto.OFPC_FRAG_REASM - miss_send_len = 13838 - self._test_parser(xid, flags, miss_send_len) - - def test_parser_p3(self): - xid = 3423224276 - flags = ofproto.OFPC_FRAG_MASK - miss_send_len = 13838 - self._test_parser(xid, flags, miss_send_len) - - def test_parser_p4(self): - xid = 3423224276 - flags = ofproto.OFPC_INVALID_TTL_TO_CONTROLLER - miss_send_len = 13838 - self._test_parser(xid, flags, miss_send_len) - - -class TestOFPSetConfig(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPSetConfig - """ - - def test_init(self): - # OFP_SWITCH_CONFIG_PACK_STR - # '!HH'...flags, miss_send_len - flags = 41186 - miss_send_len = 13838 - - c = OFPSetConfig(_Datapath, flags, miss_send_len) - - eq_(flags, c.flags) - eq_(miss_send_len, c.miss_send_len) - - def _test_serialize(self, flags, miss_send_len): - c = OFPSetConfig(_Datapath, flags, miss_send_len) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_SET_CONFIG, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_SWITCH_CONFIG_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_SET_CONFIG) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], flags) - eq_(res[5], miss_send_len) - - def test_serialize_mid(self): - flags = 41186 - miss_send_len = 13838 - self._test_serialize(flags, miss_send_len) - - def test_serialize_max(self): - flags = 65535 - miss_send_len = 65535 - self._test_serialize(flags, miss_send_len) - - def test_serialize_min(self): - flags = ofproto.OFPC_FRAG_NORMAL - miss_send_len = 0 - self._test_serialize(flags, miss_send_len) - - def test_serialize_p1(self): - flags = ofproto.OFPC_FRAG_DROP - miss_send_len = 13838 - self._test_serialize(flags, miss_send_len) - - def test_serialize_p2(self): - flags = ofproto.OFPC_FRAG_REASM - miss_send_len = 13838 - self._test_serialize(flags, miss_send_len) - - def test_serialize_p3(self): - flags = ofproto.OFPC_FRAG_MASK - miss_send_len = 13838 - self._test_serialize(flags, miss_send_len) - - def test_serialize_p4(self): - flags = ofproto.OFPC_INVALID_TTL_TO_CONTROLLER - miss_send_len = 13838 - self._test_serialize(flags, miss_send_len) - - @raises(AssertionError) - def test_serialize_check_flags(self): - flags = None - miss_send_len = 13838 - c = OFPSetConfig(_Datapath, flags, miss_send_len) - c.serialize() - - @raises(AssertionError) - def test_serialize_check_miss_send_len(self): - flags = 41186 - miss_send_len = None - c = OFPSetConfig(_Datapath, flags, miss_send_len) - c.serialize() - - -class TestOFPPacketIn(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPPacketIn - """ - - def _test_parser(self, xid, buffer_id, total_len=0, - reason=0, table_id=0, data=None): - if data is None: - data = b'' - - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_PACKET_IN - msg_len = ofproto.OFP_PACKET_IN_SIZE + len(data) - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_PACKET_IN_PACK_STR - fmt = ofproto.OFP_PACKET_IN_PACK_STR - buf += pack(fmt, buffer_id, total_len, reason, table_id) - - # match - buf_match = bytearray() - match = OFPMatch() - match.serialize(buf_match, 0) - buf += six.binary_type(buf_match) - - # data - buf += b'\x00' * 2 - buf += data - - res = OFPPacketIn.parser(object, version, msg_type, msg_len, - xid, buf) - - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(buffer_id, res.buffer_id) - eq_(total_len, res.total_len) - eq_(reason, res.reason) - eq_(table_id, res.table_id) - ok_(hasattr(res, 'match')) - eq_(ofproto.OFPMT_OXM, res.match.type) - - if data: - eq_(data[:total_len], res.data) - - def test_data_is_total_len(self): - xid = 3423224276 - buffer_id = 2926809324 - reason = 128 - table_id = 3 - data = b'PacketIn' - total_len = len(data) - self._test_parser(xid, buffer_id, total_len, reason, table_id, data) - - def test_data_is_not_total_len(self): - xid = 3423224276 - buffer_id = 2926809324 - reason = 128 - table_id = 3 - data = b'PacketIn' - total_len = len(data) - 1 - self._test_parser(xid, buffer_id, total_len, reason, table_id, data) - - def test_parser_max(self): - # 65535(!H max) - 24(without data) = 65511 - xid = 4294967295 - buffer_id = 4294967295 - reason = 255 - table_id = 255 - data = b'data'.ljust(65511) - total_len = len(data) - self._test_parser(xid, buffer_id, total_len, reason, table_id, data) - - def test_parser_min(self): - xid = 0 - buffer_id = 0 - reason = ofproto.OFPR_NO_MATCH - table_id = 0 - total_len = 0 - self._test_parser(xid, buffer_id, total_len, reason, table_id) - - def test_parser_p1(self): - data = b'data'.ljust(8) - xid = 3423224276 - buffer_id = 2926809324 - total_len = len(data) - reason = ofproto.OFPR_ACTION - table_id = 3 - self._test_parser(xid, buffer_id, total_len, reason, table_id, data) - - def test_parser_p2(self): - data = b'data'.ljust(8) - xid = 3423224276 - buffer_id = 2926809324 - total_len = len(data) - reason = ofproto.OFPR_INVALID_TTL - table_id = 3 - self._test_parser(xid, buffer_id, total_len, reason, table_id, data) - - -class TestOFPFlowRemoved(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPFlowRemoved - """ - - def _test_parser(self, xid, cookie, priority, - reason, table_id, duration_sec, - duration_nsec, idle_timeout, hard_timeout, - packet_count, byte_count): - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_FLOW_REMOVED - msg_len = ofproto.OFP_FLOW_REMOVED_SIZE - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_FLOW_REMOVED_PACK_STR0 - # '!QHBBIIHHQQ' ...cookie, priority, reason, table_id, - # duration_sec, duration_nsec, idle_timeout, - # hard_timeout, packet_count, byte_count - - fmt = ofproto.OFP_FLOW_REMOVED_PACK_STR0 - buf += pack(fmt, cookie, priority, reason, table_id, - duration_sec, duration_nsec, idle_timeout, - hard_timeout, packet_count, byte_count) - - # OFP_MATCH_PACK_STR - match = OFPMatch() - buf_match = bytearray() - match.serialize(buf_match, 0) - - buf += six.binary_type(buf_match) - - res = OFPFlowRemoved.parser(object, version, msg_type, - msg_len, xid, buf) - - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(cookie, res.cookie) - eq_(priority, res.priority) - eq_(reason, res.reason) - eq_(table_id, res.table_id) - eq_(duration_sec, res.duration_sec) - eq_(duration_nsec, res.duration_nsec) - eq_(idle_timeout, res.idle_timeout) - eq_(hard_timeout, res.hard_timeout) - eq_(packet_count, res.packet_count) - eq_(byte_count, res.byte_count) - ok_(hasattr(res, 'match')) - eq_(ofproto.OFPMT_OXM, res.match.type) - - def test_parser_mid(self): - xid = 3423224276 - cookie = 178378173441633860 - priority = 718 - reason = 128 - table_id = 169 - duration_sec = 2250548154 - duration_nsec = 2492776995 - idle_timeout = 60284 - hard_timeout = 60285 - packet_count = 6489108735192644493 - byte_count = 7334344481123449724 - self._test_parser(xid, cookie, priority, - reason, table_id, duration_sec, - duration_nsec, idle_timeout, hard_timeout, - packet_count, byte_count) - - def test_parser_max(self): - xid = 4294967295 - cookie = 18446744073709551615 - priority = 65535 - reason = 255 - table_id = 255 - duration_sec = 4294967295 - duration_nsec = 4294967295 - idle_timeout = 65535 - hard_timeout = 65535 - packet_count = 18446744073709551615 - byte_count = 18446744073709551615 - self._test_parser(xid, cookie, priority, - reason, table_id, duration_sec, - duration_nsec, idle_timeout, hard_timeout, - packet_count, byte_count) - - def test_parser_min(self): - xid = 0 - cookie = 0 - priority = 0 - reason = ofproto.OFPRR_IDLE_TIMEOUT - table_id = 0 - duration_sec = 0 - duration_nsec = 0 - idle_timeout = 0 - hard_timeout = 0 - packet_count = 0 - byte_count = 0 - self._test_parser(xid, cookie, priority, - reason, table_id, duration_sec, - duration_nsec, idle_timeout, hard_timeout, - packet_count, byte_count) - - def test_parser_p1(self): - xid = 3423224276 - cookie = 178378173441633860 - priority = 718 - reason = ofproto.OFPRR_HARD_TIMEOUT - table_id = 169 - duration_sec = 2250548154 - duration_nsec = 2492776995 - idle_timeout = 60284 - hard_timeout = 60285 - packet_count = 6489108735192644493 - byte_count = 7334344481123449724 - self._test_parser(xid, cookie, priority, - reason, table_id, duration_sec, - duration_nsec, idle_timeout, hard_timeout, - packet_count, byte_count) - - def test_parser_p2(self): - xid = 3423224276 - cookie = 178378173441633860 - priority = 718 - reason = ofproto.OFPRR_DELETE - table_id = 169 - duration_sec = 2250548154 - duration_nsec = 2492776995 - idle_timeout = 60284 - hard_timeout = 60285 - packet_count = 6489108735192644493 - byte_count = 7334344481123449724 - self._test_parser(xid, cookie, priority, - reason, table_id, duration_sec, - duration_nsec, idle_timeout, hard_timeout, - packet_count, byte_count) - - def test_parser_p3(self): - xid = 3423224276 - cookie = 178378173441633860 - priority = 718 - reason = ofproto.OFPRR_GROUP_DELETE - table_id = 169 - duration_sec = 2250548154 - duration_nsec = 2492776995 - idle_timeout = 60284 - hard_timeout = 60285 - packet_count = 6489108735192644493 - byte_count = 7334344481123449724 - self._test_parser(xid, cookie, priority, - reason, table_id, duration_sec, - duration_nsec, idle_timeout, hard_timeout, - packet_count, byte_count) - - -class TestOFPPortStatus(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPPortStatus - """ - - def _test_parser(self, xid, reason, - port_no, config, state, curr, advertised, - supported, peer, curr_speed, max_speed): - - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_PORT_STATUS - msg_len = ofproto.OFP_PORT_STATUS_SIZE - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_PORT_STATUS_PACK_STR = '!B7x' + _OFP_PORT_PACK_STR - # '!B7x'...reason, pad(7) - # OFP_PORT_PACK_STR - # '!I4x6s2x16sIIIIIIII'... port_no, pad(4), hw_addr, pad(2), - # name, config, state, curr, advertised, - # peer, curr_speed, max_speed - hw_addr = '80:ff:9a:e3:72:85' - name = b'name'.ljust(16) - - fmt = ofproto.OFP_PORT_STATUS_PACK_STR - buf += pack(fmt, reason, port_no, addrconv.mac.text_to_bin(hw_addr), - name, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - res = OFPPortStatus.parser(object, version, msg_type, msg_len, - xid, buf) - - eq_(reason, res.reason) - eq_(port_no, res.desc.port_no) - eq_(hw_addr, res.desc.hw_addr) - eq_(name, res.desc.name) - eq_(config, res.desc.config) - eq_(state, res.desc.state) - eq_(curr, res.desc.curr) - eq_(advertised, res.desc.advertised) - eq_(supported, res.desc.supported) - eq_(peer, res.desc.peer) - eq_(curr_speed, res.desc.curr_speed) - eq_(max_speed, res.desc.max_speed) - - def test_parser_mid(self): - xid = 3423224276 - reason = 128 - port_no = 1119692796 - config = 2226555987 - state = 1678244809 - curr = 2850556459 - advertised = 2025421682 - supported = 2120575149 - peer = 2757463021 - curr_speed = 2641353507 - max_speed = 1797291672 - self._test_parser(xid, reason, - port_no, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_max(self): - xid = 4294967295 - reason = 255 - port_no = ofproto.OFPP_ANY - config = 4294967295 - state = 4294967295 - curr = 4294967295 - advertised = 4294967295 - supported = 4294967295 - peer = 4294967295 - curr_speed = 4294967295 - max_speed = 4294967295 - self._test_parser(xid, reason, - port_no, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_min(self): - xid = 0 - reason = 0 - port_no = 0 - config = 0 - state = 0 - curr = 0 - advertised = 0 - supported = 0 - peer = 0 - curr_speed = 0 - max_speed = 0 - self._test_parser(xid, reason, - port_no, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p1(self): - xid = 3423224276 - reason = ofproto.OFPPR_DELETE - port_no = ofproto.OFPP_MAX - config = ofproto.OFPPC_PORT_DOWN - state = ofproto.OFPPS_LINK_DOWN - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_10MB_HD - self._test_parser(xid, reason, - port_no, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - def test_parser_p2(self): - xid = 3423224276 - reason = ofproto.OFPPR_MODIFY - port_no = ofproto.OFPP_MAX - config = ofproto.OFPPC_PORT_DOWN - state = ofproto.OFPPS_LINK_DOWN - curr = advertised = supported \ - = peer = curr_speed = max_speed \ - = ofproto.OFPPF_10MB_HD - self._test_parser(xid, reason, - port_no, config, state, curr, advertised, - supported, peer, curr_speed, max_speed) - - -class TestOFPPacketOut(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPPacketOut - """ - - def _test_init(self, in_port): - buffer_id = 0xffffffff - data = b'Message' - out_port = 0x00002ae0 - actions = [OFPActionOutput(out_port, 0)] - - c = OFPPacketOut(_Datapath, buffer_id, in_port, actions, data) - - eq_(buffer_id, c.buffer_id) - eq_(in_port, c.in_port) - eq_(0, c.actions_len) - eq_(data, c.data) - eq_(actions, c.actions) - - def test_init(self): - in_port = 0x00040455 - self._test_init(in_port) - - @raises(AssertionError) - def test_init_check_in_port(self): - in_port = None - self._test_init(in_port) - - def _test_serialize(self, buffer_id, in_port, action_cnt=0, data=None): - actions = [] - for i in range(action_cnt): - actions.append(ofproto_v1_2_parser.OFPActionOutput(i, 0)) - - c = OFPPacketOut(_Datapath, buffer_id, in_port, actions, data) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_PACKET_OUT, c.msg_type) - eq_(0, c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR \ - + ofproto.OFP_PACKET_OUT_PACK_STR[1:] \ - + ofproto.OFP_ACTION_OUTPUT_PACK_STR[1:] * action_cnt - - if data is not None: - fmt += str(len(data)) + 's' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_PACKET_OUT) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], buffer_id) - eq_(res[5], in_port) - eq_(res[6], ofproto.OFP_ACTION_OUTPUT_SIZE * action_cnt) - - for i in range(action_cnt): - index = 7 + i * 4 - eq_(res[index], ofproto.OFPAT_OUTPUT) - eq_(res[index + 1], ofproto.OFP_ACTION_OUTPUT_SIZE) - eq_(res[index + 2], i) - eq_(res[index + 3], 0) - - if data: - eq_(res[-1], data) - - def test_serialize_true(self): - buffer_id = 0xffffffff - in_port = 0x00040455 - action_cnt = 2 - data = b'Message' - self._test_serialize(buffer_id, in_port, action_cnt, data) - - def test_serialize_none(self): - buffer_id = 0xffffffff - in_port = 0x00040455 - self._test_serialize(buffer_id, in_port) - - def test_serialize_max(self): - buffer_id = 0xffffffff - in_port = 4294967295 - action_cnt = 1 - data = b'Message'.ljust(65495) - self._test_serialize(buffer_id, in_port, action_cnt, data) - - def test_serialize_min(self): - buffer_id = 0 - in_port = 0 - self._test_serialize(buffer_id, in_port) - - def test_serialize_p1(self): - buffer_id = 2147483648 - in_port = ofproto.OFPP_CONTROLLER - self._test_serialize(buffer_id, in_port) - - @raises(AssertionError) - def test_serialize_check_buffer_id(self): - buffer_id = 2147483648 - in_port = 1 - action_cnt = 0 - data = b'DATA' - self._test_serialize(buffer_id, in_port, action_cnt, data) - - -class TestOFPFlowMod(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPFlowMod - """ - - def test_init(self): - # OFP_FLOW_MOD_PACK_STR0 - # '!QQBBHHHIIIH2x'...cookie, cookie_mask, table_id, command, - # idle_timeout, hard_timeout, priority, buffer_id, - # out_port, out_group, flags - cookie = 2127614848199081640 - cookie_mask = 2127614848199081641 - table_id = 3 - command = 0 - idle_timeout = 62317 - hard_timeout = 7365 - priority = 40163 - buffer_id = 4037115955 - out_port = 65037 - out_group = 6606 - flags = 135 - instructions = [OFPInstructionGotoTable(table_id)] - - in_port = 1 - match = OFPMatch() - match.set_in_port(in_port) - - c = OFPFlowMod(_Datapath, cookie, cookie_mask, table_id, command, - idle_timeout, hard_timeout, priority, buffer_id, - out_port, out_group, flags, match, instructions) - - eq_(cookie, c.cookie) - eq_(cookie_mask, c.cookie_mask) - eq_(table_id, c.table_id) - eq_(command, c.command) - eq_(idle_timeout, c.idle_timeout) - eq_(hard_timeout, c.hard_timeout) - eq_(priority, c.priority) - eq_(buffer_id, c.buffer_id) - eq_(out_port, c.out_port) - eq_(out_group, c.out_group) - eq_(flags, c.flags) - eq_(in_port, c.match._flow.in_port) - eq_(instructions[0], c.instructions[0]) - - def _test_serialize(self, cookie, cookie_mask, table_id, - command, idle_timeout, hard_timeout, - priority, buffer_id, out_port, - out_group, flags, inst_cnt=0): - dl_type = 0x0800 - match = OFPMatch() - match.set_dl_type(dl_type) - - insts = [] - for i in range(inst_cnt): - insts.append(OFPInstructionGotoTable(i)) - - c = OFPFlowMod(_Datapath, cookie, cookie_mask, table_id, command, - idle_timeout, hard_timeout, priority, buffer_id, - out_port, out_group, flags, match, insts) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_FLOW_MOD, c.msg_type) - eq_(0, c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR \ - + ofproto.OFP_FLOW_MOD_PACK_STR0[1:] \ - + 'HHHBB' \ - + MTEthType.pack_str[1:] + '6x' \ - + ofproto.OFP_INSTRUCTION_GOTO_TABLE_PACK_STR[1:] * inst_cnt - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_FLOW_MOD) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], cookie) - eq_(res[5], cookie_mask) - eq_(res[6], table_id) - eq_(res[7], command) - eq_(res[8], idle_timeout) - eq_(res[9], hard_timeout) - eq_(res[10], priority) - eq_(res[11], buffer_id) - eq_(res[12], out_port) - eq_(res[13], out_group) - eq_(res[14], flags) - - # OFP_MATCH (type, length, class, [field, hashmask], n_byte, ip_proto) - eq_(res[15], ofproto.OFPMT_OXM) - eq_(res[16], 10) # OFP_MATCH_STR + MTEthType.pack_str - eq_(res[17], ofproto.OFPXMC_OPENFLOW_BASIC) - eq_(res[18] >> 1, ofproto.OFPXMT_OFB_ETH_TYPE) - eq_(res[18] & 0b0001, 0) - eq_(res[19], calcsize(MTEthType.pack_str)) - eq_(res[20], dl_type) - - # insts (type, length, table_id) - for i in range(inst_cnt): - index = 21 + 3 * i - eq_(res[index], ofproto.OFPIT_GOTO_TABLE) - eq_(res[index + 1], ofproto.OFP_INSTRUCTION_GOTO_TABLE_SIZE) - eq_(res[index + 2], i) - - def test_serialize_mid(self): - cookie = 2127614848199081640 - cookie_mask = 2127614848199081641 - table_id = 3 - command = 128 - idle_timeout = 62317 - hard_timeout = 7365 - priority = 40163 - buffer_id = 4037115955 - out_port = 65037 - out_group = 6606 - flags = 135 - inst_cnt = 1 - self._test_serialize(cookie, cookie_mask, table_id, - command, idle_timeout, hard_timeout, - priority, buffer_id, out_port, - out_group, flags, inst_cnt) - - def test_serialize_max(self): - cookie = 18446744073709551615 - cookie_mask = 18446744073709551615 - table_id = 255 - command = 255 - idle_timeout = 65535 - hard_timeout = 65535 - priority = 65535 - buffer_id = 0xffffffff - out_port = 0xffffffff - out_group = 0xffffffff - flags = 65535 - inst_cnt = 0xff - self._test_serialize(cookie, cookie_mask, table_id, - command, idle_timeout, hard_timeout, - priority, buffer_id, out_port, - out_group, flags, inst_cnt) - - def test_serialize_min(self): - cookie = 0 - cookie_mask = 0 - table_id = 0 - command = ofproto.OFPFC_ADD - idle_timeout = 0 - hard_timeout = 0 - priority = 0 - buffer_id = 0 - out_port = 0 - out_group = 0 - flags = 0 - self._test_serialize(cookie, cookie_mask, table_id, - command, idle_timeout, hard_timeout, - priority, buffer_id, out_port, - out_group, flags) - - def test_serialize_p1(self): - cookie = 2127614848199081640 - cookie_mask = 2127614848199081641 - table_id = 3 - command = 1 - idle_timeout = 62317 - hard_timeout = 7365 - priority = 40163 - buffer_id = 4037115955 - out_port = 65037 - out_group = 6606 - flags = 1 << 0 - self._test_serialize(cookie, cookie_mask, table_id, - command, idle_timeout, hard_timeout, - priority, buffer_id, out_port, - out_group, flags) - - def test_serialize_p2(self): - cookie = 2127614848199081640 - cookie_mask = 2127614848199081641 - table_id = 3 - command = 2 - idle_timeout = 62317 - hard_timeout = 7365 - priority = 40163 - buffer_id = 4037115955 - out_port = 65037 - out_group = 6606 - flags = 1 << 0 - self._test_serialize(cookie, cookie_mask, table_id, - command, idle_timeout, hard_timeout, - priority, buffer_id, out_port, - out_group, flags) - - def test_serialize_p3(self): - cookie = 2127614848199081640 - cookie_mask = 2127614848199081641 - table_id = 3 - command = 3 - idle_timeout = 62317 - hard_timeout = 7365 - priority = 40163 - buffer_id = 4037115955 - out_port = 65037 - out_group = 6606 - flags = 1 << 1 - self._test_serialize(cookie, cookie_mask, table_id, - command, idle_timeout, hard_timeout, - priority, buffer_id, out_port, - out_group, flags) - - def test_serialize_p4(self): - cookie = 2127614848199081640 - cookie_mask = 2127614848199081641 - table_id = 3 - command = 4 - idle_timeout = 62317 - hard_timeout = 7365 - priority = 40163 - buffer_id = 4037115955 - out_port = 65037 - out_group = 6606 - flags = 1 << 2 - self._test_serialize(cookie, cookie_mask, table_id, - command, idle_timeout, hard_timeout, - priority, buffer_id, out_port, - out_group, flags) - - -class TestOFPInstructionGotoTable(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPInstructionGotoTable - """ - - # OFP_INSTRUCTION_GOTO_TABLE_PACK_STR - # '!HHB3x'...type, len, table_id, pad(3) - type_ = ofproto.OFPIT_GOTO_TABLE - len_ = ofproto.OFP_INSTRUCTION_GOTO_TABLE_SIZE - - fmt = ofproto.OFP_INSTRUCTION_GOTO_TABLE_PACK_STR - - def test_init(self): - table_id = 3 - c = OFPInstructionGotoTable(table_id) - - eq_(self.type_, c.type) - eq_(self.len_, c.len) - eq_(table_id, c.table_id) - - def _test_parser(self, table_id): - buf = pack(self.fmt, self.type_, self.len_, table_id) - res = OFPInstructionGotoTable.parser(buf, 0) - - eq_(res.len, self.len_) - eq_(res.type, self.type_) - eq_(res.table_id, table_id) - - def test_parser_mid(self): - self._test_parser(3) - - def test_parser_max(self): - self._test_parser(255) - - def test_parser_min(self): - self._test_parser(0) - - def _test_serialize(self, table_id): - c = OFPInstructionGotoTable(table_id) - - buf = bytearray() - c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], table_id) - - def test_serialize_mid(self): - self._test_serialize(3) - - def test_serialize_max(self): - self._test_serialize(255) - - def test_serialize_min(self): - self._test_serialize(0) - - -class TestOFPInstructionWriteMetadata(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPInstructionWriteMetadata - """ - - # OFP_INSTRUCTION_WRITE_METADATA_PACK_STR - # '!HH4xQQ'...type, len, pad(4), metadata, metadata_mask - type_ = ofproto.OFPIT_WRITE_METADATA - len_ = ofproto.OFP_INSTRUCTION_WRITE_METADATA_SIZE - metadata = 0x1212121212121212 - metadata_mask = 0xff00ff00ff00ff00 - - fmt = ofproto.OFP_INSTRUCTION_WRITE_METADATA_PACK_STR - - def test_init(self): - c = OFPInstructionWriteMetadata(self.metadata, - self.metadata_mask) - - eq_(self.type_, c.type) - eq_(self.len_, c.len) - eq_(self.metadata, c.metadata) - eq_(self.metadata_mask, c.metadata_mask) - - def _test_parser(self, metadata, metadata_mask): - buf = pack(self.fmt, self.type_, self.len_, - metadata, metadata_mask) - - res = OFPInstructionWriteMetadata.parser(buf, 0) - eq_(res.len, self.len_) - eq_(res.type, self.type_) - eq_(res.metadata, metadata) - eq_(res.metadata_mask, metadata_mask) - - def test_parser_metadata_mid(self): - self._test_parser(self.metadata, self.metadata_mask) - - def test_parser_metadata_max(self): - metadata = 0xffffffffffffffff - self._test_parser(metadata, self.metadata_mask) - - def test_parser_metadata_min(self): - metadata = 0 - self._test_parser(metadata, self.metadata_mask) - - def test_parser_metadata_mask_max(self): - metadata_mask = 0xffffffffffffffff - self._test_parser(self.metadata, metadata_mask) - - def test_parser_metadata_mask_min(self): - metadata_mask = 0 - self._test_parser(self.metadata, metadata_mask) - - def _test_serialize(self, metadata, metadata_mask): - c = OFPInstructionWriteMetadata(metadata, - metadata_mask) - - buf = bytearray() - c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], metadata) - eq_(res[3], metadata_mask) - - def test_serialize_metadata_mid(self): - self._test_serialize(self.metadata, self.metadata_mask) - - def test_serialize_metadata_max(self): - metadata = 0xffffffffffffffff - self._test_serialize(metadata, self.metadata_mask) - - def test_serialize_metadata_min(self): - metadata = 0 - self._test_serialize(metadata, self.metadata_mask) - - def test_serialize_metadata_mask_max(self): - metadata_mask = 0xffffffffffffffff - self._test_serialize(self.metadata, metadata_mask) - - def test_serialize_metadata_mask_min(self): - metadata_mask = 0 - self._test_serialize(self.metadata, metadata_mask) - - -class TestOFPInstructionActions(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPInstructionActions - """ - # OFP_INSTRUCTION_ACTIONS_PACK_STR - # '!HH4x'...type, len, pad(4) - type_ = ofproto.OFPIT_WRITE_ACTIONS - len_ = ofproto.OFP_INSTRUCTION_ACTIONS_SIZE \ - + ofproto.OFP_ACTION_OUTPUT_SIZE - - fmt = ofproto.OFP_INSTRUCTION_ACTIONS_PACK_STR - buf = pack(fmt, type_, len_) - - # OFP_ACTION (OFP_ACTION_OUTPUT) - port = 0x00002ae0 - max_len = ofproto.OFP_ACTION_OUTPUT_SIZE - actions = [OFPActionOutput(port, max_len)] - buf_actions = bytearray() - actions[0].serialize(buf_actions, 0) - - buf += six.binary_type(buf_actions) - - def test_init(self): - c = OFPInstructionActions(self.type_, self.actions) - - eq_(self.type_, c.type) - eq_(self.actions, c.actions) - - def _test_parser(self, action_cnt): - # OFP_INSTRUCTION_ACTIONS_PACK_STR - # '!HH4x'...type, len, pad(4) - len_ = ofproto.OFP_INSTRUCTION_ACTIONS_SIZE \ - + (ofproto.OFP_ACTION_OUTPUT_SIZE * action_cnt) - - fmt = ofproto.OFP_INSTRUCTION_ACTIONS_PACK_STR - buf = pack(fmt, self.type_, len_) - - actions = [] - for a in range(action_cnt): - # OFP_ACTION (OFP_ACTION_OUTPUT) - port = a - action = OFPActionOutput(port, self.max_len) - actions.append(action) - buf_actions = bytearray() - actions[a].serialize(buf_actions, 0) - buf += six.binary_type(buf_actions) - - res = OFPInstructionActions.parser(buf, 0) - - # 8 - eq_(res.len, len_) - eq_(res.type, self.type_) - - # 8 + 16 * action_cnt < 65535 byte - # action_cnt <= 4095 - for a in range(action_cnt): - eq_(res.actions[a].type, actions[a].type) - eq_(res.actions[a].len, actions[a].len) - eq_(res.actions[a].port, actions[a].port) - eq_(res.actions[a].max_len, actions[a].max_len) - - def test_parser_mid(self): - self._test_parser(2047) - - def test_parser_max(self): - self._test_parser(4095) - - def test_parser_min(self): - self._test_parser(0) - - def _test_serialize(self, action_cnt): - # OFP_INSTRUCTION_ACTIONS_PACK_STR - # '!HH4x'...type, len, pad(4) - len_ = ofproto.OFP_INSTRUCTION_ACTIONS_SIZE \ - + (ofproto.OFP_ACTION_OUTPUT_SIZE * action_cnt) - - actions = [] - for a in range(action_cnt): - # OFP_ACTION (OFP_ACTION_OUTPUT) - port = a - action = OFPActionOutput(port, self.max_len) - actions.append(action) - - c = OFPInstructionActions(self.type_, actions) - - buf = bytearray() - c.serialize(buf, 0) - - fmt = '!' \ - + ofproto.OFP_INSTRUCTION_ACTIONS_PACK_STR.replace('!', '') - - for a in range(action_cnt): - fmt += ofproto.OFP_ACTION_OUTPUT_PACK_STR.replace('!', '') - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(res[0], self.type_) - eq_(res[1], len_) - - for a in range(action_cnt): - d = 2 + a * 4 - eq_(res[d], actions[a].type) - eq_(res[d + 1], actions[a].len) - eq_(res[d + 2], actions[a].port) - eq_(res[d + 3], actions[a].max_len) - - def test_serialize_mid(self): - self._test_serialize(2047) - - def test_serialize_max(self): - self._test_serialize(4095) - - def test_serialize_min(self): - self._test_serialize(0) - - -class TestOFPActionHeader(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionHeader - """ - - def test_init(self): - # OFP_ACTION_HEADER_PACK_STR - # '!HH4x'...type, len, pad(4) - type_ = ofproto.OFPAT_OUTPUT - len_ = ofproto.OFP_ACTION_HEADER_SIZE - - fmt = ofproto.OFP_ACTION_HEADER_PACK_STR - buf = pack(fmt, type_, len_) - - c = OFPActionHeader(type_, len_) - - eq_(type_, c.type) - eq_(len_, c.len) - - def _test_serialize(self, type_, len_): - # OFP_ACTION_HEADER_PACK_STR - # '!HH4x'...type, len, pad(4) - - fmt = ofproto.OFP_ACTION_HEADER_PACK_STR - buf = pack(fmt, type_, len_) - - c = OFPActionHeader(type_, len_) - - buf = bytearray() - c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_HEADER_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(res[0], type_) - eq_(res[1], len_) - - def test_serialize_mid(self): - type_ = 11 - len_ = 8 - self._test_serialize(type_, len_) - - def test_serialize_max(self): - type_ = 0xffff - len_ = 0xffff - self._test_serialize(type_, len_) - - def test_serialize_min(self): - type_ = 0 - len_ = 0 - self._test_serialize(type_, len_) - - -class TestOFPActionOutput(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionOutput - """ - - # OFP_ACTION_OUTPUT_PACK_STR - # '!HHIH6x'...type, len, port, max_len, pad(6) - type_ = ofproto.OFPAT_OUTPUT - len_ = ofproto.OFP_ACTION_OUTPUT_SIZE - - def test_init(self): - port = 6606 - max_len = 1500 - fmt = ofproto.OFP_ACTION_OUTPUT_PACK_STR - c = OFPActionOutput(port, max_len) - eq_(port, c.port) - eq_(max_len, c.max_len) - - def _test_parser(self, port, max_len): - fmt = ofproto.OFP_ACTION_OUTPUT_PACK_STR - buf = pack(fmt, self.type_, self.len_, port, max_len) - - c = OFPActionOutput(port, max_len) - - res = c.parser(buf, 0) - - eq_(res.len, self.len_) - eq_(res.type, self.type_) - eq_(res.port, port) - eq_(res.max_len, max_len) - - def test_parser_mid(self): - port = 6606 - max_len = 16 - self._test_parser(port, max_len) - - def test_parser_max(self): - port = 4294967295 - max_len = 0xffff - self._test_parser(port, max_len) - - def test_parser_min(self): - port = 0 - max_len = 0 - self._test_parser(port, max_len) - - def test_parser_p1(self): - port = 6606 - max_len = 0xffe5 - self._test_parser(port, max_len) - - def _test_serialize(self, port, max_len): - c = OFPActionOutput(port, max_len) - - buf = bytearray() - c.serialize(buf, 0) - - fmt = ofproto.OFP_ACTION_OUTPUT_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], port) - eq_(res[3], max_len) - - def test_serialize_mid(self): - port = 6606 - max_len = 16 - self._test_serialize(port, max_len) - - def test_serialize_max(self): - port = 4294967295 - max_len = 0xffff - self._test_serialize(port, max_len) - - def test_serialize_min(self): - port = 0 - max_len = 0 - self._test_serialize(port, max_len) - - def test_serialize_p1(self): - port = 6606 - max_len = 0xffe5 - self._test_serialize(port, max_len) - - -class TestOFPActionGroup(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionGroup - """ - - # OFP_ACTION_GROUP_PACK_STR - # '!HHI'...type, len, group_id - type_ = ofproto.OFPAT_GROUP - len_ = ofproto.OFP_ACTION_GROUP_SIZE - group_id = 6606 - - fmt = ofproto.OFP_ACTION_GROUP_PACK_STR - - def test_init(self): - c = OFPActionGroup(self.group_id) - eq_(self.group_id, c.group_id) - - def _test_parser(self, group_id): - buf = pack(self.fmt, self.type_, self.len_, group_id) - - res = OFPActionGroup.parser(buf, 0) - eq_(res.len, self.len_) - eq_(res.type, self.type_) - eq_(res.group_id, group_id) - - def test_parser_mid(self): - self._test_parser(self.group_id) - - def test_parser_max(self): - self._test_parser(4294967295) - - def test_parser_min(self): - self._test_parser(0) - - def _test_serialize(self, group_id): - c = OFPActionGroup(group_id) - - buf = bytearray() - c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], group_id) - - def test_serialize_mid(self): - self._test_serialize(self.group_id) - - def test_serialize_max(self): - self._test_serialize(4294967295) - - def test_serialize_min(self): - self._test_serialize(0) - - -class TestOFPActionSetQueue(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionSetQueue - """ - - # OFP_ACTION_SET_QUEUE_PACK_STR - # '!HHI'...type, len, queue_id - type_ = ofproto.OFPAT_SET_QUEUE - len_ = ofproto.OFP_ACTION_SET_QUEUE_SIZE - queue_id = 6606 - - fmt = ofproto.OFP_ACTION_SET_QUEUE_PACK_STR - - def test_init(self): - c = OFPActionSetQueue(self.queue_id) - eq_(self.queue_id, c.queue_id) - - def _test_parser(self, queue_id): - buf = pack(self.fmt, self.type_, self.len_, queue_id) - - res = OFPActionSetQueue.parser(buf, 0) - eq_(res.len, self.len_) - eq_(res.type, self.type_) - eq_(res.queue_id, queue_id) - - def test_parser_mid(self): - self._test_parser(self.queue_id) - - def test_parser_max(self): - self._test_parser(4294967295) - - def test_parser_min(self): - self._test_parser(0) - - def _test_serialize(self, queue_id): - c = OFPActionSetQueue(queue_id) - - buf = bytearray() - c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], queue_id) - - def test_serialize_mid(self): - self._test_serialize(self.queue_id) - - def test_serialize_max(self): - self._test_serialize(4294967295) - - def test_serialize_min(self): - self._test_serialize(0) - - -class TestOFPActionSetMplsTtl(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionSetMplsTtl - """ - - # OFP_ACTION_MPLS_TTL_PACK_STR - # '!HHB3x'...type, len, mpls_ttl, pad(3) - type_ = ofproto.OFPAT_SET_MPLS_TTL - len_ = ofproto.OFP_ACTION_MPLS_TTL_SIZE - mpls_ttl = 254 - - fmt = ofproto.OFP_ACTION_MPLS_TTL_PACK_STR - - def test_init(self): - c = OFPActionSetMplsTtl(self.mpls_ttl) - eq_(self.mpls_ttl, c.mpls_ttl) - - def _test_parser(self, mpls_ttl): - buf = pack(self.fmt, self.type_, self.len_, mpls_ttl) - - res = OFPActionSetMplsTtl.parser(buf, 0) - eq_(res.len, self.len_) - eq_(res.type, self.type_) - eq_(res.mpls_ttl, mpls_ttl) - - def test_parser_mid(self): - self._test_parser(self.mpls_ttl) - - def test_parser_max(self): - self._test_parser(255) - - def test_parser_min(self): - self._test_parser(0) - - def _test_serialize(self, mpls_ttl): - c = OFPActionSetMplsTtl(mpls_ttl) - - buf = bytearray() - c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], mpls_ttl) - - def test_serialize_mid(self): - self._test_serialize(self.mpls_ttl) - - def test_serialize_max(self): - self._test_serialize(255) - - def test_serialize_min(self): - self._test_serialize(0) - - -class TestOFPActionDecMplsTtl(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionDecMplsTtl - """ - - type_ = ofproto.OFPAT_DEC_MPLS_TTL - len_ = ofproto.OFP_ACTION_MPLS_TTL_SIZE - fmt = ofproto.OFP_ACTION_HEADER_PACK_STR - buf = pack(fmt, type_, len_) - c = OFPActionDecMplsTtl() - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(res.len, self.len_) - eq_(res.type, self.type_) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - - -class TestOFPActionSetNwTtl(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionSetNwTtl - """ - - # OFP_ACTION_NW_TTL_PACK_STR - # '!HHB3x'...type, len, nw_ttl, pad(3) - type_ = ofproto.OFPAT_SET_NW_TTL - len_ = ofproto.OFP_ACTION_NW_TTL_SIZE - nw_ttl = 240 - - fmt = ofproto.OFP_ACTION_NW_TTL_PACK_STR - - def test_init(self): - c = OFPActionSetNwTtl(self.nw_ttl) - eq_(self.nw_ttl, c.nw_ttl) - - def _test_parser(self, nw_ttl): - buf = pack(self.fmt, self.type_, self.len_, nw_ttl) - - res = OFPActionSetNwTtl.parser(buf, 0) - eq_(res.type, self.type_) - eq_(res.len, self.len_) - eq_(res.nw_ttl, nw_ttl) - - def test_parser_mid(self): - self._test_parser(self.nw_ttl) - - def test_parser_max(self): - self._test_parser(255) - - def test_parser_min(self): - self._test_parser(0) - - def _test_serialize(self, nw_ttl): - c = OFPActionSetNwTtl(nw_ttl) - - buf = bytearray() - c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], nw_ttl) - - def test_serialize_mid(self): - self._test_serialize(self.nw_ttl) - - def test_serialize_max(self): - self._test_serialize(255) - - def test_serialize_min(self): - self._test_serialize(0) - - -class TestOFPActionDecNwTtl(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionDecNwTtl - """ - - type_ = ofproto.OFPAT_DEC_NW_TTL - len_ = ofproto.OFP_ACTION_NW_TTL_SIZE - fmt = ofproto.OFP_ACTION_HEADER_PACK_STR - buf = pack(fmt, type_, len_) - c = OFPActionDecNwTtl() - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(res.len, self.len_) - eq_(res.type, self.type_) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - - -class TestOFPActionCopyTtlOut(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionCopyTtlOut - """ - - type_ = ofproto.OFPAT_COPY_TTL_OUT - len_ = ofproto.OFP_ACTION_HEADER_SIZE - fmt = ofproto.OFP_ACTION_HEADER_PACK_STR - buf = pack(fmt, type_, len_) - c = OFPActionCopyTtlOut() - - def test_parser(self): - res = self.c.parser(self.buf, 0) - eq_(res.len, self.len_) - eq_(res.type, self.type_) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - - -class TestOFPActionCopyTtlIn(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionCopyTtlIn - """ - - # OFP_ACTION_HEADER_PACK_STR - # '!HH'...type, len - type_ = ofproto.OFPAT_COPY_TTL_IN - len_ = ofproto.OFP_ACTION_HEADER_SIZE - fmt = ofproto.OFP_ACTION_HEADER_PACK_STR - buf = pack(fmt, type_, len_) - c = OFPActionCopyTtlIn() - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(res.len, self.len_) - eq_(res.type, self.type_) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - - -class TestOFPActionPushVlan(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionPushVlan - """ - - # OFP_ACTION_PUSH_PACK_STR - # '!HHH2x'...type, len, ethertype, pad(2) - type_ = ofproto.OFPAT_PUSH_VLAN - len_ = ofproto.OFP_ACTION_PUSH_SIZE - fmt = ofproto.OFP_ACTION_PUSH_PACK_STR - - def test_init(self): - ethertype = 0x8100 - c = OFPActionPushVlan(ethertype) - eq_(ethertype, c.ethertype) - - def _test_parser(self, ethertype): - buf = pack(self.fmt, self.type_, self.len_, ethertype) - - res = OFPActionPushVlan.parser(buf, 0) - eq_(res.type, self.type_) - eq_(res.len, self.len_) - eq_(res.ethertype, ethertype) - - def test_parser_mid(self): - self._test_parser(0x8100) - - def test_parser_max(self): - self._test_parser(0xffff) - - def test_parser_min(self): - self._test_parser(0) - - def _test_serialize(self, ethertype): - c = OFPActionPushVlan(ethertype) - buf = bytearray() - c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], ethertype) - - def test_serialize_mid(self): - self._test_serialize(0x8100) - - def test_serialize_max(self): - self._test_serialize(0xffff) - - def test_serialize_min(self): - self._test_serialize(0) - - -class TestOFPActionPushMpls(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionPushMpls - """ - - # OFP_ACTION_PUSH_PACK_STR - # '!HHH2x'...type, len, ethertype, pad(2) - type_ = ofproto.OFPAT_PUSH_MPLS - len_ = ofproto.OFP_ACTION_PUSH_SIZE - fmt = ofproto.OFP_ACTION_PUSH_PACK_STR - - def test_init(self): - ethertype = 0x8100 - c = OFPActionPushMpls(ethertype) - eq_(ethertype, c.ethertype) - - def _test_parser(self, ethertype): - buf = pack(self.fmt, self.type_, self.len_, ethertype) - - res = OFPActionPushMpls.parser(buf, 0) - eq_(res.type, self.type_) - eq_(res.len, self.len_) - eq_(res.ethertype, ethertype) - - def test_parser_mid(self): - self._test_parser(0x8100) - - def test_parser_max(self): - self._test_parser(0xffff) - - def test_parser_min(self): - self._test_parser(0) - - def _test_serialize(self, ethertype): - c = OFPActionPushMpls(ethertype) - buf = bytearray() - c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], ethertype) - - def test_serialize_mid(self): - self._test_serialize(0x8100) - - def test_serialize_max(self): - self._test_serialize(0xffff) - - def test_serialize_min(self): - self._test_serialize(0) - - -class TestOFPActionPopVlan(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionPopVlan - """ - - # OFP_ACTION_HEADER_PACK_STR - # '!HH'...type, len - type_ = ofproto.OFPAT_POP_VLAN - len_ = ofproto.OFP_ACTION_HEADER_SIZE - fmt = ofproto.OFP_ACTION_HEADER_PACK_STR - buf = pack(fmt, type_, len_) - c = OFPActionPopVlan() - - def test_parser(self): - res = self.c.parser(self.buf, 0) - eq_(self.type_, res.type) - eq_(self.len_, res.len) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - - -class TestOFPActionPopMpls(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionPopMpls - """ - - # OFP_ACTION_POP_MPLS_PACK_STR - # '!HHH2x'...type, len, ethertype, pad(2) - type_ = ofproto.OFPAT_POP_MPLS - len_ = ofproto.OFP_ACTION_POP_MPLS_SIZE - fmt = ofproto.OFP_ACTION_POP_MPLS_PACK_STR - - def test_init(self): - ethertype = 0x8100 - c = OFPActionPopMpls(ethertype) - eq_(ethertype, c.ethertype) - - def _test_parser(self, ethertype): - buf = pack(self.fmt, self.type_, self.len_, ethertype) - - res = OFPActionPopMpls.parser(buf, 0) - eq_(res.type, self.type_) - eq_(res.len, self.len_) - eq_(res.ethertype, ethertype) - - def test_parser_mid(self): - self._test_parser(0x8100) - - def test_parser_max(self): - self._test_parser(0xffff) - - def test_parser_min(self): - self._test_parser(0) - - def _test_serialize(self, ethertype): - c = OFPActionPopMpls(ethertype) - buf = bytearray() - c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], ethertype) - - def test_serialize_mid(self): - self._test_serialize(0x8100) - - def test_serialize_max(self): - self._test_serialize(0xffff) - - def test_serialize_min(self): - self._test_serialize(0) - - -class TestOFPActionSetField(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionSetField - """ - - type_ = ofproto.OFPAT_SET_FIELD - header = ofproto.OXM_OF_IN_PORT - in_port = 6606 - - field = MTInPort(header, in_port) - length = ofproto.OFP_ACTION_SET_FIELD_SIZE + field.oxm_len() - len_ = utils.round_up(length, 8) - - fmt = '!HHII4x' - buf = pack(fmt, type_, len_, header, in_port) - - c = OFPActionSetField(field) - - def test_init(self): - eq_(self.field, self.c.field) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(res.type, self.type_) - eq_(res.len, self.len_) - eq_(res.field.header, self.header) - eq_(res.field.value, self.in_port) - - def test_serialize(self): - buf = bytearray() - self.c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], self.header) - eq_(res[3], self.in_port) - - -class TestOFPActionExperimenter(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPActionExperimenter - """ - - # OFP_ACTION_EXPERIMENTER_HEADER_PACK_STR v1.2 - # '!HHI'...type, len, experimenter - type_ = ofproto.OFPAT_EXPERIMENTER - len_ = ofproto.OFP_ACTION_EXPERIMENTER_HEADER_SIZE - fmt = ofproto.OFP_ACTION_EXPERIMENTER_HEADER_PACK_STR - - def test_init(self): - experimenter = 4294967295 - c = OFPActionExperimenter(experimenter) - eq_(experimenter, c.experimenter) - - def _test_parser(self, experimenter): - buf = pack(self.fmt, self.type_, self.len_, experimenter) - - res = OFPActionExperimenter.parser(buf, 0) - eq_(res.type, self.type_) - eq_(res.len, self.len_) - eq_(res.experimenter, experimenter) - - def test_parser_mid(self): - experimenter = 2147483648 - self._test_parser(experimenter) - - def test_parser_max(self): - experimenter = 4294967295 - self._test_parser(experimenter) - - def test_parser_min(self): - experimenter = 0 - self._test_parser(experimenter) - - def _test_serialize(self, experimenter): - c = OFPActionExperimenter(experimenter) - - buf = bytearray() - c.serialize(buf, 0) - - res = struct.unpack(self.fmt, six.binary_type(buf)) - eq_(res[0], self.type_) - eq_(res[1], self.len_) - eq_(res[2], experimenter) - - def test_serialize_mid(self): - experimenter = 2147483648 - self._test_serialize(experimenter) - - def test_serialize_max(self): - experimenter = 4294967295 - self._test_serialize(experimenter) - - def test_serialize_min(self): - experimenter = 0 - self._test_serialize(experimenter) - - -class TestOFPBucket(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPBucket - """ - - def test_init(self): - # OFP_BUCKET_PACK_STR - # '!HHII4x'...len, weight, watch_port, watch_group, pad(4) - weight = 4386 - watch_port = 6606 - watch_group = 3 - - # OFP_ACTION (OFP_ACTION_OUTPUT) - port = 3 - max_len = 1500 - actions = [OFPActionOutput(port, max_len)] - - c = OFPBucket(weight, watch_port, watch_group, actions) - eq_(weight, c.weight) - eq_(watch_port, c.watch_port) - eq_(watch_group, c.watch_group) - eq_(1, len(c.actions)) - eq_(port, c.actions[0].port) - eq_(max_len, c.actions[0].max_len) - - def _test_parser(self, weight, watch_port, watch_group, action_cnt): - # OFP_BUCKET_PACK_STR - # '!HHII4x'...len, weight, watch_port, watch_group, pad(4) - len_ = ofproto.OFP_BUCKET_SIZE \ - + (ofproto.OFP_ACTION_OUTPUT_SIZE * action_cnt) - - fmt = ofproto.OFP_BUCKET_PACK_STR - buf = pack(fmt, len_, weight, watch_port, watch_group) - - actions = [] - for a in range(action_cnt): - # OFP_ACTION (OFP_ACTION_OUTPUT) - port = a - max_len = ofproto.OFP_ACTION_OUTPUT_SIZE - action = OFPActionOutput(port, max_len) - actions.append(action) - buf_actions = bytearray() - actions[a].serialize(buf_actions, 0) - buf += six.binary_type(buf_actions) - - res = OFPBucket.parser(buf, 0) - - # 16 - eq_(weight, res.weight) - eq_(watch_port, res.watch_port) - eq_(watch_group, res.watch_group) - - # 16 + 16 * action_cnt < 65535 byte - # action_cnt <= 4094 - for a in range(action_cnt): - eq_(actions[a].type, res.actions[a].type) - eq_(actions[a].len, res.actions[a].len) - eq_(actions[a].port, res.actions[a].port) - eq_(actions[a].max_len, res.actions[a].max_len) - - def test_parser_mid(self): - weight = 4386 - watch_port = 6606 - watch_group = 3 - action_cnt = 2047 - self._test_parser(weight, watch_port, - watch_group, action_cnt) - - def test_parser_max(self): - weight = 65535 - watch_port = 4294967295 - watch_group = 4294967295 - action_cnt = 4094 - self._test_parser(weight, watch_port, - watch_group, action_cnt) - - def test_parser_min(self): - weight = 0 - watch_port = 0 - watch_group = 0 - action_cnt = 0 - self._test_parser(weight, watch_port, - watch_group, action_cnt) - - def _test_serialize(self, weight, watch_port, watch_group, - action_cnt): - # OFP_BUCKET_PACK_STR - # '!HHII4x'...len, weight, watch_port, watch_group, pad(4) - len_ = ofproto.OFP_BUCKET_SIZE \ - + (ofproto.OFP_ACTION_OUTPUT_SIZE * action_cnt) - - actions = [] - for a in range(action_cnt): - # OFP_ACTION (OFP_ACTION_OUTPUT) - port = a - max_len = ofproto.OFP_ACTION_OUTPUT_SIZE - action = OFPActionOutput(port, max_len) - actions.append(action) - - c = OFPBucket(weight, watch_port, watch_group, actions) - - buf = bytearray() - c.serialize(buf, 0) - - fmt = ofproto.OFP_BUCKET_PACK_STR - for a in range(action_cnt): - fmt += ofproto.OFP_ACTION_OUTPUT_PACK_STR[1:] - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(res[0], len_) - eq_(res[1], weight) - eq_(res[2], watch_port) - eq_(res[3], watch_group) - - for a in range(action_cnt): - d = 4 + a * 4 - eq_(res[d], actions[a].type) - eq_(res[d + 1], actions[a].len) - eq_(res[d + 2], actions[a].port) - eq_(res[d + 3], actions[a].max_len) - - def test_serialize_mid(self): - weight = 4386 - watch_port = 6606 - watch_group = 3 - action_cnt = 2047 - self._test_serialize(weight, watch_port, - watch_group, action_cnt) - - def test_serialize_max(self): - weight = 65535 - watch_port = 4294967295 - watch_group = 4294967295 - action_cnt = 4094 - self._test_serialize(weight, watch_port, - watch_group, action_cnt) - - def test_serialize_min(self): - weight = 0 - watch_port = 0 - watch_group = 0 - action_cnt = 0 - self._test_serialize(weight, watch_port, - watch_group, action_cnt) - - -class TestOFPGroupMod(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPGroupMod - """ - - def test_init(self): - # OFP_GROUP_MOD_PACK_STR - # '!HBBI'...command, type, pad, group_id - command = ofproto.OFPFC_ADD - type_ = ofproto.OFPGT_SELECT - group_id = 6606 - - # OFP_BUCKET - weight = 4386 - watch_port = 8006 - watch_group = 3 - - # OFP_ACTION (OFP_ACTION_OUTPUT) - port = 10 - max_len = 2000 - actions = [OFPActionOutput(port, max_len)] - - buckets = [OFPBucket(weight, watch_port, watch_group, actions)] - - c = OFPGroupMod(_Datapath, command, type_, group_id, buckets) - eq_(command, c.command) - eq_(type_, c.type) - eq_(group_id, c.group_id) - eq_(1, len(c.buckets)) - eq_(1, len(c.buckets[0].actions)) - eq_(port, c.buckets[0].actions[0].port) - eq_(max_len, c.buckets[0].actions[0].max_len) - - def _test_serialize(self, command, type_, group_id, bucket_cnt): - len_ = ofproto.OFP_BUCKET_SIZE \ - + ofproto.OFP_ACTION_OUTPUT_SIZE - - buckets = [] - for b in range(bucket_cnt): - # OFP_BUCKET - weight = watch_port = watch_group = port = b - actions = [OFPActionOutput(port, 0)] - bucket = OFPBucket(weight, watch_port, watch_group, actions) - buckets.append(bucket) - - c = OFPGroupMod(_Datapath, command, type_, group_id, buckets) - - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_GROUP_MOD, c.msg_type) - eq_(0, c.xid) - eq_(len(c.buf), c.msg_len) - - # 16 byte - fmt = ofproto.OFP_HEADER_PACK_STR \ - + ofproto.OFP_GROUP_MOD_PACK_STR[1:] - - # 16 + (16 + 16) * bucket_cnt < 65535 byte - # bucket_cnt <= 2047 - for b in range(bucket_cnt): - fmt += ofproto.OFP_BUCKET_PACK_STR[1:] \ - + ofproto.OFP_ACTION_OUTPUT_PACK_STR[1:] - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - msg_len = ofproto.OFP_GROUP_MOD_SIZE \ - + (len_ * bucket_cnt) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_GROUP_MOD) - eq_(res[2], msg_len) - eq_(res[3], 0) - eq_(res[4], command) - eq_(res[5], type_) - eq_(res[6], group_id) - - for d in range(bucket_cnt): - e = 7 + d * 8 - eq_(res[e + 1], buckets[d].weight) - eq_(res[e + 2], buckets[d].watch_port) - eq_(res[e + 3], buckets[d].watch_group) - eq_(res[e + 4], buckets[d].actions[0].type) - eq_(res[e + 5], buckets[d].actions[0].len) - eq_(res[e + 6], buckets[d].actions[0].port) - eq_(res[e + 7], buckets[d].actions[0].max_len) - - def test_serialize_mid(self): - command = 32768 - type_ = 128 - group_id = 6606 - bucket_cnt = 1023 - self._test_serialize(command, type_, group_id, bucket_cnt) - - def test_serialize_max(self): - command = 65535 - type_ = 255 - group_id = 4294967295 - bucket_cnt = 2047 - self._test_serialize(command, type_, group_id, bucket_cnt) - - def test_serialize_min(self): - command = 0 - type_ = 0 - group_id = 0 - bucket_cnt = 0 - self._test_serialize(command, type_, group_id, bucket_cnt) - - def test_serialize_p1(self): - command = 1 - type_ = 1 - group_id = 6606 - bucket_cnt = 1023 - self._test_serialize(command, type_, group_id, bucket_cnt) - - def test_serialize_p2(self): - command = 1 - type_ = 2 - group_id = 6606 - bucket_cnt = 1023 - self._test_serialize(command, type_, group_id, bucket_cnt) - - def test_serialize_p3(self): - command = 2 - type_ = 3 - group_id = 6606 - bucket_cnt = 1023 - self._test_serialize(command, type_, group_id, bucket_cnt) - - -class TestOFPPortMod(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPPortMod - """ - - # OFP_PORT_MOD_PACK_STR v1.2 - # '!I4xs2xIII4x'...port_no, pad(4), hw_addr, pad(2), - # config, mask, advertise, pad(4) - port_no = 1119692796 - hw_addr = 'e8:fe:5e:a9:68:6c' - config = 2226555987 - mask = 1678244809 - advertise = 2025421682 - - def test_init(self): - c = OFPPortMod(_Datapath, self.port_no, self.hw_addr, - self.config, self.mask, self.advertise) - eq_(self.port_no, c.port_no) - eq_(self.hw_addr, c.hw_addr) - eq_(self.config, c.config) - eq_(self.mask, c.mask) - eq_(self.advertise, c.advertise) - - def _test_serialize(self, port_no, hw_addr, config, mask, advertise): - c = OFPPortMod(_Datapath, port_no, hw_addr, config, - mask, advertise) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_PORT_MOD, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_PORT_MOD_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_PORT_MOD) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], port_no) - eq_(res[5], addrconv.mac.text_to_bin(hw_addr)) - eq_(res[6], config) - eq_(res[7], mask) - eq_(res[8], advertise) - - def test_serialize_mid(self): - self._test_serialize(self.port_no, self.hw_addr, - self.config, self.mask, self.advertise) - - def test_serialize_max(self): - port_no = ofproto.OFPP_ANY - hw_addr = 'ff:ff:ff:ff:ff:ff' - config = 0xffffffff - mask = 0xffffffff - advertise = 0xffffffff - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_min(self): - port_no = 0 - hw_addr = '00:00:00:00:00:00' - config = 0 - mask = 0 - advertise = 0 - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p1(self): - port_no = ofproto.OFPP_MAX - hw_addr = self.hw_addr - config = ofproto.OFPPC_PORT_DOWN - mask = ofproto.OFPPC_PORT_DOWN - advertise = ofproto.OFPPF_10MB_HD - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p2(self): - port_no = ofproto.OFPP_IN_PORT - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_RECV - mask = ofproto.OFPPC_NO_RECV - advertise = ofproto.OFPPF_10MB_FD - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p3(self): - port_no = ofproto.OFPP_TABLE - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_FWD - mask = ofproto.OFPPC_NO_FWD - advertise = ofproto.OFPPF_100MB_HD - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p4(self): - port_no = ofproto.OFPP_NORMAL - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_100MB_FD - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p5(self): - port_no = ofproto.OFPP_FLOOD - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_1GB_HD - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p6(self): - port_no = ofproto.OFPP_ALL - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_1GB_FD - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p7(self): - port_no = ofproto.OFPP_CONTROLLER - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_10GB_FD - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p8(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_40GB_FD - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p9(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_100GB_FD - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p10(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_1TB_FD - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p11(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_OTHER - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p12(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_COPPER - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p13(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_FIBER - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p14(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_AUTONEG - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p15(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_PAUSE - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - def test_serialize_p16(self): - port_no = ofproto.OFPP_LOCAL - hw_addr = self.hw_addr - config = ofproto.OFPPC_NO_PACKET_IN - mask = ofproto.OFPPC_NO_PACKET_IN - advertise = ofproto.OFPPF_PAUSE_ASYM - self._test_serialize(port_no, hw_addr, config, mask, advertise) - - -class TestOFPTableMod(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPTableMod - """ - - # OFP_PORT_TABLE_PACK_STR v1.2 - # '!B3xI'...table_id, pad(3), config - table_id = 3 - config = 2226555987 - - def test_init(self): - c = OFPTableMod(_Datapath, self.table_id, self.config) - eq_(self.table_id, c.table_id) - eq_(self.config, c.config) - - def _test_serialize(self, table_id, config): - c = OFPTableMod(_Datapath, table_id, config) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_TABLE_MOD, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_TABLE_MOD_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_TABLE_MOD) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], table_id) - eq_(res[5], config) - - def test_serialize_mid(self): - self._test_serialize(self.table_id, self.config) - - def test_serialize_max(self): - table_id = ofproto.OFPTT_ALL - config = 0xffffffff - self._test_serialize(table_id, config) - - def test_serialize_min(self): - table_id = 0 - config = 0 - self._test_serialize(table_id, config) - - def test_serialize_p1(self): - table_id = ofproto.OFPTT_MAX - config = ofproto.OFPTC_TABLE_MISS_CONTINUE - self._test_serialize(table_id, config) - - def test_serialize_p2(self): - table_id = ofproto.OFPTT_MAX - config = ofproto.OFPTC_TABLE_MISS_DROP - self._test_serialize(table_id, config) - - def test_serialize_p3(self): - table_id = ofproto.OFPTT_MAX - config = ofproto.OFPTC_TABLE_MISS_MASK - self._test_serialize(table_id, config) - - -class TestOFPStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPStatsRequest - """ - - type_ = ofproto.OFPST_DESC - c = OFPStatsRequest(_Datapath, type_) - - def test_init(self): - eq_(self.type_, self.c.type) - eq_(0, self.c.flags) - - def test_serialize_body(self): - len_ = ofproto.OFP_HEADER_SIZE \ - + ofproto.OFP_STATS_REQUEST_SIZE - self.c.buf = bytearray(len_) - self.c._serialize_body() - - fmt = ofproto.OFP_STATS_REQUEST_PACK_STR - res = struct.unpack_from(fmt, six.binary_type(self.c.buf), - ofproto.OFP_HEADER_SIZE) - - eq_(res[0], self.type_) - eq_(res[1], 0) - - -class TestOFPStatsReply(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPStatsReply - """ - - c = OFPStatsReply(_Datapath) - - def test_parser_single_struct_true(self): - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_STATS_REPLY - msg_len = ofproto.OFP_STATS_REPLY_SIZE \ - + ofproto.OFP_AGGREGATE_STATS_REPLY_SIZE - xid = 2495926989 - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_STATS_REPLY_PACK_STR - # '!HH4x'...type, flags, pad(4) - type_ = ofproto.OFPST_AGGREGATE - flags = 41802 - - fmt = ofproto.OFP_STATS_REPLY_PACK_STR - buf += pack(fmt, type_, flags) - - # OFP_AGGREGATE_STATS_REPLY_PACK_STR - packet_count = 5142202600015232219 - byte_count = 2659740543924820419 - flow_count = 1344694860 - body = OFPAggregateStatsReply(packet_count, byte_count, flow_count) - - fmt = ofproto.OFP_AGGREGATE_STATS_REPLY_PACK_STR - buf += pack(fmt, packet_count, byte_count, flow_count) - - res = self.c.parser(object, version, msg_type, msg_len, xid, buf) - - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(type_, res.type) - eq_(flags, res.flags) - eq_(packet_count, res.body.packet_count) - eq_(byte_count, res.body.byte_count) - eq_(flow_count, res.body.flow_count) - - def test_parser_single_struct_flase(self): - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_STATS_REPLY - msg_len = ofproto.OFP_STATS_REPLY_SIZE \ - + ofproto.OFP_QUEUE_STATS_SIZE - xid = 2495926989 - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_STATS_REPLY_PACK_STR - # '!HH4x'...type, flags, pad(4) - type_ = ofproto.OFPST_QUEUE - flags = 11884 - - fmt = ofproto.OFP_STATS_REPLY_PACK_STR - buf += pack(fmt, type_, flags) - - # OFP_QUEUE_STATS_PACK_STR - port_no = 41186 - queue_id = 6606 - tx_bytes = 8638420181865882538 - tx_packets = 2856480458895760962 - tx_errors = 6283093430376743019 - body = [OFPQueueStats(port_no, queue_id, tx_bytes, tx_packets, - tx_errors)] - - fmt = ofproto.OFP_QUEUE_STATS_PACK_STR - buf += pack(fmt, port_no, queue_id, tx_bytes, tx_packets, tx_errors) - - res = self.c.parser(object, version, msg_type, msg_len, xid, buf) - - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(type_, res.type) - eq_(flags, res.flags) - eq_(port_no, res.body[0].port_no) - eq_(queue_id, res.body[0].queue_id) - eq_(tx_bytes, res.body[0].tx_bytes) - eq_(tx_packets, res.body[0].tx_packets) - eq_(tx_errors, res.body[0].tx_errors) - - def test_parser_max(self): - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_STATS_REPLY - msg_len = ofproto.OFP_STATS_REPLY_SIZE - xid = 0xffffffff - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_STATS_REPLY_PACK_STR - # '!HH4x'...type, flags, pad(4) - type_ = ofproto.OFPST_QUEUE - flags = 0xffff - - fmt = ofproto.OFP_STATS_REPLY_PACK_STR - buf += pack(fmt, type_, flags) - res = self.c.parser(object, version, msg_type, msg_len, xid, buf) - - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(type_, res.type) - eq_(flags, res.flags) - - def test_parser_min(self): - # OFP_HEADER_PACK_STR - # '!BBHI'...version, msg_type, msg_len, xid - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_STATS_REPLY - msg_len = ofproto.OFP_STATS_REPLY_SIZE - xid = 0 - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_STATS_REPLY_PACK_STR - # '!HH4x'...type, flags, pad(4) - type_ = ofproto.OFPST_QUEUE - flags = 0 - - fmt = ofproto.OFP_STATS_REPLY_PACK_STR - buf += pack(fmt, type_, flags) - res = self.c.parser(object, version, msg_type, msg_len, xid, buf) - - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(type_, res.type) - eq_(flags, res.flags) - - -class TestOFPDescStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPDescStatsRequest - """ - - def test_serialize(self): - c = OFPDescStatsRequest(_Datapath) - c.serialize() - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_STATS_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], ofproto.OFPST_DESC) - eq_(res[5], 0) - - -class TestOFPDescStats(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPDescStats - """ - - # OFP_DESC_STATS_PACK_STR - # '!256s256s256s32s256s'...mfr_desc, hw_desc, sw_desc, serial_num, dp_desc - mfr_desc = b'mfr_desc'.ljust(256) - hw_desc = b'hw_desc'.ljust(256) - sw_desc = b'sw_desc'.ljust(256) - serial_num = b'serial_num'.ljust(32) - dp_desc = b'dp_desc'.ljust(256) - - buf = mfr_desc \ - + hw_desc \ - + sw_desc \ - + serial_num \ - + dp_desc - - c = OFPDescStats(mfr_desc, hw_desc, sw_desc, serial_num, dp_desc) - - def test_init(self): - eq_(self.mfr_desc, self.c.mfr_desc) - eq_(self.hw_desc, self.c.hw_desc) - eq_(self.sw_desc, self.c.sw_desc) - eq_(self.serial_num, self.c.serial_num) - eq_(self.dp_desc, self.c.dp_desc) - - def test_parser(self): - res = self.c.parser(self.buf, 0) - - eq_(self.mfr_desc, res.mfr_desc) - eq_(self.hw_desc, res.hw_desc) - eq_(self.sw_desc, res.sw_desc) - eq_(self.serial_num, res.serial_num) - eq_(self.dp_desc, res.dp_desc) - - -class TestOFPFlowStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPFlowStatsRequest - """ - - # OFP_FLOW_STATS_REQUEST_PACK_STR - # '!B3xII4xQQ'...table_id, pad(3), out_port, out_group, pad(4), - # cookie, cookie_mask - table_id = 3 - out_port = 65037 - out_group = 6606 - cookie = 2127614848199081640 - cookie_mask = 2127614848199081641 - - def test_init(self): - match = OFPMatch() - in_port = 3 - match.set_in_port(in_port) - - c = OFPFlowStatsRequest(_Datapath, self.table_id, self.out_port, - self.out_group, self.cookie, self.cookie_mask, - match) - - eq_(self.table_id, c.table_id) - eq_(self.out_port, c.out_port) - eq_(self.out_group, c.out_group) - eq_(self.cookie, c.cookie) - eq_(self.cookie_mask, c.cookie_mask) - eq_(in_port, c.match._flow.in_port) - - def _test_serialize(self, table_id, out_port, out_group, - cookie, cookie_mask): - match = OFPMatch() - dl_type = 0x800 - match.set_dl_type(dl_type) - - c = OFPFlowStatsRequest(_Datapath, table_id, out_port, - out_group, cookie, cookie_mask, match) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_STATS_REQUEST, c.msg_type) - eq_(0, c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR \ - + ofproto.OFP_STATS_REQUEST_PACK_STR[1:] \ - + ofproto.OFP_FLOW_STATS_REQUEST_PACK_STR[1:] \ - + 'HHHBB' \ - + MTEthType.pack_str[1:] + '6x' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_STATS_REQUEST) - size = ofproto.OFP_STATS_REPLY_SIZE \ - + ofproto.OFP_FLOW_STATS_REQUEST_SIZE \ - + calcsize(MTEthType.pack_str + '6x') - eq_(res[2], size) - eq_(res[3], 0) - eq_(res[4], ofproto.OFPST_FLOW) - eq_(res[5], 0) - eq_(res[6], table_id) - eq_(res[7], out_port) - eq_(res[8], out_group) - eq_(res[9], cookie) - eq_(res[10], cookie_mask) - # match - eq_(res[11], ofproto.OFPMT_OXM) - eq_(res[12], 10) - eq_(res[13], ofproto.OFPXMC_OPENFLOW_BASIC) - eq_(res[14] >> 1, ofproto.OFPXMT_OFB_ETH_TYPE) - eq_(res[14] & 0b0001, 0) - eq_(res[15], calcsize(MTEthType.pack_str)) - eq_(res[16], dl_type) - - def test_serialize_mid(self): - self._test_serialize(self.table_id, self.out_port, self.out_group, - self.cookie, self.cookie_mask) - - def test_serialize_max(self): - table_id = 0xff - out_port = 0xffff - out_group = 0xffff - cookie = 0xffffffff - cookie_mask = 0xffffffff - self._test_serialize(table_id, out_port, out_group, - cookie, cookie_mask) - - def test_serialize_min(self): - table_id = 0 - out_port = 0 - out_group = 0 - cookie = 0 - cookie_mask = 0 - self._test_serialize(table_id, out_port, out_group, - cookie, cookie_mask) - - def test_serialize_p1(self): - table_id = ofproto.OFPTT_MAX - self._test_serialize(table_id, self.out_port, self.out_group, - self.cookie, self.cookie_mask) - - -class TestOFPFlowStats(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPFlowStats - """ - - def test_init(self): - length = ofproto.OFP_FLOW_STATS_SIZE - table_id = 81 - duration_sec = 2484712402 - duration_nsec = 3999715196 - priority = 57792 - idle_timeout = 36368 - hard_timeout = 54425 - cookie = 793171083674290912 - packet_count = 5142202600015232219 - byte_count = 2659740543924820419 - - match = OFPMatch() - in_port = 2 - match.set_in_port(in_port) - - goto_table = 3 - instructions = [OFPInstructionGotoTable(goto_table)] - c = OFPFlowStats(table_id, duration_sec, duration_nsec, - priority, idle_timeout, hard_timeout, cookie, - packet_count, byte_count, match, instructions) - - eq_(table_id, c.table_id) - eq_(duration_sec, c.duration_sec) - eq_(duration_nsec, c.duration_nsec) - eq_(priority, c.priority) - eq_(idle_timeout, c.idle_timeout) - eq_(hard_timeout, c.hard_timeout) - eq_(cookie, c.cookie) - eq_(packet_count, c.packet_count) - eq_(byte_count, c.byte_count) - eq_(in_port, c.match._flow.in_port) - eq_(goto_table, c.instructions[0].table_id) - - def _test_parser(self, table_id, duration_sec, duration_nsec, - priority, idle_timeout, hard_timeout, cookie, - packet_count, byte_count, inst_cnt=0): - - length = ofproto.OFP_FLOW_STATS_SIZE \ - + calcsize(MTEthType.pack_str[1:] + '6x') \ - + ofproto.OFP_INSTRUCTION_GOTO_TABLE_SIZE * inst_cnt - - # OFP_FLOW_STATS_PACK_STR - buf = pack(ofproto.OFP_FLOW_STATS_PACK_STR, - length, table_id, duration_sec, duration_nsec, - priority, idle_timeout, hard_timeout, cookie, - packet_count, byte_count) - - # match - match = OFPMatch() - dl_type = 0x0800 - match.set_dl_type(dl_type) - match_buf = bytearray() - match.serialize(match_buf, 0) - buf += six.binary_type(match_buf) - - # instructions - # 56 + 8 + 8 * inst_cnt <= 65535 - # inst_cnt <= 8183 - for i in range(inst_cnt): - inst = OFPInstructionGotoTable(1) - inst_buf = bytearray() - inst.serialize(inst_buf, 0) - buf += six.binary_type(inst_buf) - - # parse - res = OFPFlowStats.parser(buf, 0) - eq_(length, res.length) - eq_(table_id, res.table_id) - eq_(duration_sec, res.duration_sec) - eq_(duration_nsec, res.duration_nsec) - eq_(priority, res.priority) - eq_(idle_timeout, res.idle_timeout) - eq_(hard_timeout, res.hard_timeout) - eq_(cookie, res.cookie) - eq_(packet_count, res.packet_count) - eq_(byte_count, res.byte_count) - eq_(dl_type, res.match.fields[0].value) - for i in range(inst_cnt): - eq_(1, res.instructions[i].table_id) - - def test_parser_mid(self): - table_id = 81 - duration_sec = 2484712402 - duration_nsec = 3999715196 - priority = 57792 - idle_timeout = 36368 - hard_timeout = 54425 - cookie = 793171083674290912 - packet_count = 5142202600015232219 - byte_count = 2659740543924820419 - inst_cnt = 2 - - self._test_parser(table_id, duration_sec, duration_nsec, - priority, idle_timeout, hard_timeout, cookie, - packet_count, byte_count, inst_cnt) - - def test_parser_max(self): - table_id = 0xff - duration_sec = 0xffff - duration_nsec = 0xffff - priority = 0xffff - idle_timeout = 0xff - hard_timeout = 0xff - cookie = 0xffffffffffffffff - packet_count = 0xffffffffffffffff - byte_count = 0xffffffffffffffff - inst_cnt = 8183 - - self._test_parser(table_id, duration_sec, duration_nsec, - priority, idle_timeout, hard_timeout, cookie, - packet_count, byte_count, inst_cnt) - - def test_parser_min(self): - self._test_parser(0, 0, 0, 0, 0, 0, 0, 0, 0) - - -class TestOFPAggregateStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPAggregateStatsRequest - """ - - # OFP_AGGREGATE_STATS_REQUEST_PACK_STR - # '!B3xII4xQQ'...table_id, pad(3), out_port, out_group, pad(4), - # cookie, cookie_mask - table_id = 3 - out_port = 65037 - out_group = 6606 - cookie = 2127614848199081640 - cookie_mask = 2127614848199081641 - - def test_init(self): - match = OFPMatch() - dl_type = 0x800 - match.set_dl_type(dl_type) - c = OFPAggregateStatsRequest(_Datapath, self.table_id, - self.out_port, self.out_group, - self.cookie, self.cookie_mask, - match) - - eq_(self.table_id, c.table_id) - eq_(self.out_port, c.out_port) - eq_(self.out_group, c.out_group) - eq_(self.cookie, c.cookie) - eq_(self.cookie_mask, c.cookie_mask) - eq_(dl_type, c.match._flow.dl_type) - - def _test_serialize(self, table_id, out_port, out_group, - cookie, cookie_mask): - match = OFPMatch() - dl_type = 0x800 - match.set_dl_type(dl_type) - c = OFPAggregateStatsRequest(_Datapath, table_id, - out_port, out_group, cookie, - cookie_mask, match) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_STATS_REQUEST, c.msg_type) - eq_(0, c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR \ - + ofproto.OFP_STATS_REQUEST_PACK_STR[1:] \ - + ofproto.OFP_AGGREGATE_STATS_REQUEST_PACK_STR[1:] \ - + 'HHHBB' \ - + MTEthType.pack_str[1:] + '6x' - - res = struct.unpack(fmt, six.binary_type(c.buf)) - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_STATS_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], ofproto.OFPST_AGGREGATE) - eq_(res[5], 0) - eq_(res[6], table_id) - eq_(res[7], out_port) - eq_(res[8], out_group) - eq_(res[9], cookie) - eq_(res[10], cookie_mask) - # match - eq_(res[11], ofproto.OFPMT_OXM) - eq_(res[12], 10) - eq_(res[13], ofproto.OFPXMC_OPENFLOW_BASIC) - eq_(res[14] >> 1, ofproto.OFPXMT_OFB_ETH_TYPE) - eq_(res[14] & 0b0001, 0) - eq_(res[15], calcsize(MTEthType.pack_str)) - eq_(res[16], dl_type) - - def test_serialize_mid(self): - self._test_serialize(self.table_id, self.out_port, self.out_group, - self.cookie, self.cookie_mask) - - def test_serialize_max(self): - table_id = 0xff - out_port = 0xffffffff - out_group = 0xffffffff - cookie = 0xffffffff - cookie_mask = 0xffffffff - self._test_serialize(table_id, out_port, out_group, - cookie, cookie_mask) - - def test_serialize_min(self): - table_id = 0 - out_port = 0 - out_group = 0 - cookie = 0 - cookie_mask = 0 - self._test_serialize(table_id, out_port, out_group, - cookie, cookie_mask) - - def test_serialize_p1(self): - table_id = ofproto.OFPTT_MAX - self._test_serialize(table_id, self.out_port, self.out_group, - self.cookie, self.cookie_mask) - - -class TestOFPAggregateStatsReply(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPAggregateStatsReply - """ - - # OFP_AGGREGATE_STATS_REPLY_PACK_STR - # '!QQI4x'...packet_count, byte_count, flow_count, pad(4) - packet_count = 5142202600015232219 - byte_count = 2659740543924820419 - flow_count = 1344694860 - - def test_init(self): - c = OFPAggregateStatsReply(self.packet_count, self.byte_count, - self.flow_count) - - eq_(c.packet_count, self.packet_count) - eq_(c.byte_count, self.byte_count) - eq_(c.flow_count, self.flow_count) - - def _test_parser(self, packet_count, byte_count, flow_count): - fmt = ofproto.OFP_AGGREGATE_STATS_REPLY_PACK_STR - buf = pack(fmt, packet_count, byte_count, flow_count) - - res = OFPAggregateStatsReply.parser(buf, 0) - eq_(packet_count, res.packet_count) - eq_(byte_count, res.byte_count) - eq_(flow_count, res.flow_count) - - def test_parser_mid(self): - self._test_parser(self.packet_count, self.byte_count, - self.flow_count) - - def test_parser_max(self): - packet_count = 18446744073709551615 - byte_count = 18446744073709551615 - flow_count = 4294967295 - self._test_parser(packet_count, byte_count, - flow_count) - - def test_parser_min(self): - packet_count = 0 - byte_count = 0 - flow_count = 0 - self._test_parser(packet_count, byte_count, - flow_count) - - -class TestOFPTableStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPTableStatsRequest - """ - - def test_serialize(self): - c = OFPTableStatsRequest(_Datapath) - c.serialize() - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_STATS_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], ofproto.OFPST_TABLE) - eq_(res[5], 0) - - -class TestOFPTableStats(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPTableStats - """ - - def test_init(self): - table_id = 91 - name = 'name' - match = 1270985291017894273 - wildcards = 3316608530 - write_actions = 2484712402 - apply_actions = 3999715196 - write_setfields = 5142202600015232219 - apply_setfields = 2659740543924820419 - metadata_match = 2127614848199081640 - metadata_write = 2127614848199081641 - instructions = 1119692796 - config = 2226555987 - max_entries = 2506913869 - active_count = 2024581150 - lookup_count = 4620020561814017052 - matched_count = 2825167325263435621 - - res = OFPTableStats(table_id, name, match, wildcards, write_actions, - apply_actions, write_setfields, apply_setfields, - metadata_match, metadata_write, instructions, - config, max_entries, active_count, lookup_count, - matched_count) - - eq_(table_id, res.table_id) - eq_(name, res.name) - eq_(match, res.match) - eq_(wildcards, res.wildcards) - eq_(write_actions, res.write_actions) - eq_(apply_actions, res.apply_actions) - eq_(write_setfields, res.write_setfields) - eq_(apply_setfields, res.apply_setfields) - eq_(metadata_match, res.metadata_match) - eq_(metadata_write, res.metadata_write) - eq_(instructions, res.instructions) - eq_(config, res.config) - eq_(max_entries, res.max_entries) - eq_(active_count, res.active_count) - eq_(lookup_count, res.lookup_count) - eq_(matched_count, res.matched_count) - - def _test_parser(self, table_id, name, match, wildcards, write_actions, - apply_actions, write_setfields, apply_setfields, - metadata_match, metadata_write, instructions, config, - max_entries, active_count, lookup_count, matched_count): - # OFP_TABLE_STATS_PACK_STR - # '!B7x32sQQIIQQQQIIIIQQ' - # ...table_id, name, match, wildcards, write_actions, apply_actions, - # write_setfields, apply_setfields', metadata_match, metadata_write, - # instructions, config, max_entries, - # active_count, lookup_count, matched_count - fmt = ofproto.OFP_TABLE_STATS_PACK_STR - buf = pack(fmt, table_id, name, - match, wildcards, write_actions, - apply_actions, write_setfields, apply_setfields, - metadata_match, metadata_write, instructions, config, - max_entries, active_count, lookup_count, matched_count) - - res = OFPTableStats.parser(buf, 0) - - eq_(table_id, res.table_id) - eq_(name, res.name.replace(b'\x00', b'')) - eq_(match, res.match) - eq_(wildcards, res.wildcards) - eq_(write_actions, res.write_actions) - eq_(apply_actions, res.apply_actions) - eq_(write_setfields, res.write_setfields) - eq_(apply_setfields, res.apply_setfields) - eq_(metadata_match, res.metadata_match) - eq_(metadata_write, res.metadata_write) - eq_(instructions, res.instructions) - eq_(config, res.config) - eq_(max_entries, res.max_entries) - eq_(active_count, res.active_count) - eq_(lookup_count, res.lookup_count) - eq_(matched_count, res.matched_count) - - def test_parser_mid(self): - table_id = 91 - name = b'name' - match = 1270985291017894273 - wildcards = 3316608530 - write_actions = 2484712402 - apply_actions = 3999715196 - write_setfields = 5142202600015232219 - apply_setfields = 2659740543924820419 - metadata_match = 2127614848199081640 - metadata_write = 2127614848199081641 - instructions = 1119692796 - config = 2226555987 - max_entries = 2506913869 - active_count = 2024581150 - lookup_count = 4620020561814017052 - matched_count = 2825167325263435621 - - self._test_parser(table_id, name, match, wildcards, write_actions, - apply_actions, write_setfields, apply_setfields, - metadata_match, metadata_write, instructions, config, - max_entries, active_count, lookup_count, - matched_count) - - def test_parser_max(self): - # '!B7x32sQQIIQQQQIIIIQQ' - table_id = 0xff - name = b'a' * 32 - match = 0xffffffffffffffff - wildcards = 0xffffffffffffffff - write_actions = 0xffffffff - apply_actions = 0xffffffff - write_setfields = 0xffffffffffffffff - apply_setfields = 0xffffffffffffffff - metadata_match = 0xffffffffffffffff - metadata_write = 0xffffffffffffffff - instructions = 0xffffffff - config = 0xffffffff - max_entries = 0xffffffff - active_count = 0xffffffff - lookup_count = 0xffffffffffffffff - matched_count = 0xffffffffffffffff - - self._test_parser(table_id, name, match, wildcards, write_actions, - apply_actions, write_setfields, apply_setfields, - metadata_match, metadata_write, instructions, config, - max_entries, active_count, lookup_count, - matched_count) - - def test_parser_min(self): - table_id = 0 - name = b'' - match = 0 - wildcards = 0 - write_actions = 0 - apply_actions = 0 - write_setfields = 0 - apply_setfields = 0 - metadata_match = 0 - metadata_write = 0 - instructions = 0 - config = 0 - max_entries = 0 - active_count = 0 - lookup_count = 0 - matched_count = 0 - - self._test_parser(table_id, name, match, wildcards, write_actions, - apply_actions, write_setfields, apply_setfields, - metadata_match, metadata_write, instructions, config, - max_entries, active_count, lookup_count, - matched_count) - - def _test_parser_p(self, ofpxmt, ofpit, ofptc): - table_id = 91 - name = b'name' - match = ofpxmt - wildcards = ofpxmt - write_actions = 2484712402 - apply_actions = 3999715196 - write_setfields = ofpxmt - apply_setfields = ofpxmt - metadata_match = 2127614848199081640 - metadata_write = 2127614848199081641 - instructions = ofpit - config = ofptc - max_entries = 2506913869 - active_count = 2024581150 - lookup_count = 4620020561814017052 - matched_count = 2825167325263435621 - - self._test_parser(table_id, name, match, wildcards, write_actions, - apply_actions, write_setfields, apply_setfields, - metadata_match, metadata_write, instructions, config, - max_entries, active_count, lookup_count, - matched_count) - - def test_parser_p1(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IN_PORT, - ofproto.OFPIT_GOTO_TABLE, - ofproto.OFPTC_TABLE_MISS_CONTINUE) - - def test_parser_p2(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IN_PHY_PORT, - ofproto.OFPIT_WRITE_METADATA, - ofproto.OFPTC_TABLE_MISS_DROP) - - def test_parser_p3(self): - self._test_parser_p(ofproto.OFPXMT_OFB_METADATA, - ofproto.OFPIT_WRITE_ACTIONS, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p4(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ETH_DST, - ofproto.OFPIT_APPLY_ACTIONS, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p5(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ETH_SRC, - ofproto.OFPIT_CLEAR_ACTIONS, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p6(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ETH_TYPE, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p7(self): - self._test_parser_p(ofproto.OFPXMT_OFB_VLAN_VID, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p8(self): - self._test_parser_p(ofproto.OFPXMT_OFB_VLAN_PCP, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p9(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IP_DSCP, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p10(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IP_ECN, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p11(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IP_PROTO, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p12(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IPV4_SRC, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p13(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IPV4_DST, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p14(self): - self._test_parser_p(ofproto.OFPXMT_OFB_TCP_SRC, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p15(self): - self._test_parser_p(ofproto.OFPXMT_OFB_TCP_DST, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p16(self): - self._test_parser_p(ofproto.OFPXMT_OFB_UDP_SRC, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p17(self): - self._test_parser_p(ofproto.OFPXMT_OFB_UDP_DST, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p18(self): - self._test_parser_p(ofproto.OFPXMT_OFB_SCTP_SRC, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p19(self): - self._test_parser_p(ofproto.OFPXMT_OFB_SCTP_DST, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p20(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ICMPV4_TYPE, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p21(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ICMPV4_CODE, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p22(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ARP_OP, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p23(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ARP_SPA, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p24(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ARP_TPA, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p25(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ARP_SHA, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p26(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ARP_THA, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p27(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_SRC, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p28(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_DST, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p29(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_FLABEL, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p30(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ICMPV6_TYPE, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p31(self): - self._test_parser_p(ofproto.OFPXMT_OFB_ICMPV6_CODE, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p32(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_ND_TARGET, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p33(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_ND_SLL, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p34(self): - self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_ND_TLL, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p35(self): - self._test_parser_p(ofproto.OFPXMT_OFB_MPLS_LABEL, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - def test_parser_p36(self): - self._test_parser_p(ofproto.OFPXMT_OFB_MPLS_TC, - ofproto.OFPIT_EXPERIMENTER, - ofproto.OFPTC_TABLE_MISS_MASK) - - -class TestOFPPortStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPPortStatsRequest - """ - - # OFP_PORT_STATS_REQUEST_PACK_STR - # '!I4x'...port_no, pad(4) - port_no = 41186 - - def test_init(self): - c = OFPPortStatsRequest(_Datapath, self.port_no) - eq_(self.port_no, c.port_no) - - def _test_serialize(self, port_no): - c = OFPPortStatsRequest(_Datapath, port_no) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_STATS_REQUEST, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') \ - + ofproto.OFP_PORT_STATS_REQUEST_PACK_STR.replace('!', '') - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_STATS_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], ofproto.OFPST_PORT) - eq_(res[5], 0) - eq_(res[6], port_no) - - def test_serialize_mid(self): - self._test_serialize(self.port_no) - - def test_serialize_max(self): - self._test_serialize(ofproto.OFPP_ANY) - - def test_serialize_min(self): - self._test_serialize(0) - - def test_serialize_p1(self): - self._test_serialize(ofproto.OFPP_MAX) - - def test_serialize_p2(self): - self._test_serialize(ofproto.OFPP_IN_PORT) - - def test_serialize_p3(self): - self._test_serialize(ofproto.OFPP_TABLE) - - def test_serialize_p4(self): - self._test_serialize(ofproto.OFPP_NORMAL) - - def test_serialize_p5(self): - self._test_serialize(ofproto.OFPP_FLOOD) - - def test_serialize_p6(self): - self._test_serialize(ofproto.OFPP_ALL) - - def test_serialize_p7(self): - self._test_serialize(ofproto.OFPP_CONTROLLER) - - def test_serialize_p8(self): - self._test_serialize(ofproto.OFPP_LOCAL) - - -class TestOFPPortStats(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPPortStats - """ - - def test_init(self): - port_no = 6606 - rx_packets = 5999980397101236279 - tx_packets = 2856480458895760962 - rx_bytes = 6170274950576278921 - tx_bytes = 8638420181865882538 - rx_dropped = 6982303461569875546 - tx_dropped = 661287462113808071 - rx_errors = 3422231811478788365 - tx_errors = 6283093430376743019 - rx_frame_err = 876072919806406283 - rx_over_err = 6525873760178941600 - rx_crc_err = 8303073210207070535 - collisions = 3409801584220270201 - - res = OFPPortStats(port_no, rx_packets, tx_packets, - rx_bytes, tx_bytes, rx_dropped, tx_dropped, - rx_errors, tx_errors, rx_frame_err, - rx_over_err, rx_crc_err, collisions) - - eq_(port_no, res.port_no) - eq_(rx_packets, res.rx_packets) - eq_(tx_packets, res.tx_packets) - eq_(rx_bytes, res.rx_bytes) - eq_(tx_bytes, res.tx_bytes) - eq_(rx_dropped, res.rx_dropped) - eq_(tx_dropped, res.tx_dropped) - eq_(rx_errors, res.rx_errors) - eq_(tx_errors, res.tx_errors) - eq_(rx_frame_err, res.rx_frame_err) - eq_(rx_over_err, res.rx_over_err) - eq_(rx_crc_err, res.rx_crc_err) - eq_(collisions, res.collisions) - - def _test_parser(self, port_no, rx_packets, tx_packets, - rx_bytes, tx_bytes, rx_dropped, tx_dropped, - rx_errors, tx_errors, rx_frame_err, - rx_over_err, rx_crc_err, collisions): - - # OFP_PORT_STATS_PACK_STR = '!H6xQQQQQQQQQQQQ' - fmt = ofproto.OFP_PORT_STATS_PACK_STR - buf = pack(fmt, port_no, rx_packets, tx_packets, rx_bytes, tx_bytes, - rx_dropped, tx_dropped, rx_errors, tx_errors, rx_frame_err, - rx_over_err, rx_crc_err, collisions) - - res = OFPPortStats.parser(buf, 0) - - eq_(port_no, res.port_no) - eq_(rx_packets, res.rx_packets) - eq_(tx_packets, res.tx_packets) - eq_(rx_bytes, res.rx_bytes) - eq_(tx_bytes, res.tx_bytes) - eq_(rx_dropped, res.rx_dropped) - eq_(tx_dropped, res.tx_dropped) - eq_(rx_errors, res.rx_errors) - eq_(tx_errors, res.tx_errors) - eq_(rx_frame_err, res.rx_frame_err) - eq_(rx_over_err, res.rx_over_err) - eq_(rx_crc_err, res.rx_crc_err) - eq_(collisions, res.collisions) - - def test_parser_mid(self): - port_no = 6606 - rx_packets = 5999980397101236279 - tx_packets = 2856480458895760962 - rx_bytes = 6170274950576278921 - tx_bytes = 8638420181865882538 - rx_dropped = 6982303461569875546 - tx_dropped = 661287462113808071 - rx_errors = 3422231811478788365 - tx_errors = 6283093430376743019 - rx_frame_err = 876072919806406283 - rx_over_err = 6525873760178941600 - rx_crc_err = 8303073210207070535 - collisions = 3409801584220270201 - - self._test_parser(port_no, rx_packets, tx_packets, rx_bytes, tx_bytes, - rx_dropped, tx_dropped, rx_errors, tx_errors, - rx_frame_err, rx_over_err, rx_crc_err, collisions) - - def test_parser_max(self): - port_no = 0xffffffff - rx_packets = 0xffffffffffffffff - tx_packets = 0xffffffffffffffff - rx_bytes = 0xffffffffffffffff - tx_bytes = 0xffffffffffffffff - rx_dropped = 0xffffffffffffffff - tx_dropped = 0xffffffffffffffff - rx_errors = 0xffffffffffffffff - tx_errors = 0xffffffffffffffff - rx_frame_err = 0xffffffffffffffff - rx_over_err = 0xffffffffffffffff - rx_crc_err = 0xffffffffffffffff - collisions = 0xffffffffffffffff - - self._test_parser(port_no, rx_packets, tx_packets, rx_bytes, tx_bytes, - rx_dropped, tx_dropped, rx_errors, tx_errors, - rx_frame_err, rx_over_err, rx_crc_err, collisions) - - def test_parser_min(self): - port_no = 0 - rx_packets = 0 - tx_packets = 0 - rx_bytes = 0 - tx_bytes = 0 - rx_dropped = 0 - tx_dropped = 0 - rx_errors = 0 - tx_errors = 0 - rx_frame_err = 0 - rx_over_err = 0 - rx_crc_err = 0 - collisions = 0 - - self._test_parser(port_no, rx_packets, tx_packets, rx_bytes, tx_bytes, - rx_dropped, tx_dropped, rx_errors, tx_errors, - rx_frame_err, rx_over_err, rx_crc_err, collisions) - - def _test_parser_p(self, port_no): - port_no = port_no - rx_packets = 5999980397101236279 - tx_packets = 2856480458895760962 - rx_bytes = 6170274950576278921 - tx_bytes = 8638420181865882538 - rx_dropped = 6982303461569875546 - tx_dropped = 661287462113808071 - rx_errors = 3422231811478788365 - tx_errors = 6283093430376743019 - rx_frame_err = 876072919806406283 - rx_over_err = 6525873760178941600 - rx_crc_err = 8303073210207070535 - collisions = 3409801584220270201 - - self._test_parser(port_no, rx_packets, tx_packets, rx_bytes, tx_bytes, - rx_dropped, tx_dropped, rx_errors, tx_errors, - rx_frame_err, rx_over_err, rx_crc_err, collisions) - - def test_parser_p1(self): - self._test_parser_p(ofproto.OFPP_MAX) - - def test_parser_p2(self): - self._test_parser_p(ofproto.OFPP_IN_PORT) - - def test_parser_p3(self): - self._test_parser_p(ofproto.OFPP_TABLE) - - def test_parser_p4(self): - self._test_parser_p(ofproto.OFPP_NORMAL) - - def test_parser_p5(self): - self._test_parser_p(ofproto.OFPP_FLOOD) - - def test_parser_p6(self): - self._test_parser_p(ofproto.OFPP_ALL) - - def test_parser_p7(self): - self._test_parser_p(ofproto.OFPP_CONTROLLER) - - def test_parser_p8(self): - self._test_parser_p(ofproto.OFPP_LOCAL) - - -class TestOFPQueueStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPQueueStatsRequest - """ - - # OFP_QUEUE_STATS_REQUEST_PACK_STR - # '!II'...port_no, queue_id - port_no = 41186 - queue_id = 6606 - - def test_init(self): - c = OFPQueueStatsRequest(_Datapath, self.port_no, self.queue_id) - - eq_(self.port_no, c.port_no) - eq_(self.queue_id, c.queue_id) - - def _test_serialize(self, port_no, queue_id): - c = OFPQueueStatsRequest(_Datapath, port_no, queue_id) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_STATS_REQUEST, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') \ - + ofproto.OFP_QUEUE_STATS_REQUEST_PACK_STR.replace('!', '') - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_STATS_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], ofproto.OFPST_QUEUE) - eq_(res[5], 0) - eq_(res[6], port_no) - eq_(res[7], queue_id) - - def test_serialize_mid(self): - self._test_serialize(self.port_no, self.queue_id) - - def test_serialize_max(self): - self._test_serialize(0xffffffff, 0xffffffff) - - def test_serialize_min(self): - self._test_serialize(0, 0) - - def test_serialize_p1(self): - self._test_serialize(ofproto.OFPP_MAX, self.queue_id) - - def test_serialize_p2(self): - self._test_serialize(ofproto.OFPP_IN_PORT, self.queue_id) - - def test_serialize_p3(self): - self._test_serialize(ofproto.OFPP_NORMAL, self.queue_id) - - def test_serialize_p4(self): - self._test_serialize(ofproto.OFPP_TABLE, self.queue_id) - - def test_serialize_p5(self): - self._test_serialize(ofproto.OFPP_FLOOD, self.queue_id) - - def test_serialize_p6(self): - self._test_serialize(ofproto.OFPP_ALL, self.queue_id) - - def test_serialize_p7(self): - self._test_serialize(ofproto.OFPP_CONTROLLER, self.queue_id) - - def test_serialize_p8(self): - self._test_serialize(ofproto.OFPP_LOCAL, self.queue_id) - - -class TestOFPQueueStats(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPQueueStats - """ - - def test_init(self): - port_no = 41186 - queue_id = 6606 - tx_bytes = 8638420181865882538 - tx_packets = 2856480458895760962 - tx_errors = 6283093430376743019 - - res = OFPQueueStats(port_no, queue_id, tx_bytes, - tx_packets, tx_errors) - - eq_(port_no, res.port_no) - eq_(queue_id, res.queue_id) - eq_(tx_bytes, res.tx_bytes) - eq_(tx_packets, res.tx_packets) - eq_(tx_errors, res.tx_errors) - - def _test_parser(self, port_no, queue_id, tx_bytes, - tx_packets, tx_errors): - - # OFP_QUEUE_STATS_PACK_STR = '!IIQQQ' - fmt = ofproto.OFP_QUEUE_STATS_PACK_STR - buf = pack(fmt, port_no, queue_id, tx_bytes, tx_packets, tx_errors) - res = OFPQueueStats.parser(buf, 0) - - eq_(port_no, res.port_no) - eq_(queue_id, res.queue_id) - eq_(tx_bytes, res.tx_bytes) - eq_(tx_packets, res.tx_packets) - eq_(tx_errors, res.tx_errors) - - def test_parser_mid(self): - port_no = 41186 - queue_id = 6606 - tx_bytes = 8638420181865882538 - tx_packets = 2856480458895760962 - tx_errors = 6283093430376743019 - - self._test_parser(port_no, queue_id, tx_bytes, - tx_packets, tx_errors) - - def test_parser_max(self): - port_no = 0xffffffff - queue_id = 0xffffffff - tx_bytes = 0xffffffffffffffff - tx_packets = 0xffffffffffffffff - tx_errors = 0xffffffffffffffff - - self._test_parser(port_no, queue_id, tx_bytes, - tx_packets, tx_errors) - - def test_parser_min(self): - port_no = 0 - queue_id = 0 - tx_bytes = 0 - tx_packets = 0 - tx_errors = 0 - - self._test_parser(port_no, queue_id, tx_bytes, - tx_packets, tx_errors) - - def _test_parser_p(self, port_no): - queue_id = 6606 - tx_bytes = 8638420181865882538 - tx_packets = 2856480458895760962 - tx_errors = 6283093430376743019 - - self._test_parser(port_no, queue_id, tx_bytes, - tx_packets, tx_errors) - - def test_parser_p1(self): - self._test_parser_p(ofproto.OFPP_MAX) - - def test_parser_p2(self): - self._test_parser_p(ofproto.OFPP_IN_PORT) - - def test_parser_p3(self): - self._test_parser_p(ofproto.OFPP_TABLE) - - def test_parser_p4(self): - self._test_parser_p(ofproto.OFPP_NORMAL) - - def test_parser_p5(self): - self._test_parser_p(ofproto.OFPP_FLOOD) - - def test_parser_p6(self): - self._test_parser_p(ofproto.OFPP_ALL) - - def test_parser_p7(self): - self._test_parser_p(ofproto.OFPP_CONTROLLER) - - def test_parser_p8(self): - self._test_parser_p(ofproto.OFPP_LOCAL) - - -class TestOFPBucketCounter(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPBucketCounter - """ - - # OFP_BUCKET_COUNTER_PACK_STR = '!QQ' - packet_count = 6489108735192644493 - byte_count = 7334344481123449724 - - def test_init(self): - c = OFPBucketCounter(self.packet_count, self.byte_count) - - eq_(self.packet_count, c.packet_count) - eq_(self.byte_count, c.byte_count) - - def _test_parser(self, packet_count, byte_count): - fmt = ofproto.OFP_BUCKET_COUNTER_PACK_STR - buf = pack(fmt, packet_count, byte_count) - - res = OFPBucketCounter.parser(buf, 0) - eq_(packet_count, res.packet_count) - eq_(byte_count, res.byte_count) - - def test_parser_mid(self): - self._test_parser(self.packet_count, self.byte_count) - - def test_parser_max(self): - packet_count = 18446744073709551615 - byte_count = 18446744073709551615 - self._test_parser(packet_count, byte_count) - - def test_parser_min(self): - packet_count = 0 - byte_count = 0 - self._test_parser(packet_count, byte_count) - - -class TestOFPGroupStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPGroupStatsRequest - """ - - # OFP_GROUP_STATS_REQUEST_PACK_STR - # '!I4x'...group_id, pad(4) - group_id = 6606 - - def test_init(self): - c = OFPGroupStatsRequest(_Datapath, self.group_id) - eq_(self.group_id, c.group_id) - - def _test_serialize(self, group_id): - c = OFPGroupStatsRequest(_Datapath, group_id) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_STATS_REQUEST, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') \ - + ofproto.OFP_GROUP_STATS_REQUEST_PACK_STR.replace('!', '') - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_STATS_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], ofproto.OFPST_GROUP) - eq_(res[5], 0) - eq_(res[6], group_id) - - def test_serialize_mid(self): - self._test_serialize(self.group_id) - - def test_serialize_max(self): - self._test_serialize(0xffffffff) - - def test_serialize_min(self): - self._test_serialize(0) - - def test_serialize_p1(self): - self._test_serialize(ofproto.OFPG_MAX) - - def test_serialize_p2(self): - self._test_serialize(ofproto.OFPG_ALL) - - -class TestOFPGroupStats(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPGroupStats - """ - - # OFP_GROUP_STATS_PACK_STR = '!H2xII4xQQ' - length = ofproto.OFP_GROUP_STATS_SIZE \ - + ofproto.OFP_BUCKET_COUNTER_SIZE - group_id = 6606 - ref_count = 2102 - packet_count = 6489108735192644493 - byte_count = 7334344481123449724 - - # OFP_BUCKET_COUNTER_PACK_STR = '!QQ' - buck_packet_count = 3519264449364891087 - buck_byte_count = 3123449724733434448 - bucket_counters = [OFPBucketCounter(buck_packet_count, buck_byte_count)] - buf_bucket_counters = pack(ofproto.OFP_BUCKET_COUNTER_PACK_STR, - buck_packet_count, buck_byte_count) - - fmt = ofproto.OFP_GROUP_STATS_PACK_STR - buf = pack(fmt, length, group_id, ref_count, packet_count, byte_count) \ - + buf_bucket_counters - - def test_init(self): - c = OFPGroupStats(self.group_id, self.ref_count, - self.packet_count, self.byte_count, - self.bucket_counters) - - eq_(self.group_id, c.group_id) - eq_(self.ref_count, c.ref_count) - eq_(self.packet_count, c.packet_count) - eq_(self.byte_count, c.byte_count) - eq_(self.bucket_counters, c.bucket_counters) - - def _test_parser(self, group_id, ref_count, packet_count, - byte_count, bucket_counter_cnt): - # OFP_GROUP_STATS_PACK_STR = '!H2xII4xQQ' - length = ofproto.OFP_GROUP_STATS_SIZE \ - + (ofproto.OFP_BUCKET_COUNTER_SIZE * bucket_counter_cnt) - fmt = ofproto.OFP_GROUP_STATS_PACK_STR - buf = pack(fmt, length, group_id, ref_count, - packet_count, byte_count) - - bucket_counters = [] - for b in range(bucket_counter_cnt): - # OFP_BUCKET_COUNTER_PACK_STR = '!QQ' - buck_packet_count = b - buck_byte_count = b - bucket_counter = OFPBucketCounter(buck_packet_count, - buck_byte_count) - bucket_counters.append(bucket_counter) - buf_bucket_counters = \ - pack(ofproto.OFP_BUCKET_COUNTER_PACK_STR, - buck_packet_count, buck_byte_count) - buf += buf_bucket_counters - - res = OFPGroupStats.parser(buf, 0) - - # 32 - eq_(length, res.length) - eq_(group_id, res.group_id) - eq_(ref_count, res.ref_count) - eq_(packet_count, res.packet_count) - eq_(byte_count, res.byte_count) - - # 32 + 16 * bucket_counter_cnt < 65535 byte - # bucket_counter_cnt <= 4093 - for b in range(bucket_counter_cnt): - eq_(bucket_counters[b].packet_count, - res.bucket_counters[b].packet_count) - eq_(bucket_counters[b].byte_count, - res.bucket_counters[b].byte_count) - - def test_parser_mid(self): - bucket_counter_cnt = 2046 - self._test_parser(self.group_id, self.ref_count, - self.packet_count, self.byte_count, - bucket_counter_cnt) - - def test_parser_max(self): - group_id = 4294967295 - ref_count = 4294967295 - packet_count = 18446744073709551615 - byte_count = 18446744073709551615 - bucket_counter_cnt = 4093 - self._test_parser(group_id, ref_count, - packet_count, byte_count, - bucket_counter_cnt) - - def test_parser_min(self): - group_id = 0 - ref_count = 0 - packet_count = 0 - byte_count = 0 - bucket_counter_cnt = 0 - self._test_parser(group_id, ref_count, - packet_count, byte_count, - bucket_counter_cnt) - - -class TestOFPGroupDescStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPGroupDescStatsRequest - """ - - def test_serialize(self): - c = OFPGroupDescStatsRequest(_Datapath) - c.serialize() - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_STATS_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], ofproto.OFPST_GROUP_DESC) - eq_(res[5], 0) - - -class TestOFPGroupDescStats(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPGroupDescStats - """ - - # OFP_GROUP_DESC_STATS_PACK_STR = '!HBxI' - length = ofproto.OFP_GROUP_DESC_STATS_SIZE \ - + ofproto.OFP_BUCKET_SIZE \ - + ofproto.OFP_ACTION_OUTPUT_SIZE - type_ = 128 - group_id = 6606 - - # OFP_ACTION (OFP_ACTION_OUTPUT) - port = 0x00002ae0 - max_len = ofproto.OFP_ACTION_OUTPUT_SIZE - actions = [OFPActionOutput(port, max_len)] - buf_actions = bytearray() - actions[0].serialize(buf_actions, 0) - - # OFP_BUCKET - weight = 4386 - watch_port = 8006 - watch_group = 3 - buckets = [OFPBucket(weight, watch_port, watch_group, actions)] - - bucket_cnt = 1024 - - def test_init(self): - c = OFPGroupDescStats(self.type_, self.group_id, self.buckets) - - eq_(self.type_, c.type) - eq_(self.group_id, c.group_id) - eq_(self.buckets, c.buckets) - - def _test_parser(self, type_, group_id, bucket_cnt): - # OFP_GROUP_DESC_STATS_PACK_STR = '!HBxI' - length = ofproto.OFP_GROUP_DESC_STATS_SIZE \ - + (ofproto.OFP_BUCKET_SIZE - + ofproto.OFP_ACTION_OUTPUT_SIZE) * bucket_cnt - - fmt = ofproto.OFP_GROUP_DESC_STATS_PACK_STR - buf = pack(fmt, length, type_, group_id) - - buckets = [] - for b in range(bucket_cnt): - # OFP_BUCKET - weight = watch_port = watch_group = b - bucket = OFPBucket(weight, - watch_port, watch_group, - self.actions) - buckets.append(bucket) - buf_buckets = bytearray() - buckets[b].serialize(buf_buckets, 0) - buf += six.binary_type(buf_buckets) - - res = OFPGroupDescStats.parser(buf, 0) - - # 8 byte - eq_(type_, res.type) - eq_(group_id, res.group_id) - - # 8 + ( 16 + 16 ) * b < 65535 byte - # b <= 2047 byte - for b in range(bucket_cnt): - eq_(buckets[b].weight, res.buckets[b].weight) - eq_(buckets[b].watch_port, res.buckets[b].watch_port) - eq_(buckets[b].watch_group, res.buckets[b].watch_group) - eq_(buckets[b].actions[0].port, - res.buckets[b].actions[0].port) - eq_(buckets[b].actions[0].max_len, - res.buckets[b].actions[0].max_len) - - def test_parser_mid(self): - self._test_parser(self.type_, self.group_id, self.bucket_cnt) - - def test_parser_max(self): - group_id = 4294967295 - type_ = 255 - bucket_cnt = 2047 - self._test_parser(type_, group_id, bucket_cnt) - - def test_parser_min(self): - group_id = 0 - type_ = ofproto.OFPGT_ALL - bucket_cnt = 0 - self._test_parser(type_, group_id, bucket_cnt) - - def test_parser_p1(self): - type_ = ofproto.OFPGT_SELECT - self._test_parser(type_, self.group_id, self.bucket_cnt) - - def test_parser_p2(self): - type_ = ofproto.OFPGT_INDIRECT - self._test_parser(type_, self.group_id, self.bucket_cnt) - - def test_parser_p3(self): - type_ = ofproto.OFPGT_FF - self._test_parser(type_, self.group_id, self.bucket_cnt) - - -class TestOFPGroupFeaturesStatsRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPGroupFeaturesStatsRequest - """ - - def test_serialize(self): - c = OFPGroupFeaturesStatsRequest(_Datapath) - c.serialize() - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_STATS_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], ofproto.OFPST_GROUP_FEATURES) - eq_(res[5], 0) - - -class TestOFPGroupFeaturesStats(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPGroupFeaturesStats - """ - - # OFP_GROUP_FEATURES_STATS_PACK_STR = '!II4I4I' - types = ofproto.OFPGT_ALL - capabilities = ofproto.OFPGFC_SELECT_WEIGHT - max_groups = [1, 2, 3, 4] - actions = [1 << ofproto.OFPAT_OUTPUT, - 1 << ofproto.OFPAT_COPY_TTL_OUT, - 1 << ofproto.OFPAT_SET_MPLS_TTL, - 1 << ofproto.OFPAT_PUSH_VLAN] - - def test_init(self): - c = OFPGroupFeaturesStats(self.types, self.capabilities, - self.max_groups, self.actions) - eq_(self.types, c.types) - eq_(self.capabilities, c.capabilities) - eq_(self.max_groups, c.max_groups) - eq_(self.actions, c.actions) - - def _test_parser(self, types, capabilities, max_groups, actions): - - buf = pack('!I', types) \ - + pack('!I', capabilities) \ - + pack('!I', max_groups[0]) \ - + pack('!I', max_groups[1]) \ - + pack('!I', max_groups[2]) \ - + pack('!I', max_groups[3]) \ - + pack('!I', actions[0]) \ - + pack('!I', actions[1]) \ - + pack('!I', actions[2]) \ - + pack('!I', actions[3]) - - res = OFPGroupFeaturesStats.parser(buf, 0) - - # max_groups and actions after the parser is tuple - eq_(types, res.types) - eq_(capabilities, res.capabilities) - eq_(max_groups, res.max_groups) - eq_(actions, res.actions) - - def test_parser_mid(self): - self._test_parser(self.types, self.capabilities, - self.max_groups, self.actions) - - def test_parser_max(self): - types = 0b11111111111111111111111111111111 - capabilities = 0b11111111111111111111111111111111 - max_groups = [4294967295] * 4 - actions = [0b11111111111111111111111111111111] * 4 - self._test_parser(types, capabilities, - max_groups, actions) - - def test_parser_min(self): - types = 0b00000000000000000000000000000000 - capabilities = 0b00000000000000000000000000000000 - max_groups = [0] * 4 - actions = [0b00000000000000000000000000000000] * 4 - self._test_parser(types, capabilities, - max_groups, actions) - - def _test_parser_p(self, types, capabilities, actions): - self._test_parser(types, capabilities, - self.max_groups, actions) - - def test_parser_p1(self): - actions = [1 << ofproto.OFPAT_COPY_TTL_IN, - 1 << ofproto.OFPAT_DEC_MPLS_TTL, - 1 << ofproto.OFPAT_POP_VLAN, - 1 << ofproto.OFPAT_PUSH_MPLS] - self._test_parser_p(1 << ofproto.OFPGT_ALL, - ofproto.OFPGFC_CHAINING, - actions) - - def test_parser_p2(self): - actions = [1 << ofproto.OFPAT_POP_MPLS, - 1 << ofproto.OFPAT_SET_QUEUE, - 1 << ofproto.OFPAT_GROUP, - 1 << ofproto.OFPAT_SET_NW_TTL] - self._test_parser_p(1 << ofproto.OFPGT_SELECT, - ofproto.OFPGFC_SELECT_WEIGHT, - actions) - - def test_parser_p3(self): - actions = [1 << ofproto.OFPAT_DEC_NW_TTL, - 1 << ofproto.OFPAT_SET_FIELD, - 1 << ofproto.OFPAT_GROUP, - 1 << ofproto.OFPAT_SET_NW_TTL] - self._test_parser_p(1 << ofproto.OFPGT_SELECT, - ofproto.OFPGFC_SELECT_LIVENESS, - actions) - - def test_parser_p4(self): - self._test_parser_p(1 << ofproto.OFPGT_INDIRECT, - ofproto.OFPGFC_CHAINING, - self.actions) - - def test_parser_p5(self): - self._test_parser_p(1 << ofproto.OFPGT_FF, - ofproto.OFPGFC_CHAINING_CHECKS, - self.actions) - - -class TestOFPQueueGetConfigRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPQueueGetConfigRequest - """ - - # OFP_QUEUE_GET_CONFIG_REQUEST_PACK_STR v1.2 - # '!I4x'...port, pad(4) - port = 41186 - - def test_init(self): - c = OFPQueueGetConfigRequest(_Datapath, self.port) - eq_(self.port, c.port) - - def _test_serialize(self, port): - c = OFPQueueGetConfigRequest(_Datapath, port) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_QUEUE_GET_CONFIG_REQUEST, c.msg_type) - eq_(0, c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR \ - + ofproto.OFP_QUEUE_GET_CONFIG_REQUEST_PACK_STR[1:] - - res = struct.unpack(fmt, six.binary_type(c.buf)) - eq_(res[0], ofproto.OFP_VERSION) - eq_(res[1], ofproto.OFPT_QUEUE_GET_CONFIG_REQUEST) - eq_(res[2], len(c.buf)) - eq_(res[3], 0) - eq_(res[4], port) - - def test_serialize_mid(self): - self._test_serialize(self.port) - - def test_serialize_max(self): - self._test_serialize(0xffffffff) - - def test_serialize_min(self): - self._test_serialize(0) - - def test_serialize_p1(self): - self._test_serialize(ofproto.OFPP_MAX) - - -class TestOFPQueuePropHeader(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPQueuePropHeader - """ - - # OFP_QUEUE_PROP_HEADER_PACK_STR = '!HH4x' - property_ = 1 - len_ = 10 - - def test_init(self): - c = OFPQueuePropHeader(self.property_, self.len_) - eq_(self.property_, c.property) - eq_(self.len_, c.len) - - def _test_serialize(self, property_, len_): - c = OFPQueuePropHeader(property_, len_) - buf = bytearray() - c.serialize(buf, 0) - - fmt = ofproto.OFP_QUEUE_PROP_HEADER_PACK_STR - res = struct.unpack(fmt, six.binary_type(buf)) - - eq_(res[0], property_) - eq_(res[1], len_) - - def test_serialize_mid(self): - self._test_serialize(self.property_, self.len_) - - def test_serialize_max(self): - self._test_serialize(0xffff, 0xffff) - - def test_serialize_min(self): - self._test_serialize(0, 0) - - -class TestOFPPacketQueue(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPPacketQueue - """ - - def test_init(self): - queue_id = 1 - port = 2 - len_ = 3 - properties = [4, 5, 6] - c = OFPPacketQueue(queue_id, port, properties) - - eq_(queue_id, c.queue_id) - eq_(port, c.port) - eq_(properties, c.properties) - - def _test_parser(self, queue_id, port, prop_cnt): - # OFP_PACKET_QUEUE_PACK_STR = '!IIH6x' - fmt = ofproto.OFP_PACKET_QUEUE_PACK_STR - queue_len = ofproto.OFP_PACKET_QUEUE_SIZE \ - + ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE * prop_cnt - - buf = pack(fmt, queue_id, port, queue_len) - - for rate in range(prop_cnt): - # OFP_QUEUE_PROP_HEADER_PACK_STR = '!HH4x' - fmt = ofproto.OFP_QUEUE_PROP_HEADER_PACK_STR - prop_type = ofproto.OFPQT_MIN_RATE - prop_len = ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE - buf += pack(fmt, prop_type, prop_len) - - # OFP_QUEUE_PROP_MIN_RATE_PACK_STR = '!H6x' - fmt = ofproto.OFP_QUEUE_PROP_MIN_RATE_PACK_STR - prop_rate = rate - buf += pack(fmt, prop_rate) - - res = OFPPacketQueue.parser(buf, 0) - - eq_(queue_id, res.queue_id) - eq_(port, res.port) - eq_(queue_len, res.len) - eq_(prop_cnt, len(res.properties)) - - for rate, p in enumerate(res.properties): - eq_(prop_type, p.property) - eq_(prop_len, p.len) - eq_(rate, p.rate) - - def test_parser_mid(self): - queue_id = 1 - port = 2 - prop_cnt = 2 - self._test_parser(queue_id, port, prop_cnt) - - def test_parser_max(self): - # queue_len format is 'H' < number 65535 - # - # queue_len = OFP_PACKET_QUEUE_SIZE(16) - # + OFP_QUEUE_PROP_MIN_RATE_SIZE(16) * N - # max_prop_cnt = (65535 - 16) / 16 = 4094 - queue_id = 0xffffffff - port = 0xffffffff - prop_cnt = 4094 - self._test_parser(queue_id, port, prop_cnt) - - def test_parser_min(self): - queue_id = 0 - port = 0 - prop_cnt = 0 - self._test_parser(queue_id, port, prop_cnt) - - -class TestOFPQueuePropMinRate(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPQueuePropMinRate - """ - - def _test_parser(self, rate): - # OFP_QUEUE_PROP_MIN_RATE_PACK_STR...H6x - buf = pack(ofproto.OFP_QUEUE_PROP_MIN_RATE_PACK_STR, rate) - res = OFPQueuePropMinRate.parser(buf, 0) - eq_(rate, res.rate) - - def test_parser_mid(self): - self._test_parser(32768) - - def test_parser_max(self): - self._test_parser(0xffff) - - def test_parser_min(self): - self._test_parser(0) - - -class TestOFPQueuePropMaxRate(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPQueuePropMaxRate - """ - - rate = 100 - buf = pack(ofproto.OFP_QUEUE_PROP_MAX_RATE_PACK_STR, rate) - c = OFPQueuePropMaxRate(rate) - - def _test_parser(self, rate): - # OFP_QUEUE_PROP_MAX_RATE_PACK_STR...H6x - buf = pack(ofproto.OFP_QUEUE_PROP_MAX_RATE_PACK_STR, rate) - res = OFPQueuePropMaxRate.parser(buf, 0) - eq_(rate, res.rate) - - def test_parser_mid(self): - self._test_parser(100) - - def test_parser_max(self): - self._test_parser(0xffff) - - def test_parser_min(self): - self._test_parser(0) - - -class TestOFPQueueGetConfigReply(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPQueueGetConfigReply - """ - - def _test_parser(self, xid, port, queue_cnt): - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_QUEUE_GET_CONFIG_REPLY - - queues_len = 0 - for q in range(queue_cnt): - queues_len += ofproto.OFP_PACKET_QUEUE_SIZE - queues_len += ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE - - msg_len = ofproto.OFP_QUEUE_GET_CONFIG_REPLY_SIZE \ - + queues_len - - # OFP_HEADER_PACK_STR = '!BBHI' - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - # OFP_QUEUE_GET_CONFIG_REPLY_PACK_STR = '!I4x' - fmt = ofproto.OFP_QUEUE_GET_CONFIG_REPLY_PACK_STR - buf += pack(fmt, port) - - queues = [] - for q in range(1, queue_cnt + 1): - # OFP_PACKET_QUEUE_PACK_STR = '!IIH6x' - fmt = ofproto.OFP_PACKET_QUEUE_PACK_STR - queue_id = q * 100 - queue_port = q - queue_len = ofproto.OFP_PACKET_QUEUE_SIZE \ - + ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE - buf += pack(fmt, queue_id, queue_port, queue_len) - - # OFP_QUEUE_PROP_HEADER_PACK_STR = '!HH4x' - fmt = ofproto.OFP_QUEUE_PROP_HEADER_PACK_STR - prop_type = ofproto.OFPQT_MIN_RATE - prop_len = ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE - buf += pack(fmt, prop_type, prop_len) - - # OFP_QUEUE_PROP_MIN_RATE_PACK_STR = '!H6x' - fmt = ofproto.OFP_QUEUE_PROP_MIN_RATE_PACK_STR - prop_rate = q * 10 - buf += pack(fmt, prop_rate) - - queue = {'queue_id': queue_id, 'queue_port': queue_port, - 'queue_len': queue_len, 'prop_type': prop_type, - 'prop_len': prop_len, 'prop_rate': prop_rate} - queues.append(queue) - - res = OFPQueueGetConfigReply.parser(object, version, msg_type, - msg_len, xid, buf) - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - eq_(port, res.port) - eq_(queue_cnt, len(res.queues)) - - for i, val in enumerate(res.queues): - c = queues[i] - eq_(c['queue_id'], val.queue_id) - eq_(c['queue_port'], val.port) - eq_(c['queue_len'], val.len) - eq_(1, len(val.properties)) - - prop = val.properties[0] - eq_(c['prop_type'], prop.property) - eq_(c['prop_len'], prop.len) - eq_(c['prop_rate'], prop.rate) - - def test_parser_mid(self): - self._test_parser(2495926989, 65037, 2) - - def test_parser_max(self): - # total msg_len = 65520 - self._test_parser(0xffffffff, 0xffffffff, 2047) - - def test_parser_min(self): - self._test_parser(0, 0, 0) - - -class TestOFPBarrierRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPBarrierRequest - """ - def test_serialize(self): - c = OFPBarrierRequest(_Datapath) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_BARRIER_REQUEST, c.msg_type) - eq_(ofproto.OFP_HEADER_SIZE, c.msg_len) - eq_(0, c.xid) - - fmt = ofproto.OFP_HEADER_PACK_STR - res = unpack(fmt, six.binary_type(c.buf)) - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_BARRIER_REQUEST, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, c.xid) - - -class TestOFPBarrierReply(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPBarrierReply - """ - - def _test_parser(self, xid): - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_BARRIER_REPLY - msg_len = ofproto.OFP_HEADER_SIZE - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - res = OFPBarrierReply.parser(object, version, msg_type, - msg_len, xid, buf) - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - - def test_parser_mid(self): - self._test_parser(2147483648) - - def test_parser_max(self): - self._test_parser(0xffffffff) - - def test_parser_min(self): - self._test_parser(0) - - -class TestOFPRoleRequest(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPRoleRequest - """ - - # OFP_ROLE_REQUEST_PACK_STR - # '!I4xQ'...role, pad(4), generation_id - role = 2147483648 - generation_id = 1270985291017894273 - - def test_init(self): - c = OFPRoleRequest(_Datapath, self.role, self.generation_id) - eq_(self.role, c.role) - eq_(self.generation_id, c.generation_id) - - def _test_serialize(self, role, generation_id): - c = OFPRoleRequest(_Datapath, role, generation_id) - c.serialize() - - eq_(ofproto.OFP_VERSION, c.version) - eq_(ofproto.OFPT_ROLE_REQUEST, c.msg_type) - eq_(0, c.xid) - - fmt = '!' \ - + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ - + ofproto.OFP_ROLE_REQUEST_PACK_STR.replace('!', '') - - res = struct.unpack(fmt, six.binary_type(c.buf)) - - eq_(ofproto.OFP_VERSION, res[0]) - eq_(ofproto.OFPT_ROLE_REQUEST, res[1]) - eq_(len(c.buf), res[2]) - eq_(0, res[3]) - eq_(role, res[4]) - eq_(generation_id, res[5]) - - def test_serialize_mid(self): - self._test_serialize(self.role, self.generation_id) - - def test_serialize_max(self): - role = 0xffffffff - generation_id = 0xffffffffffffffff - self._test_serialize(role, generation_id) - - def test_serialize_min(self): - role = 0 - generation_id = 0 - self._test_serialize(role, generation_id) - - def test_serialize_p1(self): - role = ofproto.OFPCR_ROLE_EQUAL - self._test_serialize(role, self.generation_id) - - def test_serialize_p2(self): - role = ofproto.OFPCR_ROLE_MASTER - self._test_serialize(role, self.generation_id) - - def test_serialize_p3(self): - role = ofproto.OFPCR_ROLE_SLAVE - self._test_serialize(role, self.generation_id) - - -class TestOFPRoleReply(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPRoleReply - """ - - # OFP_ROLE_REQUEST_PACK_STR - # '!I4xQ'...role, pad(4), generation_id - # role = ofproto.OFPCR_ROLE_NOCHANGE - role = 2147483648 - generation_id = 1270985291017894273 - - def _test_parser(self, role, generation_id): - # OFP_HEADER_PACK_STR - version = ofproto.OFP_VERSION - msg_type = ofproto.OFPT_ROLE_REPLY - msg_len = ofproto.OFP_ROLE_REQUEST_SIZE - xid = 2495926989 - - fmt = ofproto.OFP_HEADER_PACK_STR - buf = pack(fmt, version, msg_type, msg_len, xid) - - fmt = ofproto.OFP_ROLE_REQUEST_PACK_STR - buf += pack(fmt, role, generation_id) - - res = OFPRoleReply.parser(object, version, msg_type, msg_len, xid, buf) - - # OFP_HEADER_PACK_STR - eq_(version, res.version) - eq_(msg_type, res.msg_type) - eq_(msg_len, res.msg_len) - eq_(xid, res.xid) - - # OFP_ROLE_REQUEST_PACK_STR - eq_(role, res.role) - eq_(generation_id, res.generation_id) - - def test_parser_mid(self): - self._test_parser(self.role, self.generation_id) - - def test_parser_max(self): - role = 0xffffffff - generation_id = 0xffffffffffffffff - self._test_parser(role, generation_id) - - def test_parser_min(self): - role = ofproto.OFPCR_ROLE_NOCHANGE - generation_id = 0 - self._test_parser(role, generation_id) - - def test_parser_p1(self): - role = ofproto.OFPCR_ROLE_EQUAL - self._test_parser(role, self.generation_id) - - def test_parser_p2(self): - role = ofproto.OFPCR_ROLE_MASTER - self._test_parser(role, self.generation_id) - - def test_parser_p3(self): - role = ofproto.OFPCR_ROLE_SLAVE - self._test_parser(role, self.generation_id) - - -class TestOFPMatch(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPMatch - """ - - def test_init(self): - res = OFPMatch() - - # wc check - eq_(res._wc.metadata_mask, 0) - eq_(res._wc.dl_dst_mask, 0) - eq_(res._wc.dl_src_mask, 0) - eq_(res._wc.vlan_vid_mask, 0) - eq_(res._wc.ipv4_src_mask, 0) - eq_(res._wc.ipv4_dst_mask, 0) - eq_(res._wc.arp_spa_mask, 0) - eq_(res._wc.arp_tpa_mask, 0) - eq_(res._wc.arp_sha_mask, 0) - eq_(res._wc.arp_tha_mask, 0) - eq_(res._wc.ipv6_src_mask, []) - eq_(res._wc.ipv6_dst_mask, []) - eq_(res._wc.ipv6_flabel_mask, 0) - eq_(res._wc.wildcards, (1 << 64) - 1) - - # flow check - eq_(res._flow.in_port, 0) - eq_(res._flow.in_phy_port, 0) - eq_(res._flow.metadata, 0) - eq_(res._flow.dl_dst, mac.DONTCARE) - eq_(res._flow.dl_src, mac.DONTCARE) - eq_(res._flow.dl_type, 0) - eq_(res._flow.vlan_vid, 0) - eq_(res._flow.vlan_pcp, 0) - eq_(res._flow.ip_dscp, 0) - eq_(res._flow.ip_ecn, 0) - eq_(res._flow.ip_proto, 0) - eq_(res._flow.ipv4_src, 0) - eq_(res._flow.ipv4_dst, 0) - eq_(res._flow.tcp_src, 0) - eq_(res._flow.tcp_dst, 0) - eq_(res._flow.udp_src, 0) - eq_(res._flow.udp_dst, 0) - eq_(res._flow.sctp_src, 0) - eq_(res._flow.sctp_dst, 0) - eq_(res._flow.icmpv4_type, 0) - eq_(res._flow.icmpv4_code, 0) - eq_(res._flow.arp_op, 0) - eq_(res._flow.arp_spa, 0) - eq_(res._flow.arp_tpa, 0) - eq_(res._flow.arp_sha, 0) - eq_(res._flow.arp_tha, 0) - eq_(res._flow.ipv6_src, []) - eq_(res._flow.ipv6_dst, []) - eq_(res._flow.ipv6_flabel, 0) - eq_(res._flow.icmpv6_type, 0) - eq_(res._flow.icmpv6_code, 0) - eq_(res._flow.ipv6_nd_target, []) - eq_(res._flow.ipv6_nd_sll, 0) - eq_(res._flow.ipv6_nd_tll, 0) - eq_(res._flow.mpls_label, 0) - eq_(res._flow.mpls_tc, 0) - - # flow check - eq_(res.fields, []) - - def _test_serialize_and_parser(self, match, header, value, mask=None): - cls_ = OFPMatchField._FIELDS_HEADERS.get(header) - pack_str = cls_.pack_str.replace('!', '') - fmt = '!HHI' + pack_str - - # serialize - buf = bytearray() - length = match.serialize(buf, 0) - eq_(length, len(buf)) - if mask and len(buf) > calcsize(fmt): - fmt += pack_str - - res = list(unpack_from(fmt, six.binary_type(buf), 0)[3:]) - if type(value) is list: - res_value = res[:calcsize(pack_str) // 2] - eq_(res_value, value) - if mask: - res_mask = res[calcsize(pack_str) // 2:] - eq_(res_mask, mask) - else: - res_value = res.pop(0) - if cls_.__name__ == 'MTVlanVid': - eq_(res_value, value | ofproto.OFPVID_PRESENT) - else: - eq_(res_value, value) - if mask and res and res[0]: - res_mask = res[0] - eq_(res_mask, mask) - - # parser - res = match.parser(six.binary_type(buf), 0) - eq_(res.type, ofproto.OFPMT_OXM) - eq_(res.fields[0].header, header) - eq_(res.fields[0].value, value) - if mask and res.fields[0].mask is not None: - eq_(res.fields[0].mask, mask) - - # to_jsondict - jsondict = match.to_jsondict() - - # from_jsondict - match2 = match.from_jsondict(jsondict["OFPMatch"]) - buf2 = bytearray() - match2.serialize(buf2, 0) - eq_(str(match), str(match2)) - eq_(buf, buf2) - - def test_parse_unknown_field(self): - buf = bytearray() - pack_utils.msg_pack_into('!HH', buf, 0, ofproto.OFPMT_OXM, 4 + 6) - header = ofproto.oxm_tlv_header(36, 2) - pack_utils.msg_pack_into('!IH', buf, 4, header, 1) - header = ofproto.OXM_OF_ETH_TYPE - pack_utils.msg_pack_into('!IH', buf, 10, header, 1) - - match = OFPMatch() - res = match.parser(six.binary_type(buf), 0) - - # set_in_port - def _test_set_in_port(self, in_port): - header = ofproto.OXM_OF_IN_PORT - match = OFPMatch() - match.set_in_port(in_port) - self._test_serialize_and_parser(match, header, in_port) - - def test_set_in_port_mid(self): - self._test_set_in_port(0xff8) - - def test_set_in_port_max(self): - self._test_set_in_port(0xffffffff) - - def test_set_in_port_min(self): - self._test_set_in_port(0) - - # set_in_phy_port - def _test_set_in_phy_port(self, phy_port): - header = ofproto.OXM_OF_IN_PHY_PORT - match = OFPMatch() - match.set_in_phy_port(phy_port) - self._test_serialize_and_parser(match, header, phy_port) - - def test_set_in_phy_port_mid(self): - self._test_set_in_phy_port(1) - - def test_set_in_phy_port_max(self): - self._test_set_in_phy_port(0xffffffff) - - def test_set_in_phy_port_min(self): - self._test_set_in_phy_port(0) - - # set_metadata - def _test_set_metadata(self, metadata, mask=None): - header = ofproto.OXM_OF_METADATA - match = OFPMatch() - if mask is None: - match.set_metadata(metadata) - else: - if (mask + 1) >> 64 != 1: - header = ofproto.OXM_OF_METADATA_W - match.set_metadata_masked(metadata, mask) - metadata &= mask - self._test_serialize_and_parser(match, header, metadata, mask) - - def test_set_metadata_mid(self): - self._test_set_metadata(0x1212121212121212) - - def test_set_metadata_max(self): - self._test_set_metadata(0xffffffffffffffff) - - def test_set_metadata_min(self): - self._test_set_metadata(0) - - def test_set_metadata_masked_mid(self): - self._test_set_metadata(0x1212121212121212, 0xff00ff00ff00ff00) - - def test_set_metadata_masked_max(self): - self._test_set_metadata(0x1212121212121212, 0xffffffffffffffff) - - def test_set_metadata_masked_min(self): - self._test_set_metadata(0x1212121212121212, 0) - - # set_dl_dst - def _test_set_dl_dst(self, dl_dst, mask=None): - header = ofproto.OXM_OF_ETH_DST - match = OFPMatch() - dl_dst = mac.haddr_to_bin(dl_dst) - if mask is None: - match.set_dl_dst(dl_dst) - else: - header = ofproto.OXM_OF_ETH_DST_W - mask = mac.haddr_to_bin(mask) - match.set_dl_dst_masked(dl_dst, mask) - dl_dst = mac.haddr_bitand(dl_dst, mask) - self._test_serialize_and_parser(match, header, dl_dst, mask) - - def test_set_dl_dst_mid(self): - self._test_set_dl_dst('e2:7a:09:79:0b:0f') - - def test_set_dl_dst_max(self): - self._test_set_dl_dst('ff:ff:ff:ff:ff:ff') - - def test_set_dl_dst_min(self): - self._test_set_dl_dst('00:00:00:00:00:00') - - def test_set_dl_dst_masked_mid(self): - self._test_set_dl_dst('e2:7a:09:79:0b:0f', 'ff:00:ff:00:ff:00') - - def test_set_dl_dst_masked_max(self): - self._test_set_dl_dst('e2:7a:09:79:0b:0f', 'ff:ff:ff:ff:ff:ff') - - def test_set_dl_dst_masked_min(self): - self._test_set_dl_dst('e2:7a:09:79:0b:0f', '00:00:00:00:00:00') - - # set_dl_src - def _test_set_dl_src(self, dl_src, mask=None): - header = ofproto.OXM_OF_ETH_SRC - match = OFPMatch() - dl_src = mac.haddr_to_bin(dl_src) - if mask is None: - match.set_dl_src(dl_src) - else: - header = ofproto.OXM_OF_ETH_SRC_W - mask = mac.haddr_to_bin(mask) - match.set_dl_src_masked(dl_src, mask) - dl_src = mac.haddr_bitand(dl_src, mask) - self._test_serialize_and_parser(match, header, dl_src, mask) - - def test_set_dl_src_mid(self): - self._test_set_dl_src('d0:98:79:b4:75:b5') - - def test_set_dl_src_max(self): - self._test_set_dl_src('ff:ff:ff:ff:ff:ff') - - def test_set_dl_src_min(self): - self._test_set_dl_src('00:00:00:00:00:00') - - def test_set_dl_src_masked_mid(self): - self._test_set_dl_src('d0:98:79:b4:75:b5', 'f0:f0:f0:f0:f0:f0') - - def test_set_dl_src_masked_max(self): - self._test_set_dl_src('d0:98:79:b4:75:b5', 'ff:ff:ff:ff:ff:ff') - - def test_set_dl_src_masked_min(self): - self._test_set_dl_src('d0:98:79:b4:75:b5', '00:00:00:00:00:00') - - # set_dl_type - def _test_set_dl_type(self, value): - header = ofproto.OXM_OF_ETH_TYPE - match = OFPMatch() - match.set_dl_type(value) - self._test_serialize_and_parser(match, header, value) - - def test_set_dl_type_mid(self): - self._test_set_dl_type(0x7fb6) - - def test_set_dl_type_max(self): - self._test_set_dl_type(0xffff) - - def test_set_dl_type_min(self): - self._test_set_dl_type(0) - - def test_set_dl_type_ip(self): - value = ether.ETH_TYPE_IP - self._test_set_dl_type(value) - - def test_set_dl_type_arp(self): - value = ether.ETH_TYPE_ARP - self._test_set_dl_type(value) - - def test_set_dl_type_ipv6(self): - value = ether.ETH_TYPE_IPV6 - self._test_set_dl_type(value) - - def test_set_dl_type_slow(self): - value = ether.ETH_TYPE_SLOW - self._test_set_dl_type(value) - - # set_vlan_vid - def _test_set_vlan_vid(self, vid, mask=None): - header = ofproto.OXM_OF_VLAN_VID - match = OFPMatch() - if mask is None: - match.set_vlan_vid(vid) - else: - header = ofproto.OXM_OF_VLAN_VID_W - match.set_vlan_vid_masked(vid, mask) - self._test_serialize_and_parser(match, header, vid, mask) - - def _test_set_vlan_vid_none(self): - header = ofproto.OXM_OF_VLAN_VID - match = OFPMatch() - match.set_vlan_vid_none() - value = ofproto.OFPVID_NONE - cls_ = OFPMatchField._FIELDS_HEADERS.get(header) - pack_str = cls_.pack_str.replace('!', '') - fmt = '!HHI' + pack_str - - # serialize - buf = bytearray() - length = match.serialize(buf, 0) - eq_(length, len(buf)) - - res = list(unpack_from(fmt, six.binary_type(buf), 0)[3:]) - res_value = res.pop(0) - eq_(res_value, value) - - # parser - res = match.parser(six.binary_type(buf), 0) - eq_(res.type, ofproto.OFPMT_OXM) - eq_(res.fields[0].header, header) - eq_(res.fields[0].value, value) - - # to_jsondict - jsondict = match.to_jsondict() - - # from_jsondict - match2 = match.from_jsondict(jsondict["OFPMatch"]) - buf2 = bytearray() - match2.serialize(buf2, 0) - eq_(str(match), str(match2)) - eq_(buf, buf2) - - def test_set_vlan_vid_mid(self): - self._test_set_vlan_vid(2047) - - def test_set_vlan_vid_max(self): - self._test_set_vlan_vid(0xfff) - - def test_set_vlan_vid_min(self): - self._test_set_vlan_vid(0) - - def test_set_vlan_vid_masked_mid(self): - self._test_set_vlan_vid(2047, 0xf0f) - - def test_set_vlan_vid_masked_max(self): - self._test_set_vlan_vid(2047, 0xfff) - - def test_set_vlan_vid_masked_min(self): - self._test_set_vlan_vid(2047, 0) - - def test_set_vlan_vid_none(self): - self._test_set_vlan_vid_none() - - # set_vlan_pcp - def _test_set_vlan_pcp(self, pcp): - header = ofproto.OXM_OF_VLAN_PCP - match = OFPMatch() - match.set_vlan_pcp(pcp) - self._test_serialize_and_parser(match, header, pcp) - - def test_set_vlan_pcp_mid(self): - self._test_set_vlan_pcp(5) - - def test_set_vlan_pcp_max(self): - self._test_set_vlan_pcp(7) - - def test_set_vlan_pcp_min(self): - self._test_set_vlan_pcp(0) - - # set_ip_dscp - def _test_set_ip_dscp(self, ip_dscp): - header = ofproto.OXM_OF_IP_DSCP - match = OFPMatch() - match.set_ip_dscp(ip_dscp) - self._test_serialize_and_parser(match, header, ip_dscp) - - def test_set_ip_dscp_mid(self): - self._test_set_ip_dscp(36) - - def test_set_ip_dscp_max(self): - self._test_set_ip_dscp(63) - - def test_set_ip_dscp_min(self): - self._test_set_ip_dscp(0) - - # set_ip_ecn - def _test_set_ip_ecn(self, ip_ecn): - header = ofproto.OXM_OF_IP_ECN - match = OFPMatch() - match.set_ip_ecn(ip_ecn) - self._test_serialize_and_parser(match, header, ip_ecn) - - def test_set_ip_ecn_mid(self): - self._test_set_ip_ecn(1) - - def test_set_ip_ecn_max(self): - self._test_set_ip_ecn(3) - - def test_set_ip_ecn_min(self): - self._test_set_ip_ecn(0) - - # set_ip_proto - def _test_set_ip_proto(self, ip_proto): - header = ofproto.OXM_OF_IP_PROTO - match = OFPMatch() - match.set_ip_proto(ip_proto) - self._test_serialize_and_parser(match, header, ip_proto) - - def test_set_ip_proto_mid(self): - self._test_set_ip_proto(6) - - def test_set_ip_proto_max(self): - self._test_set_ip_proto(0xff) - - def test_set_ip_proto_min(self): - self._test_set_ip_proto(0) - - # set_ipv4_src - def _test_set_ipv4_src(self, ip, mask=None): - header = ofproto.OXM_OF_IPV4_SRC - match = OFPMatch() - ip = unpack('!I', socket.inet_aton(ip))[0] - if mask is None: - match.set_ipv4_src(ip) - else: - mask = unpack('!I', socket.inet_aton(mask))[0] - if (mask + 1) >> 32 != 1: - header = ofproto.OXM_OF_IPV4_SRC_W - match.set_ipv4_src_masked(ip, mask) - self._test_serialize_and_parser(match, header, ip, mask) - - def test_set_ipv4_src_mid(self): - self._test_set_ipv4_src('192.168.196.250') - - def test_set_ipv4_src_max(self): - self._test_set_ipv4_src('255.255.255.255') - - def test_set_ipv4_src_min(self): - self._test_set_ipv4_src('0.0.0.0') - - def test_set_ipv4_src_masked_mid(self): - self._test_set_ipv4_src('192.168.196.250', '255.255.0.0') - - def test_set_ipv4_src_masked_max(self): - self._test_set_ipv4_src('192.168.196.250', '255.255.255.255') - - def test_set_ipv4_src_masked_min(self): - self._test_set_ipv4_src('192.168.196.250', '0.0.0.0') - - # set_ipv4_dst - def _test_set_ipv4_dst(self, ip, mask=None): - header = ofproto.OXM_OF_IPV4_DST - match = OFPMatch() - ip = unpack('!I', socket.inet_aton(ip))[0] - if mask is None: - match.set_ipv4_dst(ip) - else: - mask = unpack('!I', socket.inet_aton(mask))[0] - if (mask + 1) >> 32 != 1: - header = ofproto.OXM_OF_IPV4_DST_W - match.set_ipv4_dst_masked(ip, mask) - self._test_serialize_and_parser(match, header, ip, mask) - - def test_set_ipv4_dst_mid(self): - self._test_set_ipv4_dst('192.168.196.250') - - def test_set_ipv4_dst_max(self): - self._test_set_ipv4_dst('255.255.255.255') - - def test_set_ipv4_dst_min(self): - self._test_set_ipv4_dst('0.0.0.0') - - def test_set_ipv4_dst_masked_mid(self): - self._test_set_ipv4_dst('192.168.196.250', '255.255.0.0') - - def test_set_ipv4_dst_masked_max(self): - self._test_set_ipv4_dst('192.168.196.250', '255.255.255.255') - - def test_set_ipv4_dst_masked_min(self): - self._test_set_ipv4_dst('192.168.196.250', '0.0.0.0') - - # set_tcp_src - def _test_set_tcp_src(self, tcp_src): - header = ofproto.OXM_OF_TCP_SRC - match = OFPMatch() - match.set_tcp_src(tcp_src) - self._test_serialize_and_parser(match, header, tcp_src) - - def test_set_tcp_src_mid(self): - self._test_set_tcp_src(1103) - - def test_set_tcp_src_max(self): - self._test_set_tcp_src(0xffff) - - def test_set_tcp_src_min(self): - self._test_set_tcp_src(0) - - # set_tcp_dst - def _test_set_tcp_dst(self, tcp_dst): - header = ofproto.OXM_OF_TCP_DST - match = OFPMatch() - match.set_tcp_dst(tcp_dst) - self._test_serialize_and_parser(match, header, tcp_dst) - - def test_set_tcp_dst_mid(self): - self._test_set_tcp_dst(236) - - def test_set_tcp_dst_max(self): - self._test_set_tcp_dst(0xffff) - - def test_set_tcp_dst_min(self): - self._test_set_tcp_dst(0) - - # set_udp_src - def _test_set_udp_src(self, udp_src): - header = ofproto.OXM_OF_UDP_SRC - match = OFPMatch() - match.set_udp_src(udp_src) - self._test_serialize_and_parser(match, header, udp_src) - - def test_set_udp_src_mid(self): - self._test_set_udp_src(56617) - - def test_set_udp_src_max(self): - self._test_set_udp_src(0xffff) - - def test_set_udp_src_min(self): - self._test_set_udp_src(0) - - # set_udp_dst - def _test_set_udp_dst(self, udp_dst): - header = ofproto.OXM_OF_UDP_DST - match = OFPMatch() - match.set_udp_dst(udp_dst) - self._test_serialize_and_parser(match, header, udp_dst) - - def test_set_udp_dst_mid(self): - self._test_set_udp_dst(61278) - - def test_set_udp_dst_max(self): - self._test_set_udp_dst(0xffff) - - def test_set_udp_dst_min(self): - self._test_set_udp_dst(0) - - # set_sctp_src - def _test_set_sctp_src(self, sctp_src): - header = ofproto.OXM_OF_SCTP_SRC - match = OFPMatch() - match.set_sctp_src(sctp_src) - self._test_serialize_and_parser(match, header, sctp_src) - - def test_set_sctp_src_mid(self): - self._test_set_sctp_src(9999) - - def test_set_sctp_src_max(self): - self._test_set_sctp_src(0xffff) - - def test_set_sctp_src_min(self): - self._test_set_sctp_src(0) - - # set_sctp_dst - def _test_set_sctp_dst(self, sctp_dst): - header = ofproto.OXM_OF_SCTP_DST - match = OFPMatch() - match.set_sctp_dst(sctp_dst) - self._test_serialize_and_parser(match, header, sctp_dst) - - def test_set_sctp_dst_mid(self): - self._test_set_sctp_dst(1234) - - def test_set_sctp_dst_max(self): - self._test_set_sctp_dst(0xffff) - - def test_set_sctp_dst_min(self): - self._test_set_sctp_dst(0) - - # set_icmpv4_type - def _test_set_icmpv4_type(self, icmpv4_type): - header = ofproto.OXM_OF_ICMPV4_TYPE - match = OFPMatch() - match.set_icmpv4_type(icmpv4_type) - self._test_serialize_and_parser(match, header, icmpv4_type) - - def test_set_icmpv4_type_mid(self): - self._test_set_icmpv4_type(8) - - def test_set_icmpv4_type_max(self): - self._test_set_icmpv4_type(0xff) - - def test_set_icmpv4_type_min(self): - self._test_set_icmpv4_type(0) - - # set_icmpv4_code - def _test_set_icmpv4_code(self, icmpv4_code): - header = ofproto.OXM_OF_ICMPV4_CODE - match = OFPMatch() - match.set_icmpv4_code(icmpv4_code) - self._test_serialize_and_parser(match, header, icmpv4_code) - - def test_set_icmpv4_code_mid(self): - self._test_set_icmpv4_code(1) - - def test_set_icmpv4_code_max(self): - self._test_set_icmpv4_code(0xff) - - def test_set_icmpv4_code_min(self): - self._test_set_icmpv4_code(0) - - # set_arp_opcode - def _test_set_arp_opcode(self, arp_op): - header = ofproto.OXM_OF_ARP_OP - match = OFPMatch() - match.set_arp_opcode(arp_op) - self._test_serialize_and_parser(match, header, arp_op) - - def test_set_arp_opcode_mid(self): - self._test_set_arp_opcode(1) - - def test_set_arp_opcode_max(self): - self._test_set_arp_opcode(0xffff) - - def test_set_arp_opcode_min(self): - self._test_set_arp_opcode(0) - - # set_arp_spa - def _test_set_arp_spa(self, ip, mask=None): - header = ofproto.OXM_OF_ARP_SPA - match = OFPMatch() - ip = unpack('!I', socket.inet_aton(ip))[0] - if mask is None: - match.set_arp_spa(ip) - else: - mask = unpack('!I', socket.inet_aton(mask))[0] - if (mask + 1) >> 32 != 1: - header = ofproto.OXM_OF_ARP_SPA_W - match.set_arp_spa_masked(ip, mask) - self._test_serialize_and_parser(match, header, ip, mask) - - def test_set_arp_spa_mid(self): - self._test_set_arp_spa('192.168.227.57') - - def test_set_arp_spa_max(self): - self._test_set_arp_spa('255.255.255.255') - - def test_set_arp_spa_min(self): - self._test_set_arp_spa('0.0.0.0') - - def test_set_arp_spa_masked_mid(self): - self._test_set_arp_spa('192.168.227.57', '255.255.0.0') - - def test_set_arp_spa_masked_max(self): - self._test_set_arp_spa('192.168.227.57', '255.255.255.255') - - def test_set_arp_spa_masked_min(self): - self._test_set_arp_spa('192.168.227.57', '0.0.0.0') - - # set_arp_tpa - def _test_set_arp_tpa(self, ip, mask=None): - header = ofproto.OXM_OF_ARP_TPA - match = OFPMatch() - ip = unpack('!I', socket.inet_aton(ip))[0] - if mask is None: - match.set_arp_tpa(ip) - else: - mask = unpack('!I', socket.inet_aton(mask))[0] - if (mask + 1) >> 32 != 1: - header = ofproto.OXM_OF_ARP_TPA_W - match.set_arp_tpa_masked(ip, mask) - self._test_serialize_and_parser(match, header, ip, mask) - - def test_set_arp_tpa_mid(self): - self._test_set_arp_tpa('192.168.227.57') - - def test_set_arp_tpa_max(self): - self._test_set_arp_tpa('255.255.255.255') - - def test_set_arp_tpa_min(self): - self._test_set_arp_tpa('0.0.0.0') - - def test_set_arp_tpa_masked_mid(self): - self._test_set_arp_tpa('192.168.227.57', '255.255.0.0') - - def test_set_arp_tpa_masked_max(self): - self._test_set_arp_tpa('192.168.227.57', '255.255.255.255') - - def test_set_arp_tpa_masked_min(self): - self._test_set_arp_tpa('192.168.227.57', '0.0.0.0') - - # set_arp_sha - def _test_set_arp_sha(self, arp_sha, mask=None): - header = ofproto.OXM_OF_ARP_SHA - match = OFPMatch() - arp_sha = mac.haddr_to_bin(arp_sha) - if mask is None: - match.set_arp_sha(arp_sha) - else: - header = ofproto.OXM_OF_ARP_SHA_W - mask = mac.haddr_to_bin(mask) - match.set_arp_sha_masked(arp_sha, mask) - arp_sha = mac.haddr_bitand(arp_sha, mask) - self._test_serialize_and_parser(match, header, arp_sha, mask) - - def test_set_arp_sha_mid(self): - self._test_set_arp_sha('3e:ec:13:9b:f3:0b') - - def test_set_arp_sha_max(self): - self._test_set_arp_sha('ff:ff:ff:ff:ff:ff') - - def test_set_arp_sha_min(self): - self._test_set_arp_sha('00:00:00:00:00:00') - - def test_set_arp_sha_masked_mid(self): - self._test_set_arp_sha('3e:ec:13:9b:f3:0b', 'ff:ff:ff:00:00:00') - - def test_set_arp_sha_masked_max(self): - self._test_set_arp_sha('3e:ec:13:9b:f3:0b', 'ff:ff:ff:ff:ff:ff') - - def test_set_arp_sha_masked_min(self): - self._test_set_arp_sha('3e:ec:13:9b:f3:0b', '00:00:00:00:00:00') - - # set_arp_tha - def _test_set_arp_tha(self, arp_tha, mask=None): - header = ofproto.OXM_OF_ARP_THA - match = OFPMatch() - arp_tha = mac.haddr_to_bin(arp_tha) - if mask is None: - match.set_arp_tha(arp_tha) - else: - header = ofproto.OXM_OF_ARP_THA_W - mask = mac.haddr_to_bin(mask) - match.set_arp_tha_masked(arp_tha, mask) - arp_tha = mac.haddr_bitand(arp_tha, mask) - self._test_serialize_and_parser(match, header, arp_tha, mask) - - def test_set_arp_tha_mid(self): - self._test_set_arp_tha('83:6c:21:52:49:68') - - def test_set_arp_tha_max(self): - self._test_set_arp_tha('ff:ff:ff:ff:ff:ff') - - def test_set_arp_tha_min(self): - self._test_set_arp_tha('00:00:00:00:00:00') - - def test_set_arp_tha_masked_mid(self): - self._test_set_arp_tha('83:6c:21:52:49:68', 'ff:ff:ff:00:00:00') - - def test_set_arp_tha_masked_max(self): - self._test_set_arp_tha('83:6c:21:52:49:68', 'ff:ff:ff:ff:ff:ff') - - def test_set_arp_tha_masked_min(self): - self._test_set_arp_tha('83:6c:21:52:49:68', '00:00:00:00:00:00') - - # set_ipv6_src - def _test_set_ipv6_src(self, ipv6, mask=None): - header = ofproto.OXM_OF_IPV6_SRC - match = OFPMatch() - ipv6 = [int(x, 16) for x in ipv6.split(":")] - if mask is None: - match.set_ipv6_src(ipv6) - else: - header = ofproto.OXM_OF_IPV6_SRC_W - mask = [int(x, 16) for x in mask.split(":")] - match.set_ipv6_src_masked(ipv6, mask) - ipv6 = [x & y for (x, y) in zip(ipv6, mask)] - self._test_serialize_and_parser(match, header, ipv6, mask) - - def test_set_ipv6_src_mid(self): - ipv6 = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' - self._test_set_ipv6_src(ipv6) - - def test_set_ipv6_src_max(self): - ipv6 = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' - self._test_set_ipv6_src(ipv6) - - def test_set_ipv6_src_min(self): - ipv6 = '0:0:0:0:0:0:0:0' - self._test_set_ipv6_src(ipv6) - - def test_set_ipv6_src_masked_mid(self): - ipv6 = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' - mask = 'ffff:ffff:ffff:ffff:0:0:0:0' - self._test_set_ipv6_src(ipv6, mask) - - def test_set_ipv6_src_masked_max(self): - ipv6 = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' - mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' - self._test_set_ipv6_src(ipv6, mask) - - def test_set_ipv6_src_masked_min(self): - ipv6 = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' - mask = '0:0:0:0:0:0:0:0' - self._test_set_ipv6_src(ipv6, mask) - - # set_ipv6_dst - def _test_set_ipv6_dst(self, ipv6, mask=None): - header = ofproto.OXM_OF_IPV6_DST - match = OFPMatch() - ipv6 = [int(x, 16) for x in ipv6.split(":")] - if mask is None: - match.set_ipv6_dst(ipv6) - else: - header = ofproto.OXM_OF_IPV6_DST_W - mask = [int(x, 16) for x in mask.split(":")] - match.set_ipv6_dst_masked(ipv6, mask) - ipv6 = [x & y for (x, y) in zip(ipv6, mask)] - self._test_serialize_and_parser(match, header, ipv6, mask) - - def test_set_ipv6_dst_mid(self): - ipv6 = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' - self._test_set_ipv6_dst(ipv6) - - def test_set_ipv6_dst_max(self): - ipv6 = ':'.join(['ffff'] * 8) - self._test_set_ipv6_dst(ipv6) - - def test_set_ipv6_dst_min(self): - ipv6 = ':'.join(['0'] * 8) - self._test_set_ipv6_dst(ipv6) - - def test_set_ipv6_dst_mask_mid(self): - ipv6 = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' - mask = ':'.join(['ffff'] * 4 + ['0'] * 4) - self._test_set_ipv6_dst(ipv6, mask) - - def test_set_ipv6_dst_mask_max(self): - ipv6 = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' - mask = ':'.join(['ffff'] * 8) - self._test_set_ipv6_dst(ipv6, mask) - - def test_set_ipv6_dst_mask_min(self): - ipv6 = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' - mask = ':'.join(['0'] * 8) - self._test_set_ipv6_dst(ipv6, mask) - - # set_ipv6_flabel - def _test_set_ipv6_flabel(self, flabel, mask=None): - header = ofproto.OXM_OF_IPV6_FLABEL - match = OFPMatch() - if mask is None: - match.set_ipv6_flabel(flabel) - else: - header = ofproto.OXM_OF_IPV6_FLABEL_W - match.set_ipv6_flabel_masked(flabel, mask) - self._test_serialize_and_parser(match, header, flabel, mask) - - def test_set_ipv6_flabel_mid(self): - self._test_set_ipv6_flabel(0xc5384) - - def test_set_ipv6_flabel_max(self): - self._test_set_ipv6_flabel(0xfffff) - - def test_set_ipv6_flabel_min(self): - self._test_set_ipv6_flabel(0) - - def test_set_ipv6_flabel_masked_mid(self): - self._test_set_ipv6_flabel(0xc5384, 0xfff00) - - def test_set_ipv6_flabel_masked_max(self): - self._test_set_ipv6_flabel(0xc5384, 0xfffff) - - def test_set_ipv6_flabel_masked_min(self): - self._test_set_ipv6_flabel(0xc5384, 0) - - # set_icmpv6_type - def _test_set_icmpv6_type(self, icmpv6_type): - header = ofproto.OXM_OF_ICMPV6_TYPE - match = OFPMatch() - match.set_icmpv6_type(icmpv6_type) - self._test_serialize_and_parser(match, header, icmpv6_type) - - def test_set_icmpv6_type_mid(self): - self._test_set_icmpv6_type(129) - - def test_set_icmpv6_type_max(self): - self._test_set_icmpv6_type(0xff) - - def test_set_icmpv6_type_min(self): - self._test_set_icmpv6_type(0) - - # set_icmpv6_code - def _test_set_icmpv6_code(self, icmpv6_code): - header = ofproto.OXM_OF_ICMPV6_CODE - match = OFPMatch() - match.set_icmpv6_code(icmpv6_code) - self._test_serialize_and_parser(match, header, icmpv6_code) - - def test_set_icmpv6_code_mid(self): - self._test_set_icmpv6_code(1) - - def test_set_icmpv6_code_max(self): - self._test_set_icmpv6_code(0xff) - - def test_set_icmpv6_code_min(self): - self._test_set_icmpv6_code(0) - - # set_ipv6_nd_target - def _test_set_ipv6_nd_target(self, ipv6): - header = ofproto.OXM_OF_IPV6_ND_TARGET - match = OFPMatch() - ipv6 = [int(x, 16) for x in ipv6.split(":")] - match.set_ipv6_nd_target(ipv6) - self._test_serialize_and_parser(match, header, ipv6) - - def test_set_ipv6_nd_target_mid(self): - ip = '5420:db3f:921b:3e33:2791:98f:dd7f:2e19' - self._test_set_ipv6_nd_target(ip) - - def test_set_ipv6_nd_target_max(self): - ip = ':'.join(['ffff'] * 8) - self._test_set_ipv6_nd_target(ip) - - def test_set_ipv6_nd_target_min(self): - ip = ':'.join(['0'] * 8) - self._test_set_ipv6_nd_target(ip) - - # set_ipv6_nd_sll - def _test_set_ipv6_nd_sll(self, nd_sll): - header = ofproto.OXM_OF_IPV6_ND_SLL - match = OFPMatch() - nd_sll = mac.haddr_to_bin(nd_sll) - match.set_ipv6_nd_sll(nd_sll) - self._test_serialize_and_parser(match, header, nd_sll) - - def test_set_ipv6_nd_sll_mid(self): - self._test_set_ipv6_nd_sll('93:6d:d0:d4:e8:36') - - def test_set_ipv6_nd_sll_max(self): - self._test_set_ipv6_nd_sll('ff:ff:ff:ff:ff:ff') - - def test_set_ipv6_nd_sll_min(self): - self._test_set_ipv6_nd_sll('00:00:00:00:00:00') - - # set_ipv6_nd_tll - def _test_set_ipv6_nd_tll(self, nd_tll): - header = ofproto.OXM_OF_IPV6_ND_TLL - match = OFPMatch() - nd_tll = mac.haddr_to_bin(nd_tll) - match.set_ipv6_nd_tll(nd_tll) - self._test_serialize_and_parser(match, header, nd_tll) - - def test_set_ipv6_nd_tll_mid(self): - self._test_set_ipv6_nd_tll('18:f6:66:b6:f1:b3') - - def test_set_ipv6_nd_tll_max(self): - self._test_set_ipv6_nd_tll('ff:ff:ff:ff:ff:ff') - - def test_set_ipv6_nd_tll_min(self): - self._test_set_ipv6_nd_tll('00:00:00:00:00:00') - - # set_mpls_label - def _test_set_mpls_label(self, mpls_label): - header = ofproto.OXM_OF_MPLS_LABEL - match = OFPMatch() - match.set_mpls_label(mpls_label) - self._test_serialize_and_parser(match, header, mpls_label) - - def test_set_mpls_label_mid(self): - self._test_set_mpls_label(2144) - - def test_set_mpls_label_max(self): - self._test_set_mpls_label(0xfffff) - - def test_set_mpls_label_min(self): - self._test_set_mpls_label(0) - - # set_mpls_tc - def _test_set_mpls_tc(self, mpls_tc): - header = ofproto.OXM_OF_MPLS_TC - match = OFPMatch() - match.set_mpls_tc(mpls_tc) - self._test_serialize_and_parser(match, header, mpls_tc) - - def test_set_mpls_tc_mid(self): - self._test_set_mpls_tc(3) - - def test_set_mpls_tc_max(self): - self._test_set_mpls_tc(7) - - def test_set_mpls_tc_min(self): - self._test_set_mpls_tc(0) - - -class TestOFPMatchField(unittest.TestCase): - """ Test case for ofproto_v1_2_parser.OFPMatchField - """ - - def test_init_hasmask_true(self): - header = 0x0100 - - res = OFPMatchField(header) - - eq_(res.header, header) - eq_(res.n_bytes, (header & 0xff) // 2) - eq_(res.length, 0) - - def test_init_hasmask_false(self): - header = 0x0000 - - res = OFPMatchField(header) - - eq_(res.header, header) - eq_(res.n_bytes, header & 0xff) - eq_(res.length, 0) diff --git a/ryu/tests/unit/ofproto/test_parser_v13.py b/ryu/tests/unit/ofproto/test_parser_v13.py deleted file mode 100644 index 265b28e4..00000000 --- a/ryu/tests/unit/ofproto/test_parser_v13.py +++ /dev/null @@ -1,164 +0,0 @@ -# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import six -import socket -from struct import * -from nose.tools import * -from ryu.ofproto.ofproto_v1_3_parser import * -from ryu.ofproto import ofproto_v1_3_parser -from ryu.ofproto import ofproto_v1_3 -from ryu.ofproto import ofproto_protocol -from ryu.ofproto import ether -from ryu.ofproto.ofproto_parser import MsgBase -from ryu import utils -from ryu.lib import addrconv - -LOG = logging.getLogger('test_ofproto_v13') - - -_Datapath = ofproto_protocol.ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) - - -class TestOFPMatch(unittest.TestCase): - - """ Test case for ofproto_v1_3_parser.OFPMatch - """ - - def test_init(self): - res = OFPMatch() - - # wc check - eq_(res._wc.vlan_vid_mask, 0) - - # flow check - eq_(res._flow.vlan_vid, 0) - - def _test_serialize_and_parser(self, match, header, value, mask=None): - cls_ = OFPMatchField._FIELDS_HEADERS.get(header) - pack_str = cls_.pack_str.replace('!', '') - fmt = '!HHI' + pack_str - - # serialize - buf = bytearray() - length = match.serialize(buf, 0) - eq_(length, len(buf)) - if mask and len(buf) > calcsize(fmt): - fmt += pack_str - - res = list(unpack_from(fmt, six.binary_type(buf), 0)[3:]) - if type(value) is list: - res_value = res[:calcsize(pack_str) // 2] - eq_(res_value, value) - if mask: - res_mask = res[calcsize(pack_str) // 2:] - eq_(res_mask, mask) - else: - res_value = res.pop(0) - if cls_.__name__ == 'MTVlanVid': - eq_(res_value, value | ofproto.OFPVID_PRESENT) - else: - eq_(res_value, value) - if mask and res and res[0]: - res_mask = res[0] - eq_(res_mask, mask) - - # parser - res = match.parser(six.binary_type(buf), 0) - eq_(res.type, ofproto.OFPMT_OXM) - eq_(res.fields[0].header, header) - eq_(res.fields[0].value, value) - if mask and res.fields[0].mask is not None: - eq_(res.fields[0].mask, mask) - - # to_jsondict - jsondict = match.to_jsondict() - - # from_jsondict - match2 = match.from_jsondict(jsondict["OFPMatch"]) - buf2 = bytearray() - match2.serialize(buf2, 0) - eq_(str(match), str(match2)) - eq_(buf, buf2) - - # set_vlan_vid - def _test_set_vlan_vid(self, vid, mask=None): - header = ofproto.OXM_OF_VLAN_VID - match = OFPMatch() - if mask is None: - match.set_vlan_vid(vid) - else: - header = ofproto.OXM_OF_VLAN_VID_W - match.set_vlan_vid_masked(vid, mask) - self._test_serialize_and_parser(match, header, vid, mask) - - def _test_set_vlan_vid_none(self): - header = ofproto.OXM_OF_VLAN_VID - match = OFPMatch() - match.set_vlan_vid_none() - value = ofproto.OFPVID_NONE - cls_ = OFPMatchField._FIELDS_HEADERS.get(header) - pack_str = cls_.pack_str.replace('!', '') - fmt = '!HHI' + pack_str - - # serialize - buf = bytearray() - length = match.serialize(buf, 0) - eq_(length, len(buf)) - - res = list(unpack_from(fmt, six.binary_type(buf), 0)[3:]) - res_value = res.pop(0) - eq_(res_value, value) - - # parser - res = match.parser(six.binary_type(buf), 0) - eq_(res.type, ofproto.OFPMT_OXM) - eq_(res.fields[0].header, header) - eq_(res.fields[0].value, value) - - # to_jsondict - jsondict = match.to_jsondict() - - # from_jsondict - match2 = match.from_jsondict(jsondict["OFPMatch"]) - buf2 = bytearray() - match2.serialize(buf2, 0) - eq_(str(match), str(match2)) - eq_(buf, buf2) - - def test_set_vlan_vid_mid(self): - self._test_set_vlan_vid(2047) - - def test_set_vlan_vid_max(self): - self._test_set_vlan_vid(0xfff) - - def test_set_vlan_vid_min(self): - self._test_set_vlan_vid(0) - - def test_set_vlan_vid_masked_mid(self): - self._test_set_vlan_vid(2047, 0xf0f) - - def test_set_vlan_vid_masked_max(self): - self._test_set_vlan_vid(2047, 0xfff) - - def test_set_vlan_vid_masked_min(self): - self._test_set_vlan_vid(2047, 0) - - def test_set_vlan_vid_none(self): - self._test_set_vlan_vid_none() diff --git a/ryu/tests/unit/packet/__init__.py b/ryu/tests/unit/packet/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/packet/test_arp.py b/ryu/tests/unit/packet/test_arp.py deleted file mode 100644 index 40e28131..00000000 --- a/ryu/tests/unit/packet/test_arp.py +++ /dev/null @@ -1,183 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import struct -from struct import * -from nose.tools import * -from ryu.ofproto import ether -from ryu.lib.packet.ethernet import ethernet -from ryu.lib.packet.packet import Packet -from ryu.lib.packet.arp import arp -from ryu.lib.packet.vlan import vlan -from ryu.lib import addrconv - - -LOG = logging.getLogger('test_arp') - - -class Test_arp(unittest.TestCase): - """ Test case for arp - """ - - hwtype = 1 - proto = 0x0800 - hlen = 6 - plen = 4 - opcode = 1 - src_mac = '00:07:0d:af:f4:54' - src_ip = '24.166.172.1' - dst_mac = '00:00:00:00:00:00' - dst_ip = '24.166.173.159' - - fmt = arp._PACK_STR - buf = pack(fmt, hwtype, proto, hlen, plen, opcode, - addrconv.mac.text_to_bin(src_mac), - addrconv.ipv4.text_to_bin(src_ip), - addrconv.mac.text_to_bin(dst_mac), - addrconv.ipv4.text_to_bin(dst_ip)) - - a = arp(hwtype, proto, hlen, plen, opcode, src_mac, src_ip, dst_mac, - dst_ip) - - def setUp(self): - pass - - def tearDown(self): - pass - - def find_protocol(self, pkt, name): - for p in pkt.protocols: - if p.protocol_name == name: - return p - - def test_init(self): - eq_(self.hwtype, self.a.hwtype) - eq_(self.proto, self.a.proto) - eq_(self.hlen, self.a.hlen) - eq_(self.plen, self.a.plen) - eq_(self.opcode, self.a.opcode) - eq_(self.src_mac, self.a.src_mac) - eq_(self.src_ip, self.a.src_ip) - eq_(self.dst_mac, self.a.dst_mac) - eq_(self.dst_ip, self.a.dst_ip) - - def test_parser(self): - _res = self.a.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - - eq_(res.hwtype, self.hwtype) - eq_(res.proto, self.proto) - eq_(res.hlen, self.hlen) - eq_(res.plen, self.plen) - eq_(res.opcode, self.opcode) - eq_(res.src_mac, self.src_mac) - eq_(res.src_ip, self.src_ip) - eq_(res.dst_mac, self.dst_mac) - eq_(res.dst_ip, self.dst_ip) - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.a.serialize(data, prev) - - fmt = arp._PACK_STR - res = struct.unpack(fmt, buf) - - eq_(res[0], self.hwtype) - eq_(res[1], self.proto) - eq_(res[2], self.hlen) - eq_(res[3], self.plen) - eq_(res[4], self.opcode) - eq_(res[5], addrconv.mac.text_to_bin(self.src_mac)) - eq_(res[6], addrconv.ipv4.text_to_bin(self.src_ip)) - eq_(res[7], addrconv.mac.text_to_bin(self.dst_mac)) - eq_(res[8], addrconv.ipv4.text_to_bin(self.dst_ip)) - - def _build_arp(self, vlan_enabled): - if vlan_enabled is True: - ethertype = ether.ETH_TYPE_8021Q - v = vlan(1, 1, 3, ether.ETH_TYPE_ARP) - else: - ethertype = ether.ETH_TYPE_ARP - e = ethernet(self.dst_mac, self.src_mac, ethertype) - p = Packet() - - p.add_protocol(e) - if vlan_enabled is True: - p.add_protocol(v) - p.add_protocol(self.a) - p.serialize() - return p - - def test_build_arp_vlan(self): - p = self._build_arp(True) - - e = self.find_protocol(p, "ethernet") - ok_(e) - eq_(e.ethertype, ether.ETH_TYPE_8021Q) - - v = self.find_protocol(p, "vlan") - ok_(v) - eq_(v.ethertype, ether.ETH_TYPE_ARP) - - a = self.find_protocol(p, "arp") - ok_(a) - - eq_(a.hwtype, self.hwtype) - eq_(a.proto, self.proto) - eq_(a.hlen, self.hlen) - eq_(a.plen, self.plen) - eq_(a.opcode, self.opcode) - eq_(a.src_mac, self.src_mac) - eq_(a.src_ip, self.src_ip) - eq_(a.dst_mac, self.dst_mac) - eq_(a.dst_ip, self.dst_ip) - - def test_build_arp_novlan(self): - p = self._build_arp(False) - - e = self.find_protocol(p, "ethernet") - ok_(e) - eq_(e.ethertype, ether.ETH_TYPE_ARP) - - a = self.find_protocol(p, "arp") - ok_(a) - - eq_(a.hwtype, self.hwtype) - eq_(a.proto, self.proto) - eq_(a.hlen, self.hlen) - eq_(a.plen, self.plen) - eq_(a.opcode, self.opcode) - eq_(a.src_mac, self.src_mac) - eq_(a.src_ip, self.src_ip) - eq_(a.dst_mac, self.dst_mac) - eq_(a.dst_ip, self.dst_ip) - - @raises(Exception) - def test_malformed_arp(self): - m_short_buf = self.buf[1:arp._MIN_LEN] - arp.parser(m_short_buf) - - def test_json(self): - jsondict = self.a.to_jsondict() - a = arp.from_jsondict(jsondict['arp']) - eq_(str(self.a), str(a)) diff --git a/ryu/tests/unit/packet/test_bfd.py b/ryu/tests/unit/packet/test_bfd.py deleted file mode 100644 index d33949cc..00000000 --- a/ryu/tests/unit/packet/test_bfd.py +++ /dev/null @@ -1,320 +0,0 @@ -# Copyright (C) 2014 Xinguard, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -import logging -import struct -import inspect -from nose.tools import ok_, eq_, nottest - -from ryu.ofproto import ether -from ryu.ofproto import inet -from ryu.lib.packet import packet -from ryu.lib.packet import ethernet -from ryu.lib.packet import ipv4 -from ryu.lib.packet import udp -from ryu.lib.packet import bfd -from ryu.lib import addrconv - -LOG = logging.getLogger(__name__) - - -class TestBFD(unittest.TestCase): - def setUp(self): - # BFD packet without authentication. - self.data = b'\xb0\xa8\x6e\x18\xb8\x08\x64\x87' \ - + b'\x88\xe9\xcb\xc8\x08\x00\x45\xc0' \ - + b'\x00\x34\x68\x49\x00\x00\xff\x11' \ - + b'\xf4\x73\xac\x1c\x03\x01\xac\x1c' \ - + b'\x03\x02\xc0\x00\x0e\xc8\x00\x20' \ - + b'\xd9\x02\x21\xc0\x03\x18\x00\x00' \ - + b'\x00\x06\x00\x00\x00\x07\x00\x00' \ - + b'\xea\x60\x00\x00\xea\x60\x00\x00' \ - + b'\x00\x00' - - # BFD packet using simple password authentication. - self.data_auth_simple = b'\x08\x00\x27\xd1\x95\x7c\x08\x00' \ - + b'\x27\xed\x54\x41\x08\x00\x45\xc0' \ - + b'\x00\x3d\x0c\x90\x00\x00\xff\x11' \ - + b'\xbb\x0b\xc0\xa8\x39\x02\xc0\xa8' \ - + b'\x39\x01\xc0\x00\x0e\xc8\x00\x29' \ - + b'\x46\x35\x20\x44\x03\x21\x00\x00' \ - + b'\x00\x01\x00\x00\x00\x00\x00\x0f' \ - + b'\x42\x40\x00\x0f\x42\x40\x00\x00' \ - + b'\x00\x00\x01\x09\x02\x73\x65\x63' \ - + b'\x72\x65\x74' - - # BFD packet using md5 authentication. - self.data_auth_md5 = b'\x08\x00\x27\xd1\x95\x7c\x08\x00' \ - + b'\x27\xed\x54\x41\x08\x00\x45\xc0' \ - + b'\x00\x4c\x0c\x44\x00\x00\xff\x11' \ - + b'\xbb\x48\xc0\xa8\x39\x02\xc0\xa8' \ - + b'\x39\x01\xc0\x00\x0e\xc8\x00\x38' \ - + b'\x51\xbc\x20\x44\x03\x30\x00\x00' \ - + b'\x00\x01\x00\x00\x00\x00\x00\x0f' \ - + b'\x42\x40\x00\x0f\x42\x40\x00\x00' \ - + b'\x00\x00\x02\x18\x02\x00\x00\x00' \ - + b'\x41\xdb\x66\xa8\xf9\x25\x5a\x8b' \ - + b'\xcb\x7e\x4b\xec\x25\xa6\x2c\x23' \ - + b'\xda\x0f' - - # BFD packet using SHA1 authentication. - self.data_auth_sha1 = b'\x08\x00\x27\xd1\x95\x7c\x08\x00' \ - + b'\x27\xed\x54\x41\x08\x00\x45\xc0' \ - + b'\x00\x50\x0b\x90\x00\x00\xff\x11' \ - + b'\xbb\xf8\xc0\xa8\x39\x02\xc0\xa8' \ - + b'\x39\x01\xc0\x00\x0e\xc8\x00\x3c' \ - + b'\xb9\x92\x20\x44\x03\x34\x00\x00' \ - + b'\x00\x01\x00\x00\x00\x00\x00\x0f' \ - + b'\x42\x40\x00\x0f\x42\x40\x00\x00' \ - + b'\x00\x00\x04\x1c\x02\x00\x00\x00' \ - + b'\x41\xb1\x46\x20\x10\x81\x03\xd7' \ - + b'\xf4\xde\x87\x61\x4c\x24\x61\x1f' \ - + b'\x3c\xc1\x6a\x00\x69\x23' - - # BFD Key chain {auth_key_id: auth_key/password} - self.auth_keys = {2: b"secret"} - - def tearDown(self): - pass - - def test_parse(self): - buf = self.data - pkt = packet.Packet(buf) - i = iter(pkt) - - eq_(type(next(i)), ethernet.ethernet) - eq_(type(next(i)), ipv4.ipv4) - eq_(type(next(i)), udp.udp) - eq_(type(bfd.bfd.parser(next(i))[0]), bfd.bfd) - - def test_parse_with_auth_simple(self): - buf = self.data_auth_simple - pkt = packet.Packet(buf) - i = iter(pkt) - - eq_(type(next(i)), ethernet.ethernet) - eq_(type(next(i)), ipv4.ipv4) - eq_(type(next(i)), udp.udp) - - bfd_obj = bfd.bfd.parser(next(i))[0] - eq_(type(bfd_obj), bfd.bfd) - eq_(type(bfd_obj.auth_cls), bfd.SimplePassword) - ok_(bfd_obj.authenticate(self.auth_keys)) - - def test_parse_with_auth_md5(self): - buf = self.data_auth_md5 - pkt = packet.Packet(buf) - i = iter(pkt) - - eq_(type(next(i)), ethernet.ethernet) - eq_(type(next(i)), ipv4.ipv4) - eq_(type(next(i)), udp.udp) - - bfd_obj = bfd.bfd.parser(next(i))[0] - eq_(type(bfd_obj), bfd.bfd) - eq_(type(bfd_obj.auth_cls), bfd.KeyedMD5) - ok_(bfd_obj.authenticate(self.auth_keys)) - - def test_parse_with_auth_sha1(self): - buf = self.data_auth_sha1 - pkt = packet.Packet(buf) - i = iter(pkt) - - eq_(type(next(i)), ethernet.ethernet) - eq_(type(next(i)), ipv4.ipv4) - eq_(type(next(i)), udp.udp) - - bfd_obj = bfd.bfd.parser(next(i))[0] - eq_(type(bfd_obj), bfd.bfd) - eq_(type(bfd_obj.auth_cls), bfd.KeyedSHA1) - ok_(bfd_obj.authenticate(self.auth_keys)) - - def test_serialize(self): - pkt = packet.Packet() - - eth_pkt = ethernet.ethernet('b0:a8:6e:18:b8:08', '64:87:88:e9:cb:c8') - pkt.add_protocol(eth_pkt) - - ip_pkt = ipv4.ipv4(src='172.28.3.1', dst='172.28.3.2', tos=192, - identification=26697, proto=inet.IPPROTO_UDP) - pkt.add_protocol(ip_pkt) - - udp_pkt = udp.udp(49152, 3784) - pkt.add_protocol(udp_pkt) - - bfd_pkt = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_CTRL_DETECT_TIME_EXPIRED, - state=bfd.BFD_STATE_UP, detect_mult=3, my_discr=6, - your_discr=7, desired_min_tx_interval=60000, - required_min_rx_interval=60000, - required_min_echo_rx_interval=0) - pkt.add_protocol(bfd_pkt) - - eq_(len(pkt.protocols), 4) - - pkt.serialize() - eq_(pkt.data, self.data) - - def test_serialize_with_auth_simple(self): - pkt = packet.Packet() - - eth_pkt = ethernet.ethernet('08:00:27:d1:95:7c', '08:00:27:ed:54:41') - pkt.add_protocol(eth_pkt) - - ip_pkt = ipv4.ipv4(src='192.168.57.2', dst='192.168.57.1', tos=192, - identification=3216, proto=inet.IPPROTO_UDP) - pkt.add_protocol(ip_pkt) - - udp_pkt = udp.udp(49152, 3784) - pkt.add_protocol(udp_pkt) - - auth_cls = bfd.SimplePassword(auth_key_id=2, - password=self.auth_keys[2]) - - bfd_pkt = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, - flags=bfd.BFD_FLAG_AUTH_PRESENT, - state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, - your_discr=0, desired_min_tx_interval=1000000, - required_min_rx_interval=1000000, - required_min_echo_rx_interval=0, - auth_cls=auth_cls) - - pkt.add_protocol(bfd_pkt) - - eq_(len(pkt.protocols), 4) - - pkt.serialize() - eq_(pkt.data, self.data_auth_simple) - - def test_serialize_with_auth_md5(self): - pkt = packet.Packet() - - eth_pkt = ethernet.ethernet('08:00:27:d1:95:7c', '08:00:27:ed:54:41') - pkt.add_protocol(eth_pkt) - - ip_pkt = ipv4.ipv4(src='192.168.57.2', dst='192.168.57.1', tos=192, - identification=3140, proto=inet.IPPROTO_UDP) - pkt.add_protocol(ip_pkt) - - udp_pkt = udp.udp(49152, 3784) - pkt.add_protocol(udp_pkt) - - auth_cls = bfd.KeyedMD5(auth_key_id=2, seq=16859, - auth_key=self.auth_keys[2]) - - bfd_pkt = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, - flags=bfd.BFD_FLAG_AUTH_PRESENT, - state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, - your_discr=0, desired_min_tx_interval=1000000, - required_min_rx_interval=1000000, - required_min_echo_rx_interval=0, - auth_cls=auth_cls) - - pkt.add_protocol(bfd_pkt) - - eq_(len(pkt.protocols), 4) - - pkt.serialize() - eq_(pkt.data, self.data_auth_md5) - - def test_serialize_with_auth_sha1(self): - pkt = packet.Packet() - - eth_pkt = ethernet.ethernet('08:00:27:d1:95:7c', '08:00:27:ed:54:41') - pkt.add_protocol(eth_pkt) - - ip_pkt = ipv4.ipv4(src='192.168.57.2', dst='192.168.57.1', tos=192, - identification=2960, proto=inet.IPPROTO_UDP) - pkt.add_protocol(ip_pkt) - - udp_pkt = udp.udp(49152, 3784) - pkt.add_protocol(udp_pkt) - - auth_cls = bfd.KeyedSHA1(auth_key_id=2, seq=16817, - auth_key=self.auth_keys[2]) - - bfd_pkt = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, - flags=bfd.BFD_FLAG_AUTH_PRESENT, - state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, - your_discr=0, desired_min_tx_interval=1000000, - required_min_rx_interval=1000000, - required_min_echo_rx_interval=0, - auth_cls=auth_cls) - - pkt.add_protocol(bfd_pkt) - - eq_(len(pkt.protocols), 4) - - pkt.serialize() - eq_(pkt.data, self.data_auth_sha1) - - def test_json(self): - bfd1 = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_CTRL_DETECT_TIME_EXPIRED, - state=bfd.BFD_STATE_UP, detect_mult=3, my_discr=6, - your_discr=7, desired_min_tx_interval=60000, - required_min_rx_interval=60000, - required_min_echo_rx_interval=0) - - jsondict = bfd1.to_jsondict() - bfd2 = bfd.bfd.from_jsondict(jsondict['bfd']) - eq_(str(bfd1), str(bfd2)) - - def test_json_with_auth_simple(self): - auth_cls = bfd.SimplePassword(auth_key_id=2, - password=self.auth_keys[2]) - - bfd1 = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, - flags=bfd.BFD_FLAG_AUTH_PRESENT, - state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, - your_discr=0, desired_min_tx_interval=1000000, - required_min_rx_interval=1000000, - required_min_echo_rx_interval=0, - auth_cls=auth_cls) - - jsondict = bfd1.to_jsondict() - bfd2 = bfd.bfd.from_jsondict(jsondict['bfd']) - eq_(str(bfd1), str(bfd2)) - - def test_json_with_auth_md5(self): - auth_cls = bfd.KeyedMD5(auth_key_id=2, seq=16859, - auth_key=self.auth_keys[2]) - - bfd1 = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, - flags=bfd.BFD_FLAG_AUTH_PRESENT, - state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, - your_discr=0, desired_min_tx_interval=1000000, - required_min_rx_interval=1000000, - required_min_echo_rx_interval=0, - auth_cls=auth_cls) - - jsondict = bfd1.to_jsondict() - bfd2 = bfd.bfd.from_jsondict(jsondict['bfd']) - eq_(str(bfd1), str(bfd2)) - - def test_json_with_auth_sha1(self): - auth_cls = bfd.KeyedSHA1(auth_key_id=2, seq=16859, - auth_key=self.auth_keys[2]) - - bfd1 = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, - flags=bfd.BFD_FLAG_AUTH_PRESENT, - state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, - your_discr=0, desired_min_tx_interval=1000000, - required_min_rx_interval=1000000, - required_min_echo_rx_interval=0, - auth_cls=auth_cls) - - jsondict = bfd1.to_jsondict() - bfd2 = bfd.bfd.from_jsondict(jsondict['bfd']) - eq_(str(bfd1), str(bfd2)) diff --git a/ryu/tests/unit/packet/test_bgp.py b/ryu/tests/unit/packet/test_bgp.py deleted file mode 100644 index 2211fc4c..00000000 --- a/ryu/tests/unit/packet/test_bgp.py +++ /dev/null @@ -1,813 +0,0 @@ -# Copyright (C) 2013,2014 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013,2014 YAMAMOTO Takashi -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import logging -import os -import sys - -import unittest -from nose.tools import eq_ -from nose.tools import ok_ - -from ryu.utils import binary_str -from ryu.lib import pcaplib -from ryu.lib.packet import packet -from ryu.lib.packet import bgp -from ryu.lib.packet import afi -from ryu.lib.packet import safi - - -LOG = logging.getLogger(__name__) - -BGP4_PACKET_DATA_DIR = os.path.join( - os.path.dirname(sys.modules[__name__].__file__), '../../packet_data/bgp4/') - -PMSI_TYPE_NO_TUNNEL_INFORMATION_PRESENT = ( - bgp.BGPPathAttributePmsiTunnel.TYPE_NO_TUNNEL_INFORMATION_PRESENT -) -PMSI_TYPE_INGRESS_REPLICATION = ( - bgp.BGPPathAttributePmsiTunnel.TYPE_INGRESS_REPLICATION -) - -RULES_BASE = [ - # port='>=8000' - bgp.FlowSpecPort( - operator=(bgp.FlowSpecPort.GT | bgp.FlowSpecPort.EQ), - value=8000), - # port='&<=9000' - bgp.FlowSpecPort( - operator=(bgp.FlowSpecPort.AND | bgp.FlowSpecPort.LT | - bgp.FlowSpecPort.EQ), - value=9000), - # port='==80' - bgp.FlowSpecPort(operator=bgp.FlowSpecPort.EQ, value=80), - # dst_port=8080 - bgp.FlowSpecDestPort(operator=bgp.FlowSpecDestPort.EQ, value=8080), - # dst_port='>9000' - bgp.FlowSpecDestPort(operator=bgp.FlowSpecDestPort.GT, value=9000), - # dst_port='&<9050' - bgp.FlowSpecDestPort( - operator=(bgp.FlowSpecDestPort.AND | bgp.FlowSpecDestPort.LT), - value=9050), - # dst_port='<=1000' - bgp.FlowSpecDestPort( - operator=(bgp.FlowSpecDestPort.LT | bgp.FlowSpecDestPort.EQ), - value=1000), - # src_port='<=9090' - bgp.FlowSpecSrcPort( - operator=(bgp.FlowSpecSrcPort.LT | bgp.FlowSpecSrcPort.EQ), - value=9090), - # src_port='& >=9080' - bgp.FlowSpecSrcPort( - operator=(bgp.FlowSpecSrcPort.AND | bgp.FlowSpecSrcPort.GT | - bgp.FlowSpecSrcPort.EQ), - value=9080), - # src_port='<10100' - bgp.FlowSpecSrcPort( - operator=bgp.FlowSpecSrcPort.LT, value=10100), - # src_port='>10000' - bgp.FlowSpecSrcPort( - operator=(bgp.FlowSpecSrcPort.AND | bgp.FlowSpecSrcPort.GT), - value=10000), - # icmp_type=0 - bgp.FlowSpecIcmpType(operator=bgp.FlowSpecIcmpType.EQ, value=0), - # icmp_code=6 - bgp.FlowSpecIcmpCode(operator=bgp.FlowSpecIcmpCode.EQ, value=6), - # tcp_flags='ACK+FIN' - bgp.FlowSpecTCPFlags( - operator=0, # Partial match - value=(bgp.FlowSpecTCPFlags.SYN | bgp.FlowSpecTCPFlags.ACK)), - # tcp_flags='&!=URGENT' - bgp.FlowSpecTCPFlags( - operator=(bgp.FlowSpecTCPFlags.AND | bgp.FlowSpecTCPFlags.NOT), - value=bgp.FlowSpecTCPFlags.URGENT), - # packet_len=1000 - bgp.FlowSpecPacketLen( - operator=bgp.FlowSpecPacketLen.EQ, value=1000), - # packet_len=1100 - bgp.FlowSpecPacketLen( - operator=(bgp.FlowSpecTCPFlags.AND | bgp.FlowSpecPacketLen.EQ), - value=1100), - # dscp=22 - bgp.FlowSpecDSCP(operator=bgp.FlowSpecDSCP.EQ, value=22), - # dscp=24 - bgp.FlowSpecDSCP(operator=bgp.FlowSpecDSCP.EQ, value=24), -] - -RULES_L2VPN_BASE = [ - # ether_type=0x0800 - bgp.FlowSpecEtherType(operator=bgp.FlowSpecEtherType.EQ, value=0x0800), - # source_mac='12:34:56:78:90:AB' - bgp.FlowSpecSourceMac(addr='12:34:56:78:90:AB', length=6), - # dest_mac='DE:EF:C0:FF:EE:DD' - bgp.FlowSpecDestinationMac(addr='BE:EF:C0:FF:EE:DD', length=6), - # llc_dsap=0x42 - bgp.FlowSpecLLCDSAP(operator=bgp.FlowSpecLLCDSAP.EQ, value=0x42), - # llc_ssap=0x42 - bgp.FlowSpecLLCSSAP(operator=bgp.FlowSpecLLCSSAP.EQ, value=0x42), - # llc_control=100 - bgp.FlowSpecLLCControl(operator=bgp.FlowSpecLLCControl.EQ, value=100), - # snap=0x12345 - bgp.FlowSpecSNAP(operator=bgp.FlowSpecSNAP.EQ, value=0x12345), - # vlan_id='>4000' - bgp.FlowSpecVLANID(operator=bgp.FlowSpecVLANID.GT, value=4000), - # vlan_cos='>=3' - bgp.FlowSpecVLANCoS( - operator=(bgp.FlowSpecVLANCoS.GT | bgp.FlowSpecVLANCoS.EQ), value=3), - # inner_vlan_id='<3000' - bgp.FlowSpecInnerVLANID(operator=bgp.FlowSpecInnerVLANID.LT, value=3000), - # inner_vlan_cos='<=5' - bgp.FlowSpecInnerVLANCoS( - operator=(bgp.FlowSpecInnerVLANCoS.LT | bgp.FlowSpecInnerVLANCoS.EQ), - value=5), -] - - -class Test_bgp(unittest.TestCase): - """ Test case for ryu.lib.packet.bgp - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_open1(self): - msg = bgp.BGPOpen(my_as=30000, bgp_identifier='192.0.2.1') - binmsg = msg.serialize() - msg2, _, rest = bgp.BGPMessage.parser(binmsg) - eq_(str(msg), str(msg2)) - eq_(len(msg), 29) - eq_(rest, b'') - - def test_open2(self): - opt_param = [bgp.BGPOptParamCapabilityUnknown(cap_code=200, - cap_value=b'hoge'), - bgp.BGPOptParamCapabilityGracefulRestart(flags=0, - time=120, - tuples=[]), - bgp.BGPOptParamCapabilityRouteRefresh(), - bgp.BGPOptParamCapabilityCiscoRouteRefresh(), - bgp.BGPOptParamCapabilityMultiprotocol( - afi=afi.IP, safi=safi.MPLS_VPN), - bgp.BGPOptParamCapabilityCarryingLabelInfo(), - bgp.BGPOptParamCapabilityFourOctetAsNumber( - as_number=1234567), - bgp.BGPOptParamUnknown(type_=99, value=b'fuga')] - msg = bgp.BGPOpen(my_as=30000, bgp_identifier='192.0.2.2', - opt_param=opt_param) - binmsg = msg.serialize() - msg2, _, rest = bgp.BGPMessage.parser(binmsg) - eq_(str(msg), str(msg2)) - ok_(len(msg) > 29) - eq_(rest, b'') - - def test_update1(self): - msg = bgp.BGPUpdate() - binmsg = msg.serialize() - msg2, _, rest = bgp.BGPMessage.parser(binmsg) - eq_(str(msg), str(msg2)) - eq_(len(msg), 23) - eq_(rest, b'') - - def test_update2(self): - withdrawn_routes = [bgp.BGPWithdrawnRoute(length=0, - addr='192.0.2.13'), - bgp.BGPWithdrawnRoute(length=1, - addr='192.0.2.13'), - bgp.BGPWithdrawnRoute(length=3, - addr='192.0.2.13'), - bgp.BGPWithdrawnRoute(length=7, - addr='192.0.2.13'), - bgp.BGPWithdrawnRoute(length=32, - addr='192.0.2.13')] - mp_nlri = [ - bgp.LabelledVPNIPAddrPrefix(24, '192.0.9.0', - route_dist='100:100', - labels=[1, 2, 3]), - bgp.LabelledVPNIPAddrPrefix(26, '192.0.10.192', - route_dist='10.0.0.1:10000', - labels=[5, 6, 7, 8]), - ] - mp_nlri2 = [ - bgp.LabelledIPAddrPrefix(24, '192.168.0.0', labels=[1, 2, 3]) - ] - mp_nlri_v6 = [ - bgp.LabelledVPNIP6AddrPrefix(64, '2001:db8:1111::', - route_dist='200:200', - labels=[1, 2, 3]), - bgp.LabelledVPNIP6AddrPrefix(64, '2001:db8:2222::', - route_dist='10.0.0.1:10000', - labels=[5, 6, 7, 8]), - ] - mp_nlri2_v6 = [ - bgp.LabelledIP6AddrPrefix(64, '2001:db8:3333::', labels=[1, 2, 3]) - ] - communities = [ - bgp.BGP_COMMUNITY_NO_EXPORT, - bgp.BGP_COMMUNITY_NO_ADVERTISE, - ] - ecommunities = [ - bgp.BGPTwoOctetAsSpecificExtendedCommunity( - subtype=1, as_number=65500, local_administrator=3908876543), - bgp.BGPFourOctetAsSpecificExtendedCommunity( - subtype=2, as_number=10000000, local_administrator=59876), - bgp.BGPIPv4AddressSpecificExtendedCommunity( - subtype=3, ipv4_address='192.0.2.1', - local_administrator=65432), - bgp.BGPOpaqueExtendedCommunity(subtype=13, opaque=b'abcdef'), - bgp.BGPEncapsulationExtendedCommunity( - subtype=0x0c, tunnel_type=10), - bgp.BGPEvpnMacMobilityExtendedCommunity( - subtype=0, flags=0xff, sequence_number=0x11223344), - bgp.BGPEvpnEsiLabelExtendedCommunity( - subtype=1, flags=0xff, label=b'\xFF\xFF\xFF'), - bgp.BGPEvpnEsiLabelExtendedCommunity( - subtype=1, flags=0xff, mpls_label=0xfffff), - bgp.BGPEvpnEsiLabelExtendedCommunity( - subtype=1, flags=0xff, vni=0xffffff), - bgp.BGPEvpnEsImportRTExtendedCommunity( - subtype=2, es_import="aa:bb:cc:dd:ee:ff"), - bgp.BGPUnknownExtendedCommunity(type_=99, value=b'abcdefg'), - ] - path_attributes = [ - bgp.BGPPathAttributeOrigin(value=1), - bgp.BGPPathAttributeAsPath(value=[[1000], {1001, 1002}, - [1003, 1004]]), - bgp.BGPPathAttributeNextHop(value='192.0.2.199'), - bgp.BGPPathAttributeMultiExitDisc(value=2000000000), - bgp.BGPPathAttributeLocalPref(value=1000000000), - bgp.BGPPathAttributeAtomicAggregate(), - bgp.BGPPathAttributeAggregator(as_number=40000, - addr='192.0.2.99'), - bgp.BGPPathAttributeCommunities(communities=communities), - bgp.BGPPathAttributeOriginatorId(value='10.1.1.1'), - bgp.BGPPathAttributeClusterList(value=['1.1.1.1', '2.2.2.2']), - bgp.BGPPathAttributeExtendedCommunities(communities=ecommunities), - bgp.BGPPathAttributePmsiTunnel( - pmsi_flags=1, - tunnel_type=PMSI_TYPE_NO_TUNNEL_INFORMATION_PRESENT, - label=b'\xFF\xFF\xFF'), - bgp.BGPPathAttributePmsiTunnel( - pmsi_flags=1, - tunnel_type=PMSI_TYPE_NO_TUNNEL_INFORMATION_PRESENT, - tunnel_id=None), - bgp.BGPPathAttributePmsiTunnel( - pmsi_flags=1, - tunnel_type=PMSI_TYPE_INGRESS_REPLICATION, - mpls_label=0xfffff, - tunnel_id=bgp.PmsiTunnelIdIngressReplication( - tunnel_endpoint_ip="1.1.1.1")), - bgp.BGPPathAttributePmsiTunnel( - pmsi_flags=1, - tunnel_type=PMSI_TYPE_INGRESS_REPLICATION, - vni=0xffffff, - tunnel_id=bgp.PmsiTunnelIdIngressReplication( - tunnel_endpoint_ip="aa:bb:cc::dd:ee:ff")), - bgp.BGPPathAttributePmsiTunnel( - pmsi_flags=1, - tunnel_type=2, - label=b'\xFF\xFF\xFF', - tunnel_id=bgp.PmsiTunnelIdUnknown(value=b'test')), - bgp.BGPPathAttributeAs4Path(value=[[1000000], {1000001, 1002}, - [1003, 1000004]]), - bgp.BGPPathAttributeAs4Aggregator(as_number=100040000, - addr='192.0.2.99'), - bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP, safi=safi.MPLS_VPN, - next_hop='1.1.1.1', - nlri=mp_nlri), - bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP, safi=safi.MPLS_LABEL, - next_hop='1.1.1.1', - nlri=mp_nlri2), - bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP6, safi=safi.MPLS_VPN, - next_hop=['2001:db8::1'], - nlri=mp_nlri_v6), - bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP6, safi=safi.MPLS_LABEL, - next_hop=['2001:db8::1', - 'fe80::1'], - nlri=mp_nlri2_v6), - bgp.BGPPathAttributeMpUnreachNLRI(afi=afi.IP, safi=safi.MPLS_VPN, - withdrawn_routes=mp_nlri), - bgp.BGPPathAttributeUnknown(flags=0, type_=100, value=300 * b'bar') - ] - nlri = [ - bgp.BGPNLRI(length=24, addr='203.0.113.1'), - bgp.BGPNLRI(length=16, addr='203.0.113.0') - ] - msg = bgp.BGPUpdate(withdrawn_routes=withdrawn_routes, - path_attributes=path_attributes, - nlri=nlri) - binmsg = msg.serialize() - msg2, _, rest = bgp.BGPMessage.parser(binmsg) - eq_(str(msg), str(msg2)) - ok_(len(msg) > 23) - eq_(rest, b'') - - def test_keepalive(self): - msg = bgp.BGPKeepAlive() - binmsg = msg.serialize() - msg2, _, rest = bgp.BGPMessage.parser(binmsg) - eq_(str(msg), str(msg2)) - eq_(len(msg), 19) - eq_(rest, b'') - - def test_notification(self): - data = b'hoge' - msg = bgp.BGPNotification(error_code=1, error_subcode=2, data=data) - binmsg = msg.serialize() - msg2, _, rest = bgp.BGPMessage.parser(binmsg) - eq_(str(msg), str(msg2)) - eq_(len(msg), 21 + len(data)) - eq_(rest, b'') - - def test_route_refresh(self): - msg = bgp.BGPRouteRefresh(afi=afi.IP, safi=safi.MPLS_VPN) - binmsg = msg.serialize() - msg2, _, rest = bgp.BGPMessage.parser(binmsg) - eq_(str(msg), str(msg2)) - eq_(len(msg), 23) - eq_(rest, b'') - - def test_stream_parser(self): - msgs = [ - bgp.BGPNotification(error_code=1, error_subcode=2, data=b'foo'), - bgp.BGPNotification(error_code=3, error_subcode=4, data=b'bar'), - bgp.BGPNotification(error_code=5, error_subcode=6, data=b'baz'), - ] - binmsgs = b''.join([bytes(msg.serialize()) for msg in msgs]) - sp = bgp.StreamParser() - results = [] - for b in binmsgs: - for m in sp.parse(b): - results.append(m) - eq_(str(results), str(msgs)) - - def test_parser(self): - files = [ - 'bgp4-open', - 'bgp4-update', - 'bgp4-update_ipv6', - 'bgp4-update_vpnv6', - 'bgp4-keepalive', - 'evpn_esi_arbitrary', - 'evpn_esi_lacp', - 'evpn_esi_l2_bridge', - 'evpn_esi_mac_base', - 'evpn_esi_router_id', - 'evpn_esi_as_based', - 'evpn_nlri_eth_a-d', - 'evpn_nlri_mac_ip_ad', - 'evpn_nlri_inc_multi_eth_tag', - 'evpn_nlri_eth_seg', - 'evpn_nlri_ip_prefix', - 'flowspec_nlri_ipv4', - 'flowspec_nlri_vpn4', - 'flowspec_nlri_ipv6', - 'flowspec_nlri_vpn6', - 'flowspec_nlri_l2vpn', - 'flowspec_action_traffic_rate', - 'flowspec_action_traffic_action', - 'flowspec_action_redirect', - 'flowspec_action_traffic_marking', - ] - - for f in files: - LOG.debug('*** testing %s ...', f) - for _, buf in pcaplib.Reader( - open(BGP4_PACKET_DATA_DIR + f + '.pcap', 'rb')): - # Checks if BGP message can be parsed as expected. - pkt = packet.Packet(buf) - ok_(isinstance(pkt.protocols[-1], bgp.BGPMessage), - 'Failed to parse BGP message: %s' % pkt) - - # Checks if BGP message can be serialized as expected. - pkt.serialize() - eq_(buf, pkt.data, - "b'%s' != b'%s'" % (binary_str(buf), binary_str(pkt.data))) - - def test_vlan_action_parser(self): - action = bgp.BGPFlowSpecVlanActionCommunity( - actions_1=(bgp.BGPFlowSpecVlanActionCommunity.POP | - bgp.BGPFlowSpecVlanActionCommunity.SWAP), - vlan_1=3000, - cos_1=3, - actions_2=bgp.BGPFlowSpecVlanActionCommunity.PUSH, - vlan_2=4000, - cos_2=2, - ) - binmsg = action.serialize() - msg, rest = bgp.BGPFlowSpecVlanActionCommunity.parse(binmsg) - eq_(str(action), str(msg)) - eq_(rest, b'') - - def test_tpid_action_parser(self): - action = bgp.BGPFlowSpecTPIDActionCommunity( - actions=(bgp.BGPFlowSpecTPIDActionCommunity.TI | - bgp.BGPFlowSpecTPIDActionCommunity.TO), - tpid_1=5, - tpid_2=6, - ) - binmsg = action.serialize() - msg, rest = bgp.BGPFlowSpecTPIDActionCommunity.parse(binmsg) - eq_(str(action), str(msg)) - eq_(rest, b'') - - def test_json1(self): - opt_param = [bgp.BGPOptParamCapabilityUnknown(cap_code=200, - cap_value=b'hoge'), - bgp.BGPOptParamCapabilityRouteRefresh(), - bgp.BGPOptParamCapabilityMultiprotocol( - afi=afi.IP, safi=safi.MPLS_VPN), - bgp.BGPOptParamCapabilityFourOctetAsNumber( - as_number=1234567), - bgp.BGPOptParamUnknown(type_=99, value=b'fuga')] - msg1 = bgp.BGPOpen(my_as=30000, bgp_identifier='192.0.2.2', - opt_param=opt_param) - jsondict = msg1.to_jsondict() - msg2 = bgp.BGPOpen.from_jsondict(jsondict['BGPOpen']) - eq_(str(msg1), str(msg2)) - - def test_json2(self): - withdrawn_routes = [bgp.BGPWithdrawnRoute(length=0, - addr='192.0.2.13'), - bgp.BGPWithdrawnRoute(length=1, - addr='192.0.2.13'), - bgp.BGPWithdrawnRoute(length=3, - addr='192.0.2.13'), - bgp.BGPWithdrawnRoute(length=7, - addr='192.0.2.13'), - bgp.BGPWithdrawnRoute(length=32, - addr='192.0.2.13')] - mp_nlri = [ - bgp.LabelledVPNIPAddrPrefix(24, '192.0.9.0', - route_dist='100:100', - labels=[1, 2, 3]), - bgp.LabelledVPNIPAddrPrefix(26, '192.0.10.192', - route_dist='10.0.0.1:10000', - labels=[5, 6, 7, 8]), - ] - mp_nlri2 = [ - bgp.LabelledIPAddrPrefix(24, '192.168.0.0', labels=[1, 2, 3]) - ] - mp_nlri_v6 = [ - bgp.LabelledVPNIP6AddrPrefix(64, '2001:db8:1111::', - route_dist='200:200', - labels=[1, 2, 3]), - bgp.LabelledVPNIP6AddrPrefix(64, '2001:db8:2222::', - route_dist='10.0.0.1:10000', - labels=[5, 6, 7, 8]), - ] - mp_nlri2_v6 = [ - bgp.LabelledIP6AddrPrefix(64, '2001:db8:3333::', labels=[1, 2, 3]) - ] - communities = [ - bgp.BGP_COMMUNITY_NO_EXPORT, - bgp.BGP_COMMUNITY_NO_ADVERTISE, - ] - ecommunities = [ - bgp.BGPTwoOctetAsSpecificExtendedCommunity( - subtype=1, as_number=65500, local_administrator=3908876543), - bgp.BGPFourOctetAsSpecificExtendedCommunity( - subtype=2, as_number=10000000, local_administrator=59876), - bgp.BGPIPv4AddressSpecificExtendedCommunity( - subtype=3, ipv4_address='192.0.2.1', - local_administrator=65432), - bgp.BGPOpaqueExtendedCommunity(subtype=13, opaque=b'abcdef'), - bgp.BGPEncapsulationExtendedCommunity( - subtype=0x0c, tunnel_type=10), - bgp.BGPEvpnMacMobilityExtendedCommunity( - subtype=0, flags=0xff, sequence_number=0x11223344), - bgp.BGPEvpnEsiLabelExtendedCommunity( - subtype=1, flags=0xff, label=b'\xFF\xFF\xFF'), - bgp.BGPEvpnEsiLabelExtendedCommunity( - subtype=1, flags=0xff, mpls_label=0xfffff), - bgp.BGPEvpnEsiLabelExtendedCommunity( - subtype=1, flags=0xff, vni=0xffffff), - bgp.BGPEvpnEsImportRTExtendedCommunity( - subtype=2, es_import="aa:bb:cc:dd:ee:ff"), - bgp.BGPUnknownExtendedCommunity(type_=99, value=b'abcdefg'), - ] - path_attributes = [ - bgp.BGPPathAttributeOrigin(value=1), - bgp.BGPPathAttributeAsPath(value=[[1000], {1001, 1002}, - [1003, 1004]]), - bgp.BGPPathAttributeNextHop(value='192.0.2.199'), - bgp.BGPPathAttributeMultiExitDisc(value=2000000000), - bgp.BGPPathAttributeLocalPref(value=1000000000), - bgp.BGPPathAttributeAtomicAggregate(), - bgp.BGPPathAttributeAggregator(as_number=40000, - addr='192.0.2.99'), - bgp.BGPPathAttributeCommunities(communities=communities), - bgp.BGPPathAttributeExtendedCommunities(communities=ecommunities), - bgp.BGPPathAttributePmsiTunnel( - pmsi_flags=1, - tunnel_type=PMSI_TYPE_NO_TUNNEL_INFORMATION_PRESENT, - label=b'\xFF\xFF\xFF'), - bgp.BGPPathAttributePmsiTunnel( - pmsi_flags=1, - tunnel_type=PMSI_TYPE_NO_TUNNEL_INFORMATION_PRESENT, - tunnel_id=None), - bgp.BGPPathAttributePmsiTunnel( - pmsi_flags=1, - tunnel_type=PMSI_TYPE_INGRESS_REPLICATION, - mpls_label=0xfffff, - tunnel_id=bgp.PmsiTunnelIdIngressReplication( - tunnel_endpoint_ip="1.1.1.1")), - bgp.BGPPathAttributePmsiTunnel( - pmsi_flags=1, - tunnel_type=PMSI_TYPE_INGRESS_REPLICATION, - vni=0xffffff, - tunnel_id=bgp.PmsiTunnelIdIngressReplication( - tunnel_endpoint_ip="aa:bb:cc::dd:ee:ff")), - bgp.BGPPathAttributePmsiTunnel( - pmsi_flags=1, - tunnel_type=2, - label=b'\xFF\xFF\xFF', - tunnel_id=bgp.PmsiTunnelIdUnknown(value=b'test')), - bgp.BGPPathAttributeAs4Path(value=[[1000000], {1000001, 1002}, - [1003, 1000004]]), - bgp.BGPPathAttributeAs4Aggregator(as_number=100040000, - addr='192.0.2.99'), - bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP, safi=safi.MPLS_VPN, - next_hop='1.1.1.1', - nlri=mp_nlri), - bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP, safi=safi.MPLS_LABEL, - next_hop='1.1.1.1', - nlri=mp_nlri2), - bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP6, safi=safi.MPLS_VPN, - next_hop=['2001:db8::1'], - nlri=mp_nlri_v6), - bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP6, safi=safi.MPLS_LABEL, - next_hop=['2001:db8::1', - 'fe80::1'], - nlri=mp_nlri2_v6), - bgp.BGPPathAttributeMpUnreachNLRI(afi=afi.IP, safi=safi.MPLS_VPN, - withdrawn_routes=mp_nlri), - bgp.BGPPathAttributeUnknown(flags=0, type_=100, value=300 * b'bar') - ] - nlri = [ - bgp.BGPNLRI(length=24, addr='203.0.113.1'), - bgp.BGPNLRI(length=16, addr='203.0.113.0') - ] - msg1 = bgp.BGPUpdate(withdrawn_routes=withdrawn_routes, - path_attributes=path_attributes, - nlri=nlri) - jsondict = msg1.to_jsondict() - msg2 = bgp.BGPUpdate.from_jsondict(jsondict['BGPUpdate']) - eq_(str(msg1), str(msg2)) - - def test_flowspec_user_interface_ipv4(self): - rules = RULES_BASE + [ - # dst_prefix='10.0.0.0/24 - bgp.FlowSpecDestPrefix(addr='10.0.0.0', length=24), - # src_prefix='20.0.0.1/24' - bgp.FlowSpecSrcPrefix(addr='20.0.0.0', length=24), - # ip_proto='6' - bgp.FlowSpecIPProtocol( - operator=bgp.FlowSpecIPProtocol.EQ, value=6), - # fragment='LF' - bgp.FlowSpecFragment( - operator=0, # Partial match - value=bgp.FlowSpecFragment.LF), - # fragment='==FF' - bgp.FlowSpecFragment( - operator=bgp.FlowSpecFragment.MATCH, - value=bgp.FlowSpecFragment.FF), - # fragment='&==ISF' - bgp.FlowSpecFragment( - operator=(bgp.FlowSpecFragment.AND | - bgp.FlowSpecFragment.MATCH), - value=bgp.FlowSpecFragment.ISF), - # fragment='!=DF' - bgp.FlowSpecFragment( - operator=bgp.FlowSpecFragment.NOT, - value=bgp.FlowSpecFragment.DF) - ] - - msg = bgp.FlowSpecIPv4NLRI.from_user( - dst_prefix='10.0.0.0/24', - src_prefix='20.0.0.0/24', - ip_proto='6', - port='>=8000 & <=9000 | ==80', - dst_port='8080 >9000&<9050 | <=1000', - src_port='<=9090 & >=9080 <10100 & >10000', - icmp_type=0, - icmp_code=6, - tcp_flags='SYN+ACK & !=URGENT', - packet_len='1000 & 1100', - dscp='22 24', - fragment='LF ==FF&==ISF | !=DF') - msg2 = bgp.FlowSpecIPv4NLRI(rules=rules) - binmsg = msg.serialize() - binmsg2 = msg2.serialize() - eq_(str(msg), str(msg2)) - eq_(binary_str(binmsg), binary_str(binmsg2)) - msg3, rest = bgp.FlowSpecIPv4NLRI.parser(binmsg) - eq_(str(msg), str(msg3)) - eq_(rest, b'') - - def test_flowspec_user_interface_vpv4(self): - rules = RULES_BASE + [ - # dst_prefix='10.0.0.0/24 - bgp.FlowSpecDestPrefix(addr='10.0.0.0', length=24), - # src_prefix='20.0.0.1/24' - bgp.FlowSpecSrcPrefix(addr='20.0.0.0', length=24), - # ip_proto='6' - bgp.FlowSpecIPProtocol( - operator=bgp.FlowSpecIPProtocol.EQ, value=6), - # fragment='LF' - bgp.FlowSpecFragment( - operator=0, # Partial match - value=bgp.FlowSpecFragment.LF), - # fragment='==FF' - bgp.FlowSpecFragment( - operator=bgp.FlowSpecFragment.MATCH, - value=bgp.FlowSpecFragment.FF), - # fragment='&==ISF' - bgp.FlowSpecFragment( - operator=(bgp.FlowSpecFragment.AND | - bgp.FlowSpecFragment.MATCH), - value=bgp.FlowSpecFragment.ISF), - # fragment='!=DF' - bgp.FlowSpecFragment( - operator=bgp.FlowSpecFragment.NOT, - value=bgp.FlowSpecFragment.DF) - ] - msg = bgp.FlowSpecVPNv4NLRI.from_user( - route_dist='65001:250', - dst_prefix='10.0.0.0/24', - src_prefix='20.0.0.0/24', - ip_proto='6', - port='>=8000 & <=9000 | ==80', - dst_port='8080 >9000&<9050 | <=1000', - src_port='<=9090 & >=9080 <10100 & >10000', - icmp_type=0, - icmp_code=6, - tcp_flags='SYN+ACK & !=URGENT', - packet_len='1000 & 1100', - dscp='22 24', - fragment='LF ==FF&==ISF | !=DF') - msg2 = bgp.FlowSpecVPNv4NLRI(route_dist='65001:250', rules=rules) - binmsg = msg.serialize() - binmsg2 = msg2.serialize() - eq_(str(msg), str(msg2)) - eq_(binary_str(binmsg), binary_str(binmsg2)) - msg3, rest = bgp.FlowSpecVPNv4NLRI.parser(binmsg) - eq_(str(msg), str(msg3)) - eq_(rest, b'') - - def test_flowspec_user_interface_ipv6(self): - rules = RULES_BASE + [ - # dst_prefix='2001:2/128/32' - bgp.FlowSpecIPv6DestPrefix( - addr='2001::2', offset=32, length=128), - # src_prefix='3002::3/128' - bgp.FlowSpecIPv6SrcPrefix( - addr='3002::3', length=128), - # ip_proto='6' - bgp.FlowSpecNextHeader( - operator=bgp.FlowSpecNextHeader.EQ, value=6), - # fragment='LF' - bgp.FlowSpecIPv6Fragment( - operator=0, # Partial match - value=bgp.FlowSpecFragment.LF), - # fragment='==FF' - bgp.FlowSpecIPv6Fragment( - operator=bgp.FlowSpecFragment.MATCH, - value=bgp.FlowSpecFragment.FF), - # fragment='&==ISF' - bgp.FlowSpecIPv6Fragment( - operator=(bgp.FlowSpecFragment.AND | - bgp.FlowSpecFragment.MATCH), - value=bgp.FlowSpecFragment.ISF), - # fragment='!=LF' - bgp.FlowSpecIPv6Fragment( - operator=bgp.FlowSpecFragment.NOT, - value=bgp.FlowSpecFragment.LF), - # flowlabel='100' - bgp.FlowSpecIPv6FlowLabel( - operator=bgp.FlowSpecIPv6FlowLabel.EQ, - value=100), - ] - msg = bgp.FlowSpecIPv6NLRI.from_user( - dst_prefix='2001::2/128/32', - src_prefix='3002::3/128', - next_header='6', - port='>=8000 & <=9000 | ==80', - dst_port='8080 >9000&<9050 | <=1000', - src_port='<=9090 & >=9080 <10100 & >10000', - icmp_type=0, - icmp_code=6, - tcp_flags='SYN+ACK & !=URGENT', - packet_len='1000 & 1100', - dscp='22 24', - fragment='LF ==FF&==ISF | !=LF', - flow_label=100, - ) - msg2 = bgp.FlowSpecIPv6NLRI(rules=rules) - binmsg = msg.serialize() - binmsg2 = msg2.serialize() - eq_(str(msg), str(msg2)) - eq_(binary_str(binmsg), binary_str(binmsg2)) - msg3, rest = bgp.FlowSpecIPv6NLRI.parser(binmsg) - eq_(str(msg), str(msg3)) - eq_(rest, b'') - - def test_flowspec_user_interface_vpnv6(self): - rules = RULES_BASE + [ - # dst_prefix='2001:2/128/32' - bgp.FlowSpecIPv6DestPrefix( - addr='2001::2', offset=32, length=128), - # src_prefix='3002::3/128' - bgp.FlowSpecIPv6SrcPrefix( - addr='3002::3', length=128), - # ip_proto='6' - bgp.FlowSpecNextHeader( - operator=bgp.FlowSpecNextHeader.EQ, value=6), - # fragment='LF' - bgp.FlowSpecIPv6Fragment( - operator=0, # Partial match - value=bgp.FlowSpecFragment.LF), - # fragment='==FF' - bgp.FlowSpecIPv6Fragment( - operator=bgp.FlowSpecFragment.MATCH, - value=bgp.FlowSpecFragment.FF), - # fragment='&==ISF' - bgp.FlowSpecIPv6Fragment( - operator=(bgp.FlowSpecFragment.AND | - bgp.FlowSpecFragment.MATCH), - value=bgp.FlowSpecFragment.ISF), - # fragment='!=LF' - bgp.FlowSpecIPv6Fragment( - operator=bgp.FlowSpecFragment.NOT, - value=bgp.FlowSpecFragment.LF), - # flowlabel='100' - bgp.FlowSpecIPv6FlowLabel( - operator=bgp.FlowSpecIPv6FlowLabel.EQ, - value=100), - ] - msg = bgp.FlowSpecVPNv6NLRI.from_user( - route_dist='65001:250', - dst_prefix='2001::2/128/32', - src_prefix='3002::3/128', - next_header='6', - port='>=8000 & <=9000 | ==80', - dst_port='8080 >9000&<9050 | <=1000', - src_port='<=9090 & >=9080 <10100 & >10000', - icmp_type=0, - icmp_code=6, - tcp_flags='SYN+ACK & !=URGENT', - packet_len='1000 & 1100', - dscp='22 24', - fragment='LF ==FF&==ISF | !=LF', - flow_label=100, - ) - msg2 = bgp.FlowSpecVPNv6NLRI(route_dist='65001:250', rules=rules) - binmsg = msg.serialize() - binmsg2 = msg2.serialize() - eq_(str(msg), str(msg2)) - eq_(binary_str(binmsg), binary_str(binmsg2)) - msg3, rest = bgp.FlowSpecVPNv6NLRI.parser(binmsg) - eq_(str(msg), str(msg3)) - eq_(rest, b'') - - def test_flowspec_user_interface_l2vpn(self): - rules = RULES_L2VPN_BASE - msg = bgp.FlowSpecL2VPNNLRI.from_user( - route_dist='65001:250', - ether_type=0x0800, - src_mac='12:34:56:78:90:AB', - dst_mac='BE:EF:C0:FF:EE:DD', - llc_dsap=0x42, - llc_ssap=0x42, - llc_control=100, - snap=0x12345, - vlan_id='>4000', - vlan_cos='>=3', - inner_vlan_id='<3000', - inner_vlan_cos='<=5', - ) - msg2 = bgp.FlowSpecL2VPNNLRI(route_dist='65001:250', rules=rules) - binmsg = msg.serialize() - binmsg2 = msg2.serialize() - eq_(str(msg), str(msg2)) - eq_(binary_str(binmsg), binary_str(binmsg2)) - msg3, rest = bgp.FlowSpecL2VPNNLRI.parser(binmsg) - eq_(str(msg), str(msg3)) - eq_(rest, b'') diff --git a/ryu/tests/unit/packet/test_bmp.py b/ryu/tests/unit/packet/test_bmp.py deleted file mode 100644 index f93b8014..00000000 --- a/ryu/tests/unit/packet/test_bmp.py +++ /dev/null @@ -1,136 +0,0 @@ -# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -from nose.tools import eq_ -from nose.tools import ok_ -from time import time - -from ryu.lib.packet import bmp -from ryu.lib.packet import bgp -from ryu.lib.packet import afi -from ryu.lib.packet import safi - - -class Test_bmp(unittest.TestCase): - """ Test case for ryu.lib.packet.bmp - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def _time(self): - # time() can give sub-microsecond precision, which results - # in an assertion failure - return round(time(), 6) - - def test_route_monitoring(self): - update = bgp.BGPUpdate() - msg = bmp.BMPRouteMonitoring(bgp_update=update, - peer_type=bmp.BMP_PEER_TYPE_GLOBAL, - is_post_policy=True, - peer_distinguisher=0, - peer_address='192.0.2.1', - peer_as=30000, - peer_bgp_id='192.0.2.1', - timestamp=self._time()) - binmsg = msg.serialize() - msg2, rest = bmp.BMPMessage.parser(binmsg) - eq_(msg.to_jsondict(), msg2.to_jsondict()) - eq_(rest, b'') - - def test_statistics_report(self): - stats = [{'type': bmp.BMP_STAT_TYPE_REJECTED, 'value': 100}, - {'type': bmp.BMP_STAT_TYPE_DUPLICATE_PREFIX, 'value': 200}, - {'type': bmp.BMP_STAT_TYPE_DUPLICATE_WITHDRAW, 'value': 300}, - {'type': bmp.BMP_STAT_TYPE_ADJ_RIB_IN, 'value': 100000}, - {'type': bmp.BMP_STAT_TYPE_LOC_RIB, 'value': 500000}] - msg = bmp.BMPStatisticsReport(stats=stats, - peer_type=bmp.BMP_PEER_TYPE_GLOBAL, - is_post_policy=True, - peer_distinguisher=0, - peer_address='192.0.2.1', - peer_as=30000, - peer_bgp_id='192.0.2.1', - timestamp=self._time()) - binmsg = msg.serialize() - msg2, rest = bmp.BMPMessage.parser(binmsg) - eq_(msg.to_jsondict(), msg2.to_jsondict()) - eq_(rest, b'') - - def test_peer_down_notification(self): - reason = bmp.BMP_PEER_DOWN_REASON_LOCAL_BGP_NOTIFICATION - data = b'hoge' - data = bgp.BGPNotification(error_code=1, error_subcode=2, data=data) - msg = bmp.BMPPeerDownNotification(reason=reason, data=data, - peer_type=bmp.BMP_PEER_TYPE_GLOBAL, - is_post_policy=True, - peer_distinguisher=0, - peer_address='192.0.2.1', - peer_as=30000, - peer_bgp_id='192.0.2.1', - timestamp=self._time()) - binmsg = msg.serialize() - msg2, rest = bmp.BMPMessage.parser(binmsg) - eq_(msg.to_jsondict(), msg2.to_jsondict()) - eq_(rest, b'') - - def test_peer_up_notification(self): - opt_param = [bgp.BGPOptParamCapabilityUnknown(cap_code=200, - cap_value=b'hoge'), - bgp.BGPOptParamCapabilityRouteRefresh(), - bgp.BGPOptParamCapabilityMultiprotocol( - afi=afi.IP, safi=safi.MPLS_VPN)] - open_message = bgp.BGPOpen(my_as=40000, bgp_identifier='192.0.2.2', - opt_param=opt_param) - msg = bmp.BMPPeerUpNotification(local_address='192.0.2.2', - local_port=179, - remote_port=11089, - sent_open_message=open_message, - received_open_message=open_message, - peer_type=bmp.BMP_PEER_TYPE_GLOBAL, - is_post_policy=True, - peer_distinguisher=0, - peer_address='192.0.2.1', - peer_as=30000, - peer_bgp_id='192.0.2.1', - timestamp=self._time()) - binmsg = msg.serialize() - msg2, rest = bmp.BMPMessage.parser(binmsg) - eq_(msg.to_jsondict(), msg2.to_jsondict()) - eq_(rest, b'') - - def test_initiation(self): - initiation_info = [{'type': bmp.BMP_INIT_TYPE_STRING, - 'value': u'This is Ryu BGP BMP message'}] - msg = bmp.BMPInitiation(info=initiation_info) - binmsg = msg.serialize() - msg2, rest = bmp.BMPMessage.parser(binmsg) - eq_(msg.to_jsondict(lambda v: v), msg2.to_jsondict(lambda v: v)) - eq_(rest, b'') - - def test_termination(self): - termination_info = [{'type': bmp.BMP_TERM_TYPE_STRING, - 'value': u'Session administatively closed'}, - {'type': bmp.BMP_TERM_TYPE_REASON, - 'value': bmp.BMP_TERM_REASON_ADMIN}] - msg = bmp.BMPTermination(info=termination_info) - binmsg = msg.serialize() - msg2, rest = bmp.BMPMessage.parser(binmsg) - eq_(msg.to_jsondict(lambda v: v), msg2.to_jsondict(lambda v: v)) - eq_(rest, b'') diff --git a/ryu/tests/unit/packet/test_bpdu.py b/ryu/tests/unit/packet/test_bpdu.py deleted file mode 100644 index 1ef8cf58..00000000 --- a/ryu/tests/unit/packet/test_bpdu.py +++ /dev/null @@ -1,469 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import struct - -from nose.tools import eq_ -from ryu.lib.packet import bpdu - - -LOG = logging.getLogger(__name__) - - -class Test_ConfigurationBPDUs(unittest.TestCase): - """ Test case for ConfigurationBPDUs - """ - - def setUp(self): - self.protocol_id = bpdu.PROTOCOL_IDENTIFIER - self.version_id = bpdu.ConfigurationBPDUs.VERSION_ID - self.bpdu_type = bpdu.ConfigurationBPDUs.BPDU_TYPE - self.flags = 0b00000001 - self.root_priority = 4096 - self.root_system_id_extension = 1 - self.root_mac_address = '12:34:56:78:9a:bc' - self.root_path_cost = 2 - self.bridge_priority = 8192 - self.bridge_system_id_extension = 3 - self.bridge_mac_address = 'aa:aa:aa:aa:aa:aa' - self.port_priority = 16 - self.port_number = 4 - self.message_age = 5 - self.max_age = 6 - self.hello_time = 7 - self.forward_delay = 8 - - self.msg = bpdu.ConfigurationBPDUs( - flags=self.flags, - root_priority=self.root_priority, - root_system_id_extension=self.root_system_id_extension, - root_mac_address=self.root_mac_address, - root_path_cost=self.root_path_cost, - bridge_priority=self.bridge_priority, - bridge_system_id_extension=self.bridge_system_id_extension, - bridge_mac_address=self.bridge_mac_address, - port_priority=self.port_priority, - port_number=self.port_number, - message_age=self.message_age, - max_age=self.max_age, - hello_time=self.hello_time, - forward_delay=self.forward_delay) - - self.fmt = (bpdu.bpdu._PACK_STR - + bpdu.ConfigurationBPDUs._PACK_STR[1:]) - self.buf = struct.pack(self.fmt, - self.protocol_id, self.version_id, - self.bpdu_type, self.flags, - bpdu.ConfigurationBPDUs.encode_bridge_id( - self.root_priority, - self.root_system_id_extension, - self.root_mac_address), - self.root_path_cost, - bpdu.ConfigurationBPDUs.encode_bridge_id( - self.bridge_priority, - self.bridge_system_id_extension, - self.bridge_mac_address), - bpdu.ConfigurationBPDUs.encode_port_id( - self.port_priority, - self.port_number), - bpdu.ConfigurationBPDUs._encode_timer( - self.message_age), - bpdu.ConfigurationBPDUs._encode_timer( - self.max_age), - bpdu.ConfigurationBPDUs._encode_timer( - self.hello_time), - bpdu.ConfigurationBPDUs._encode_timer( - self.forward_delay)) - - def test_init(self): - eq_(self.protocol_id, self.msg._protocol_id) - eq_(self.version_id, self.msg._version_id) - eq_(self.bpdu_type, self.msg._bpdu_type) - eq_(self.flags, self.msg.flags) - eq_(self.root_priority, self.msg.root_priority) - eq_(self.root_system_id_extension, - self.msg.root_system_id_extension) - eq_(self.root_mac_address, self.msg.root_mac_address) - eq_(self.root_path_cost, self.msg.root_path_cost) - eq_(self.bridge_priority, self.msg.bridge_priority) - eq_(self.bridge_system_id_extension, - self.msg.bridge_system_id_extension) - eq_(self.bridge_mac_address, self.msg.bridge_mac_address) - eq_(self.port_priority, self.msg.port_priority) - eq_(self.port_number, self.msg.port_number) - eq_(self.message_age, self.msg.message_age) - eq_(self.max_age, self.msg.max_age) - eq_(self.hello_time, self.msg.hello_time) - eq_(self.forward_delay, self.msg.forward_delay) - - def test_parser(self): - r1, r2, _ = bpdu.bpdu.parser(self.buf) - - eq_(type(r1), type(self.msg)) - eq_(r1._protocol_id, self.protocol_id) - eq_(r1._version_id, self.version_id) - eq_(r1._bpdu_type, self.bpdu_type) - eq_(r1.flags, self.flags) - eq_(r1.root_priority, self.root_priority) - eq_(r1.root_system_id_extension, self.root_system_id_extension) - eq_(r1.root_mac_address, self.root_mac_address) - eq_(r1.root_path_cost, self.root_path_cost) - eq_(r1.bridge_priority, self.bridge_priority) - eq_(r1.bridge_system_id_extension, self.bridge_system_id_extension) - eq_(r1.bridge_mac_address, self.bridge_mac_address) - eq_(r1.port_priority, self.port_priority) - eq_(r1.port_number, self.port_number) - eq_(r1.message_age, self.message_age) - eq_(r1.max_age, self.max_age) - eq_(r1.hello_time, self.hello_time) - eq_(r1.forward_delay, self.forward_delay) - eq_(r2, None) - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.msg.serialize(data, prev) - res = struct.unpack(self.fmt, buf) - - eq_(res[0], self.protocol_id) - eq_(res[1], self.version_id) - eq_(res[2], self.bpdu_type) - eq_(res[3], self.flags) - eq_(bpdu.ConfigurationBPDUs._decode_bridge_id(res[4]), - (self.root_priority, - self.root_system_id_extension, - self.root_mac_address)) - eq_(res[5], self.root_path_cost) - eq_(bpdu.ConfigurationBPDUs._decode_bridge_id(res[6]), - (self.bridge_priority, - self.bridge_system_id_extension, - self.bridge_mac_address)) - eq_(bpdu.ConfigurationBPDUs._decode_port_id(res[7]), - (self.port_priority, - self.port_number)) - eq_(bpdu.ConfigurationBPDUs._decode_timer(res[8]), self.message_age) - eq_(bpdu.ConfigurationBPDUs._decode_timer(res[9]), self.max_age) - eq_(bpdu.ConfigurationBPDUs._decode_timer(res[10]), self.hello_time) - eq_(bpdu.ConfigurationBPDUs._decode_timer(res[11]), self.forward_delay) - - def test_json(self): - jsondict = self.msg.to_jsondict() - msg = bpdu.ConfigurationBPDUs.from_jsondict( - jsondict['ConfigurationBPDUs']) - eq_(str(self.msg), str(msg)) - - -class Test_TopologyChangeNotificationBPDUs(unittest.TestCase): - """ Test case for TopologyChangeNotificationBPDUs - """ - - def setUp(self): - self.protocol_id = bpdu.PROTOCOL_IDENTIFIER - self.version_id = bpdu.TopologyChangeNotificationBPDUs.VERSION_ID - self.bpdu_type = bpdu.TopologyChangeNotificationBPDUs.BPDU_TYPE - - self.msg = bpdu.TopologyChangeNotificationBPDUs() - - self.fmt = bpdu.bpdu._PACK_STR - self.buf = struct.pack(self.fmt, - self.protocol_id, - self.version_id, - self.bpdu_type) - - def test_init(self): - eq_(self.protocol_id, self.msg._protocol_id) - eq_(self.version_id, self.msg._version_id) - eq_(self.bpdu_type, self.msg._bpdu_type) - - def test_parser(self): - r1, r2, _ = bpdu.bpdu.parser(self.buf) - - eq_(type(r1), type(self.msg)) - eq_(r1._protocol_id, self.protocol_id) - eq_(r1._version_id, self.version_id) - eq_(r1._bpdu_type, self.bpdu_type) - eq_(r2, None) - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.msg.serialize(data, prev) - res = struct.unpack(self.fmt, buf) - - eq_(res[0], self.protocol_id) - eq_(res[1], self.version_id) - eq_(res[2], self.bpdu_type) - - def test_json(self): - jsondict = self.msg.to_jsondict() - msg = bpdu.TopologyChangeNotificationBPDUs.from_jsondict( - jsondict['TopologyChangeNotificationBPDUs']) - eq_(str(self.msg), str(msg)) - - -class Test_RstBPDUs(unittest.TestCase): - """ Test case for RstBPDUs - """ - - def setUp(self): - self.protocol_id = bpdu.PROTOCOL_IDENTIFIER - self.version_id = bpdu.RstBPDUs.VERSION_ID - self.bpdu_type = bpdu.RstBPDUs.BPDU_TYPE - self.flags = 0b01111110 - self.root_priority = 4096 - self.root_system_id_extension = 1 - self.root_mac_address = '12:34:56:78:9a:bc' - self.root_path_cost = 2 - self.bridge_priority = 8192 - self.bridge_system_id_extension = 3 - self.bridge_mac_address = 'aa:aa:aa:aa:aa:aa' - self.port_priority = 16 - self.port_number = 4 - self.message_age = 5 - self.max_age = 6 - self.hello_time = 7 - self.forward_delay = 8 - self.version_1_length = bpdu.VERSION_1_LENGTH - - self.msg = bpdu.RstBPDUs( - flags=self.flags, - root_priority=self.root_priority, - root_system_id_extension=self.root_system_id_extension, - root_mac_address=self.root_mac_address, - root_path_cost=self.root_path_cost, - bridge_priority=self.bridge_priority, - bridge_system_id_extension=self.bridge_system_id_extension, - bridge_mac_address=self.bridge_mac_address, - port_priority=self.port_priority, - port_number=self.port_number, - message_age=self.message_age, - max_age=self.max_age, - hello_time=self.hello_time, - forward_delay=self.forward_delay) - - self.fmt = (bpdu.bpdu._PACK_STR - + bpdu.ConfigurationBPDUs._PACK_STR[1:] - + bpdu.RstBPDUs._PACK_STR[1:]) - self.buf = struct.pack(self.fmt, - self.protocol_id, self.version_id, - self.bpdu_type, self.flags, - bpdu.RstBPDUs.encode_bridge_id( - self.root_priority, - self.root_system_id_extension, - self.root_mac_address), - self.root_path_cost, - bpdu.RstBPDUs.encode_bridge_id( - self.bridge_priority, - self.bridge_system_id_extension, - self.bridge_mac_address), - bpdu.RstBPDUs.encode_port_id( - self.port_priority, - self.port_number), - bpdu.RstBPDUs._encode_timer(self.message_age), - bpdu.RstBPDUs._encode_timer(self.max_age), - bpdu.RstBPDUs._encode_timer(self.hello_time), - bpdu.RstBPDUs._encode_timer(self.forward_delay), - self.version_1_length) - - def test_init(self): - eq_(self.protocol_id, self.msg._protocol_id) - eq_(self.version_id, self.msg._version_id) - eq_(self.bpdu_type, self.msg._bpdu_type) - eq_(self.flags, self.msg.flags) - eq_(self.root_priority, self.msg.root_priority) - eq_(self.root_system_id_extension, - self.msg.root_system_id_extension) - eq_(self.root_mac_address, self.msg.root_mac_address) - eq_(self.root_path_cost, self.msg.root_path_cost) - eq_(self.bridge_priority, self.msg.bridge_priority) - eq_(self.bridge_system_id_extension, - self.msg.bridge_system_id_extension) - eq_(self.bridge_mac_address, self.msg.bridge_mac_address) - eq_(self.port_priority, self.msg.port_priority) - eq_(self.port_number, self.msg.port_number) - eq_(self.message_age, self.msg.message_age) - eq_(self.max_age, self.msg.max_age) - eq_(self.hello_time, self.msg.hello_time) - eq_(self.forward_delay, self.msg.forward_delay) - eq_(self.version_1_length, self.msg._version_1_length) - - def test_parser(self): - r1, r2, _ = bpdu.bpdu.parser(self.buf) - - eq_(type(r1), type(self.msg)) - eq_(r1._protocol_id, self.protocol_id) - eq_(r1._version_id, self.version_id) - eq_(r1._bpdu_type, self.bpdu_type) - eq_(r1.flags, self.flags) - eq_(r1.root_priority, self.root_priority) - eq_(r1.root_system_id_extension, self.root_system_id_extension) - eq_(r1.root_mac_address, self.root_mac_address) - eq_(r1.root_path_cost, self.root_path_cost) - eq_(r1.bridge_priority, self.bridge_priority) - eq_(r1.bridge_system_id_extension, self.bridge_system_id_extension) - eq_(r1.bridge_mac_address, self.bridge_mac_address) - eq_(r1.port_priority, self.port_priority) - eq_(r1.port_number, self.port_number) - eq_(r1.message_age, self.message_age) - eq_(r1.max_age, self.max_age) - eq_(r1.hello_time, self.hello_time) - eq_(r1.forward_delay, self.forward_delay) - eq_(r1._version_1_length, self.version_1_length) - eq_(r2, None) - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.msg.serialize(data, prev) - res = struct.unpack(self.fmt, buf) - - eq_(res[0], self.protocol_id) - eq_(res[1], self.version_id) - eq_(res[2], self.bpdu_type) - eq_(res[3], self.flags) - eq_(bpdu.RstBPDUs._decode_bridge_id(res[4]), - (self.root_priority, - self.root_system_id_extension, - self.root_mac_address)) - eq_(res[5], self.root_path_cost) - eq_(bpdu.RstBPDUs._decode_bridge_id(res[6]), - (self.bridge_priority, - self.bridge_system_id_extension, - self.bridge_mac_address)) - eq_(bpdu.RstBPDUs._decode_port_id(res[7]), - (self.port_priority, - self.port_number)) - eq_(bpdu.RstBPDUs._decode_timer(res[8]), self.message_age) - eq_(bpdu.RstBPDUs._decode_timer(res[9]), self.max_age) - eq_(bpdu.RstBPDUs._decode_timer(res[10]), self.hello_time) - eq_(bpdu.RstBPDUs._decode_timer(res[11]), self.forward_delay) - eq_(res[12], self.version_1_length) - - def test_json(self): - jsondict = self.msg.to_jsondict() - msg = bpdu.RstBPDUs.from_jsondict(jsondict['RstBPDUs']) - eq_(str(self.msg), str(msg)) - - -class Test_UnknownVersion(unittest.TestCase): - """ Test case for unknown BPDU version - """ - - def setUp(self): - self.protocol_id = bpdu.PROTOCOL_IDENTIFIER - self.version_id = 111 # Unknown version - self.bpdu_type = bpdu.RstBPDUs.BPDU_TYPE - self.flags = 0b01111110 - self.root_priority = 4096 - self.root_system_id_extension = 1 - self.root_mac_address = '12:34:56:78:9a:bc' - self.root_path_cost = 2 - self.bridge_priority = 8192 - self.bridge_system_id_extension = 3 - self.bridge_mac_address = 'aa:aa:aa:aa:aa:aa' - self.port_priority = 16 - self.port_number = 4 - self.message_age = 5 - self.max_age = 6 - self.hello_time = 7 - self.forward_delay = 8 - self.version_1_length = bpdu.VERSION_1_LENGTH - - self.fmt = (bpdu.bpdu._PACK_STR - + bpdu.ConfigurationBPDUs._PACK_STR[1:] - + bpdu.RstBPDUs._PACK_STR[1:]) - self.buf = struct.pack(self.fmt, - self.protocol_id, self.version_id, - self.bpdu_type, self.flags, - bpdu.RstBPDUs.encode_bridge_id( - self.root_priority, - self.root_system_id_extension, - self.root_mac_address), - self.root_path_cost, - bpdu.RstBPDUs.encode_bridge_id( - self.bridge_priority, - self.bridge_system_id_extension, - self.bridge_mac_address), - bpdu.RstBPDUs.encode_port_id( - self.port_priority, - self.port_number), - bpdu.RstBPDUs._encode_timer(self.message_age), - bpdu.RstBPDUs._encode_timer(self.max_age), - bpdu.RstBPDUs._encode_timer(self.hello_time), - bpdu.RstBPDUs._encode_timer(self.forward_delay), - self.version_1_length) - - def test_parser(self): - r1, r2, _ = bpdu.bpdu.parser(self.buf) - eq_(r1, self.buf) - eq_(r2, None) - - -class Test_UnknownType(unittest.TestCase): - """ Test case for unknown BPDU type - """ - - def setUp(self): - self.protocol_id = bpdu.PROTOCOL_IDENTIFIER - self.version_id = bpdu.RstBPDUs.VERSION_ID - self.bpdu_type = 222 # Unknown type - self.flags = 0b01111110 - self.root_priority = 4096 - self.root_system_id_extension = 1 - self.root_mac_address = '12:34:56:78:9a:bc' - self.root_path_cost = 2 - self.bridge_priority = 8192 - self.bridge_system_id_extension = 3 - self.bridge_mac_address = 'aa:aa:aa:aa:aa:aa' - self.port_priority = 16 - self.port_number = 4 - self.message_age = 5 - self.max_age = 6 - self.hello_time = 7 - self.forward_delay = 8 - self.version_1_length = bpdu.VERSION_1_LENGTH - - self.fmt = (bpdu.bpdu._PACK_STR - + bpdu.ConfigurationBPDUs._PACK_STR[1:] - + bpdu.RstBPDUs._PACK_STR[1:]) - self.buf = struct.pack(self.fmt, - self.protocol_id, self.version_id, - self.bpdu_type, self.flags, - bpdu.RstBPDUs.encode_bridge_id( - self.root_priority, - self.root_system_id_extension, - self.root_mac_address), - self.root_path_cost, - bpdu.RstBPDUs.encode_bridge_id( - self.bridge_priority, - self.bridge_system_id_extension, - self.bridge_mac_address), - bpdu.RstBPDUs.encode_port_id( - self.port_priority, - self.port_number), - bpdu.RstBPDUs._encode_timer(self.message_age), - bpdu.RstBPDUs._encode_timer(self.max_age), - bpdu.RstBPDUs._encode_timer(self.hello_time), - bpdu.RstBPDUs._encode_timer(self.forward_delay), - self.version_1_length) - - def test_parser(self): - r1, r2, _ = bpdu.bpdu.parser(self.buf) - eq_(r1, self.buf) - eq_(r2, None) diff --git a/ryu/tests/unit/packet/test_cfm.py b/ryu/tests/unit/packet/test_cfm.py deleted file mode 100644 index fb0749d7..00000000 --- a/ryu/tests/unit/packet/test_cfm.py +++ /dev/null @@ -1,1761 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import unittest -import logging -import inspect -import six -import struct - -from nose.tools import * -from ryu.lib import addrconv -from ryu.lib.packet import cfm - -LOG = logging.getLogger(__name__) - - -class Test_cfm(unittest.TestCase): - - def setUp(self): - self.message = cfm.cc_message() - self.ins = cfm.cfm(self.message) - data = bytearray() - prev = None - self.buf = self.ins.serialize(data, prev) - - def setUp_cc_message(self): - self.cc_message_md_lv = 1 - self.cc_message_version = 1 - self.cc_message_rdi = 1 - self.cc_message_interval = 1 - self.cc_message_seq_num = 123 - self.cc_message_mep_id = 4 - self.cc_message_md_name_format = 4 - self.cc_message_md_name_length = 0 - self.cc_message_md_name = b"hoge" - self.cc_message_short_ma_name_format = 2 - self.cc_message_short_ma_name_length = 0 - self.cc_message_short_ma_name = b"pakeratta" - self.cc_message_md_name_txfcf = 11 - self.cc_message_md_name_rxfcb = 22 - self.cc_message_md_name_txfcb = 33 - self.cc_message_tlvs = [ - cfm.sender_id_tlv(), - cfm.port_status_tlv(), - cfm.data_tlv(), - cfm.interface_status_tlv(), - cfm.reply_ingress_tlv(), - cfm.reply_egress_tlv(), - cfm.ltm_egress_identifier_tlv(), - cfm.ltr_egress_identifier_tlv(), - cfm.organization_specific_tlv(), - ] - self.message = cfm.cc_message( - self.cc_message_md_lv, - self.cc_message_version, - self.cc_message_rdi, - self.cc_message_interval, - self.cc_message_seq_num, - self.cc_message_mep_id, - self.cc_message_md_name_format, - self.cc_message_md_name_length, - self.cc_message_md_name, - self.cc_message_short_ma_name_format, - self.cc_message_short_ma_name_length, - self.cc_message_short_ma_name, - self.cc_message_tlvs - ) - self.ins = cfm.cfm(self.message) - data = bytearray() - prev = None - self.buf = self.ins.serialize(data, prev) - - def setUp_loopback_message(self): - self.loopback_message_md_lv = 1 - self.loopback_message_version = 1 - self.loopback_message_transaction_id = 12345 - self.loopback_message_tlvs = [ - cfm.sender_id_tlv(), - cfm.port_status_tlv(), - cfm.data_tlv(), - cfm.interface_status_tlv(), - cfm.reply_ingress_tlv(), - cfm.reply_egress_tlv(), - cfm.ltm_egress_identifier_tlv(), - cfm.ltr_egress_identifier_tlv(), - cfm.organization_specific_tlv(), - ] - self.message = cfm.loopback_message( - self.loopback_message_md_lv, - self.loopback_message_version, - self.loopback_message_transaction_id, - self.loopback_message_tlvs) - self.ins = cfm.cfm(self.message) - data = bytearray() - prev = None - self.buf = self.ins.serialize(data, prev) - - def setUp_loopback_reply(self): - self.loopback_reply_md_lv = 1 - self.loopback_reply_version = 1 - self.loopback_reply_transaction_id = 12345 - self.loopback_reply_tlvs = [ - cfm.sender_id_tlv(), - cfm.port_status_tlv(), - cfm.data_tlv(), - cfm.interface_status_tlv(), - cfm.reply_ingress_tlv(), - cfm.reply_egress_tlv(), - cfm.ltm_egress_identifier_tlv(), - cfm.ltr_egress_identifier_tlv(), - cfm.organization_specific_tlv(), - ] - self.message = cfm.loopback_reply( - self.loopback_reply_md_lv, - self.loopback_reply_version, - self.loopback_reply_transaction_id, - self.loopback_reply_tlvs) - self.ins = cfm.cfm(self.message) - data = bytearray() - prev = None - self.buf = self.ins.serialize(data, prev) - - def setUp_link_trace_message(self): - self.link_trace_message_md_lv = 1 - self.link_trace_message_version = 1 - self.link_trace_message_use_fdb_only = 1 - self.link_trace_message_transaction_id = 12345 - self.link_trace_message_ttl = 123 - self.link_trace_message_ltm_orig_addr = '11:22:33:44:55:66' - self.link_trace_message_ltm_targ_addr = '77:88:99:aa:cc:dd' - self.link_trace_message_tlvs = [ - cfm.sender_id_tlv(), - cfm.port_status_tlv(), - cfm.data_tlv(), - cfm.interface_status_tlv(), - cfm.reply_ingress_tlv(), - cfm.reply_egress_tlv(), - cfm.ltm_egress_identifier_tlv(), - cfm.ltr_egress_identifier_tlv(), - cfm.organization_specific_tlv(), - ] - self.message = cfm.link_trace_message( - self.link_trace_message_md_lv, - self.link_trace_message_version, - self.link_trace_message_use_fdb_only, - self.link_trace_message_transaction_id, - self.link_trace_message_ttl, - self.link_trace_message_ltm_orig_addr, - self.link_trace_message_ltm_targ_addr, - self.link_trace_message_tlvs) - self.ins = cfm.cfm(self.message) - data = bytearray() - prev = None - self.buf = self.ins.serialize(data, prev) - - def setUp_link_trace_reply(self): - self.link_trace_reply_md_lv = 1 - self.link_trace_reply_version = 1 - self.link_trace_reply_use_fdb_only = 1 - self.link_trace_reply_fwd_yes = 0 - self.link_trace_reply_terminal_mep = 1 - self.link_trace_reply_transaction_id = 5432 - self.link_trace_reply_ttl = 123 - self.link_trace_reply_relay_action = 3 - self.link_trace_reply_tlvs = [ - cfm.sender_id_tlv(), - cfm.port_status_tlv(), - cfm.data_tlv(), - cfm.interface_status_tlv(), - cfm.reply_ingress_tlv(), - cfm.reply_egress_tlv(), - cfm.ltm_egress_identifier_tlv(), - cfm.ltr_egress_identifier_tlv(), - cfm.organization_specific_tlv(), - ] - self.message = cfm.link_trace_reply( - self.link_trace_reply_md_lv, - self.link_trace_reply_version, - self.link_trace_reply_use_fdb_only, - self.link_trace_reply_fwd_yes, - self.link_trace_reply_terminal_mep, - self.link_trace_reply_transaction_id, - self.link_trace_reply_ttl, - self.link_trace_reply_relay_action, - self.link_trace_reply_tlvs) - self.ins = cfm.cfm(self.message) - data = bytearray() - prev = None - self.buf = self.ins.serialize(data, prev) - - def tearDown(self): - pass - - def test_init(self): - eq_(str(self.message), str(self.ins.op)) - - def test_init_cc_message(self): - self.setUp_cc_message() - self.test_init() - - def test_init_loopback_message(self): - self.setUp_loopback_message() - self.test_init() - - def test_init_loopback_reply(self): - self.setUp_loopback_reply() - self.test_init() - - def test_init_link_trace_message(self): - self.setUp_link_trace_message() - self.test_init() - - def test_init_link_trace_reply(self): - self.setUp_link_trace_reply() - self.test_init() - - def test_parser(self): - _res = self.ins.parser(six.binary_type(self.buf)) - - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(str(self.message), str(res.op)) - - def test_parser_with_cc_message(self): - self.setUp_cc_message() - self.test_parser() - - def test_parser_with_loopback_message(self): - self.setUp_loopback_message() - self.test_parser() - - def test_parser_with_loopback_reply(self): - self.setUp_loopback_reply() - self.test_parser() - - def test_parser_with_link_trace_message(self): - self.setUp_link_trace_message() - self.test_parser() - - def test_parser_with_link_trace_reply(self): - self.setUp_link_trace_reply() - self.test_parser() - - def test_serialize(self): - pass - - def test_serialize_with_cc_message(self): - self.setUp_cc_message() - self.test_serialize() - data = bytearray() - prev = None - buf = self.ins.serialize(data, prev) - cc_message = cfm.cc_message.parser(six.binary_type(buf)) - eq_(repr(self.message), repr(cc_message)) - - def test_serialize_with_loopback_message(self): - self.setUp_loopback_message() - self.test_serialize() - data = bytearray() - prev = None - buf = self.ins.serialize(data, prev) - loopback_message = cfm.loopback_message.parser(six.binary_type(buf)) - eq_(repr(self.message), repr(loopback_message)) - - def test_serialize_with_loopback_reply(self): - self.setUp_loopback_reply() - self.test_serialize() - data = bytearray() - prev = None - buf = self.ins.serialize(data, prev) - loopback_reply = cfm.loopback_reply.parser(six.binary_type(buf)) - eq_(repr(self.message), repr(loopback_reply)) - - def test_serialize_with_link_trace_message(self): - self.setUp_link_trace_message() - self.test_serialize() - data = bytearray() - prev = None - buf = self.ins.serialize(data, prev) - link_trace_message = cfm.link_trace_message.parser(six.binary_type(buf)) - eq_(repr(self.message), repr(link_trace_message)) - - def test_serialize_with_link_trace_reply(self): - self.setUp_link_trace_reply() - self.test_serialize() - data = bytearray() - prev = None - buf = self.ins.serialize(data, prev) - link_trace_reply = cfm.link_trace_reply.parser(six.binary_type(buf)) - eq_(repr(self.message), repr(link_trace_reply)) - - def test_to_string(self): - cfm_values = {'op': self.message} - _cfm_str = ','.join(['%s=%s' % (k, cfm_values[k]) - for k, v in inspect.getmembers(self.ins) - if k in cfm_values]) - cfm_str = '%s(%s)' % (cfm.cfm.__name__, _cfm_str) - eq_(str(self.ins), cfm_str) - eq_(repr(self.ins), cfm_str) - - def test_to_string_cc_message(self): - self.setUp_cc_message() - self.test_to_string() - - def test_to_string_loopback_message(self): - self.setUp_loopback_message() - self.test_to_string() - - def test_to_string_loopback_reply(self): - self.setUp_loopback_reply() - self.test_to_string() - - def test_to_string_link_trace_message(self): - self.setUp_link_trace_message() - self.test_to_string() - - def test_to_string_link_trace_reply(self): - self.setUp_link_trace_reply() - self.test_to_string() - - def test_len(self): - pass - - def test_len_cc_message(self): - self.setUp_cc_message() - eq_(len(self.ins), 0 + len(self.message)) - - def test_len_loopback_message(self): - self.setUp_loopback_message() - eq_(len(self.ins), 0 + len(self.message)) - - def test_len_loopback_reply(self): - self.setUp_loopback_reply() - eq_(len(self.ins), 0 + len(self.message)) - - def test_len_link_trace_message(self): - self.setUp_link_trace_message() - eq_(len(self.ins), 0 + len(self.message)) - - def test_len_link_trace_reply(self): - self.setUp_link_trace_reply() - eq_(len(self.ins), 0 + len(self.message)) - - def test_default_args(self): - pass - - def test_json(self): - jsondict = self.ins.to_jsondict() - ins = cfm.cfm.from_jsondict(jsondict['cfm']) - eq_(str(self.ins), str(ins)) - - def test_json_with_cc_message(self): - self.setUp_cc_message() - self.test_json() - - def test_json_with_loopback_message(self): - self.setUp_loopback_message() - self.test_json() - - def test_json_with_loopback_reply(self): - self.setUp_loopback_reply() - self.test_json() - - def test_json_with_link_trace_message(self): - self.setUp_link_trace_message() - self.test_json() - - def test_json_with_link_trace_reply(self): - self.setUp_link_trace_reply() - self.test_json() - - -class Test_cc_message(unittest.TestCase): - - def setUp(self): - self.md_lv = 1 - self.version = 1 - self.opcode = cfm.CFM_CC_MESSAGE - self.rdi = 1 - self.interval = 5 - self.first_tlv_offset = cfm.cc_message._TLV_OFFSET - self.seq_num = 2 - self.mep_id = 2 - self.md_name_format = cfm.cc_message._MD_FMT_CHARACTER_STRING - self.md_name_length = 3 - self.md_name = b"foo" - self.short_ma_name_format = 2 - self.short_ma_name_length = 8 - self.short_ma_name = b"hogehoge" - self.tlvs = [ - ] - self.end_tlv = 0 - self.ins = cfm.cc_message( - self.md_lv, - self.version, - self.rdi, - self.interval, - self.seq_num, - self.mep_id, - self.md_name_format, - self.md_name_length, - self.md_name, - self.short_ma_name_format, - self.short_ma_name_length, - self.short_ma_name, - self.tlvs - ) - - self.form = '!4BIH2B3s2B8s33x12x4xB' - self.buf = struct.pack( - self.form, - (self.md_lv << 5) | self.version, - self.opcode, - (self.rdi << 7) | self.interval, - self.first_tlv_offset, - self.seq_num, - self.mep_id, - self.md_name_format, - self.md_name_length, - self.md_name, - self.short_ma_name_format, - self.short_ma_name_length, - self.short_ma_name, - self.end_tlv - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.md_lv, self.ins.md_lv) - eq_(self.version, self.ins.version) - eq_(self.rdi, self.ins.rdi) - eq_(self.interval, self.ins.interval) - eq_(self.seq_num, self.ins.seq_num) - eq_(self.mep_id, self.ins.mep_id) - eq_(self.md_name_format, self.ins.md_name_format) - eq_(self.md_name_length, self.ins.md_name_length) - eq_(self.md_name, self.ins.md_name) - eq_(self.short_ma_name_format, self.ins.short_ma_name_format) - eq_(self.short_ma_name_length, self.ins.short_ma_name_length) - eq_(self.short_ma_name, self.ins.short_ma_name) - eq_(self.tlvs, self.ins.tlvs) - - def test_parser(self): - _res = cfm.cc_message.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.md_lv, res.md_lv) - eq_(self.version, res.version) - eq_(self.rdi, res.rdi) - eq_(self.interval, res.interval) - eq_(self.seq_num, res.seq_num) - eq_(self.mep_id, res.mep_id) - eq_(self.md_name_format, res.md_name_format) - eq_(self.md_name_length, res.md_name_length) - eq_(self.md_name, res.md_name) - eq_(self.short_ma_name_format, res.short_ma_name_format) - eq_(self.short_ma_name_length, res.short_ma_name_length) - eq_(self.short_ma_name, res.short_ma_name) - eq_(self.tlvs, res.tlvs) - - def test_parser_with_no_maintenance_domain_name_present(self): - form = '!4BIH3B8s37x12x4xB' - buf = struct.pack( - form, - (self.md_lv << 5) | self.version, - self.opcode, - (self.rdi << 7) | self.interval, - self.first_tlv_offset, - self.seq_num, - self.mep_id, - cfm.cc_message._MD_FMT_NO_MD_NAME_PRESENT, - self.short_ma_name_format, - self.short_ma_name_length, - self.short_ma_name, - self.end_tlv - ) - _res = cfm.cc_message.parser(buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.md_lv, res.md_lv) - eq_(self.version, res.version) - eq_(self.rdi, res.rdi) - eq_(self.interval, res.interval) - eq_(self.seq_num, res.seq_num) - eq_(self.mep_id, res.mep_id) - eq_(cfm.cc_message._MD_FMT_NO_MD_NAME_PRESENT, res.md_name_format) - eq_(self.short_ma_name_format, res.short_ma_name_format) - eq_(self.short_ma_name_length, res.short_ma_name_length) - eq_(self.short_ma_name, res.short_ma_name) - eq_(self.tlvs, res.tlvs) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self.md_lv, res[0] >> 5) - eq_(self.version, res[0] & 0x1f) - eq_(self.opcode, res[1]) - eq_(self.rdi, res[2] >> 7) - eq_(self.interval, res[2] & 0x07) - eq_(self.first_tlv_offset, res[3]) - eq_(self.seq_num, res[4]) - eq_(self.mep_id, res[5]) - eq_(self.md_name_format, res[6]) - eq_(self.md_name_length, res[7]) - eq_(self.md_name, res[8]) - eq_(self.short_ma_name_format, res[9]) - eq_(self.short_ma_name_length, res[10]) - eq_(self.short_ma_name, res[11]) - eq_(self.end_tlv, res[12]) - - def test_serialize_with_md_name_length_zero(self): - ins = cfm.cc_message( - self.md_lv, - self.version, - self.rdi, - self.interval, - self.seq_num, - self.mep_id, - self.md_name_format, - 0, - self.md_name, - self.short_ma_name_format, - 0, - self.short_ma_name, - self.tlvs - ) - buf = ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self.md_lv, res[0] >> 5) - eq_(self.version, res[0] & 0x1f) - eq_(self.opcode, res[1]) - eq_(self.rdi, res[2] >> 7) - eq_(self.interval, res[2] & 0x07) - eq_(self.first_tlv_offset, res[3]) - eq_(self.seq_num, res[4]) - eq_(self.mep_id, res[5]) - eq_(self.md_name_format, res[6]) - eq_(self.md_name_length, res[7]) - eq_(self.md_name, res[8]) - eq_(self.short_ma_name_format, res[9]) - eq_(self.short_ma_name_length, res[10]) - eq_(self.short_ma_name, res[11]) - eq_(self.end_tlv, res[12]) - - def test_serialize_with_no_maintenance_domain_name_present(self): - form = '!4BIH3B8s37x12x4xB' - ins = cfm.cc_message( - self.md_lv, - self.version, - self.rdi, - self.interval, - self.seq_num, - self.mep_id, - cfm.cc_message._MD_FMT_NO_MD_NAME_PRESENT, - 0, - self.md_name, - self.short_ma_name_format, - 0, - self.short_ma_name, - self.tlvs - ) - buf = ins.serialize() - res = struct.unpack_from(form, six.binary_type(buf)) - eq_(self.md_lv, res[0] >> 5) - eq_(self.version, res[0] & 0x1f) - eq_(self.opcode, res[1]) - eq_(self.rdi, res[2] >> 7) - eq_(self.interval, res[2] & 0x07) - eq_(self.first_tlv_offset, res[3]) - eq_(self.seq_num, res[4]) - eq_(self.mep_id, res[5]) - eq_(cfm.cc_message._MD_FMT_NO_MD_NAME_PRESENT, res[6]) - eq_(self.short_ma_name_format, res[7]) - eq_(self.short_ma_name_length, res[8]) - eq_(self.short_ma_name, res[9]) - eq_(self.end_tlv, res[10]) - - def test_len(self): - # 75 octet (If tlv does not exist) - eq_(75, len(self.ins)) - - def test_default_args(self): - ins = cfm.cc_message() - buf = ins.serialize() - res = struct.unpack_from(cfm.cc_message._PACK_STR, six.binary_type(buf)) - eq_(res[0] >> 5, 0) - eq_(res[0] & 0x1f, 0) - eq_(res[1], 1) - eq_(res[2] >> 7, 0) - eq_(res[2] & 0x07, 4) - eq_(res[3], 70) - eq_(res[4], 0) - eq_(res[5], 1) - eq_(res[6], 4) - - -class Test_loopback_message(unittest.TestCase): - - def setUp(self): - self.md_lv = 1 - self.version = 1 - self.opcode = cfm.CFM_LOOPBACK_MESSAGE - self.flags = 0 - self.first_tlv_offset = cfm.loopback_message._TLV_OFFSET - self.transaction_id = 12345 - self.tlvs = [ - ] - - self.end_tlv = 0 - self.ins = cfm.loopback_message( - self.md_lv, - self.version, - self.transaction_id, - self.tlvs, - ) - self.form = '!4BIB' - self.buf = struct.pack( - self.form, - (self.md_lv << 5) | self.version, - self.opcode, - self.flags, - self.first_tlv_offset, - self.transaction_id, - self.end_tlv - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.md_lv, self.ins.md_lv) - eq_(self.version, self.ins.version) - eq_(self.transaction_id, self.ins.transaction_id) - eq_(self.tlvs, self.ins.tlvs) - - def test_parser(self): - _res = cfm.loopback_message.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.md_lv, res.md_lv) - eq_(self.version, res.version) - eq_(self.transaction_id, res.transaction_id) - eq_(self.tlvs, res.tlvs) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self.md_lv, res[0] >> 5) - eq_(self.version, res[0] & 0x1f) - eq_(self.opcode, res[1]) - eq_(self.flags, res[2]) - eq_(self.first_tlv_offset, res[3]) - eq_(self.transaction_id, res[4]) - eq_(self.end_tlv, res[5]) - - def test_len(self): - # 9 octet (If tlv does not exist) - eq_(9, len(self.ins)) - - def test_default_args(self): - ins = cfm.loopback_message() - buf = ins.serialize() - res = struct.unpack_from(cfm.loopback_message._PACK_STR, - six.binary_type(buf)) - eq_(res[0] >> 5, 0) - eq_(res[0] & 0x1f, 0) - eq_(res[1], 3) - eq_(res[2], 0) - eq_(res[3], 4) - eq_(res[4], 0) - - -class Test_loopback_reply(unittest.TestCase): - - def setUp(self): - self.md_lv = 1 - self.version = 1 - self.opcode = cfm.CFM_LOOPBACK_REPLY - self.flags = 0 - self.first_tlv_offset = cfm.loopback_reply._TLV_OFFSET - self.transaction_id = 12345 - self.tlvs = [ - ] - self.end_tlv = 0 - self.ins = cfm.loopback_reply( - self.md_lv, - self.version, - self.transaction_id, - self.tlvs, - ) - self.form = '!4BIB' - self.buf = struct.pack( - self.form, - (self.md_lv << 5) | self.version, - self.opcode, - self.flags, - self.first_tlv_offset, - self.transaction_id, - self.end_tlv - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.md_lv, self.ins.md_lv) - eq_(self.version, self.ins.version) - eq_(self.transaction_id, self.ins.transaction_id) - eq_(self.tlvs, self.ins.tlvs) - - def test_parser(self): - _res = cfm.loopback_reply.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.md_lv, res.md_lv) - eq_(self.version, res.version) - eq_(self.transaction_id, res.transaction_id) - eq_(self.tlvs, res.tlvs) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self.md_lv, res[0] >> 5) - eq_(self.version, res[0] & 0x1f) - eq_(self.opcode, res[1]) - eq_(self.flags, res[2]) - eq_(self.first_tlv_offset, res[3]) - eq_(self.transaction_id, res[4]) - eq_(self.end_tlv, res[5]) - - def test_len(self): - # 9 octet (If tlv does not exist) - eq_(9, len(self.ins)) - - def test_default_args(self): - ins = cfm.loopback_reply() - buf = ins.serialize() - res = struct.unpack_from(cfm.loopback_reply._PACK_STR, six.binary_type(buf)) - eq_(res[0] >> 5, 0) - eq_(res[0] & 0x1f, 0) - eq_(res[1], 2) - eq_(res[2], 0) - eq_(res[3], 4) - eq_(res[4], 0) - - -class Test_link_trace_message(unittest.TestCase): - - def setUp(self): - self.md_lv = 1 - self.version = 1 - self.opcode = cfm.CFM_LINK_TRACE_MESSAGE - self.use_fdb_only = 1 - self.first_tlv_offset = cfm.link_trace_message._TLV_OFFSET - self.transaction_id = 12345 - self.ttl = 55 - self.ltm_orig_addr = "00:11:22:44:55:66" - self.ltm_targ_addr = "ab:cd:ef:23:12:65" - self.tlvs = [ - ] - - self.end_tlv = 0 - self.ins = cfm.link_trace_message( - self.md_lv, - self.version, - self.use_fdb_only, - self.transaction_id, - self.ttl, - self.ltm_orig_addr, - self.ltm_targ_addr, - self.tlvs - ) - self.form = '!4BIB6s6sB' - self.buf = struct.pack( - self.form, - (self.md_lv << 5) | self.version, - self.opcode, - self.use_fdb_only << 7, - self.first_tlv_offset, - self.transaction_id, - self.ttl, - addrconv.mac.text_to_bin(self.ltm_orig_addr), - addrconv.mac.text_to_bin(self.ltm_targ_addr), - self.end_tlv - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.md_lv, self.ins.md_lv) - eq_(self.version, self.ins.version) - eq_(self.use_fdb_only, self.ins.use_fdb_only) - eq_(self.transaction_id, self.ins.transaction_id) - eq_(self.ttl, self.ins.ttl) - eq_(self.ltm_orig_addr, self.ins.ltm_orig_addr) - eq_(self.ltm_targ_addr, self.ins.ltm_targ_addr) - eq_(self.tlvs, self.ins.tlvs) - - def test_parser(self): - _res = cfm.link_trace_message.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.md_lv, res.md_lv) - eq_(self.version, res.version) - eq_(self.use_fdb_only, res.use_fdb_only) - eq_(self.transaction_id, res.transaction_id) - eq_(self.ttl, res.ttl) - eq_(self.ltm_orig_addr, res.ltm_orig_addr) - eq_(self.ltm_targ_addr, res.ltm_targ_addr) - eq_(self.tlvs, res.tlvs) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self.md_lv, res[0] >> 5) - eq_(self.version, res[0] & 0x1f) - eq_(self.opcode, res[1]) - eq_(self.use_fdb_only, res[2] >> 7) - eq_(self.first_tlv_offset, res[3]) - eq_(self.transaction_id, res[4]) - eq_(self.ttl, res[5]) - eq_(addrconv.mac.text_to_bin(self.ltm_orig_addr), res[6]) - eq_(addrconv.mac.text_to_bin(self.ltm_targ_addr), res[7]) - eq_(self.end_tlv, res[8]) - - def test_len(self): - # 22 octet (If tlv does not exist) - eq_(22, len(self.ins)) - - def test_default_args(self): - ins = cfm.link_trace_message() - buf = ins.serialize() - res = struct.unpack_from(cfm.link_trace_message._PACK_STR, six.binary_type(buf)) - eq_(res[0] >> 5, 0) - eq_(res[0] & 0x1f, 0) - eq_(res[1], 5) - eq_(res[2] >> 7, 1) - eq_(res[3], 17) - eq_(res[4], 0) - eq_(res[5], 64) - eq_(res[6], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - eq_(res[7], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - -class Test_link_trace_reply(unittest.TestCase): - - def setUp(self): - self.md_lv = 1 - self.version = 1 - self.opcode = cfm.CFM_LINK_TRACE_REPLY - self.use_fdb_only = 1 - self.fwd_yes = 0 - self.terminal_mep = 1 - self.first_tlv_offset = cfm.link_trace_reply._TLV_OFFSET - self.transaction_id = 12345 - self.ttl = 55 - self.relay_action = 2 - self.ltm_orig_addr = "00:11:22:aa:bb:cc" - self.ltm_targ_addr = "53:45:24:64:ac:ff" - self.tlvs = [ - ] - self.end_tlv = 0 - self.ins = cfm.link_trace_reply( - self.md_lv, - self.version, - self.use_fdb_only, - self.fwd_yes, - self.terminal_mep, - self.transaction_id, - self.ttl, - self.relay_action, - self.tlvs, - ) - self.form = '!4BIBBB' - self.buf = struct.pack( - self.form, - (self.md_lv << 5) | self.version, - self.opcode, - (self.use_fdb_only << 7) | (self.fwd_yes << 6) | - (self.terminal_mep << 5), - self.first_tlv_offset, - self.transaction_id, - self.ttl, - self.relay_action, - self.end_tlv - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.md_lv, self.ins.md_lv) - eq_(self.version, self.ins.version) - eq_(self.use_fdb_only, self.ins.use_fdb_only) - eq_(self.fwd_yes, self.ins.fwd_yes) - eq_(self.terminal_mep, self.ins.terminal_mep) - eq_(self.transaction_id, self.ins.transaction_id) - eq_(self.ttl, self.ins.ttl) - eq_(self.relay_action, self.ins.relay_action) - eq_(self.tlvs, self.ins.tlvs) - - def test_parser(self): - _res = cfm.link_trace_reply.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.md_lv, res.md_lv) - eq_(self.version, res.version) - eq_(self.use_fdb_only, self.ins.use_fdb_only) - eq_(self.fwd_yes, self.ins.fwd_yes) - eq_(self.terminal_mep, self.ins.terminal_mep) - eq_(self.transaction_id, res.transaction_id) - eq_(self.ttl, res.ttl) - eq_(self.relay_action, res.relay_action) - eq_(self.tlvs, res.tlvs) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self.md_lv, res[0] >> 5) - eq_(self.version, res[0] & 0x1f) - eq_(self.opcode, res[1]) - eq_(self.use_fdb_only, res[2] >> 7 & 0x01) - eq_(self.fwd_yes, res[2] >> 6 & 0x01) - eq_(self.terminal_mep, res[2] >> 5 & 0x01) - eq_(self.first_tlv_offset, res[3]) - eq_(self.transaction_id, res[4]) - eq_(self.ttl, res[5]) - eq_(self.relay_action, res[6]) - eq_(self.end_tlv, res[7]) - - def test_len(self): - # 11 octet (If tlv does not exist) - eq_(11, len(self.ins)) - - def test_default_args(self): - ins = cfm.link_trace_reply() - buf = ins.serialize() - res = struct.unpack_from(cfm.link_trace_reply._PACK_STR, six.binary_type(buf)) - eq_(res[0] >> 5, 0) - eq_(res[0] & 0x1f, 0) - eq_(res[1], 4) - eq_(res[2] >> 7, 1) - eq_(res[2] >> 6 & 0x01, 0) - eq_(res[2] >> 5 & 0x01, 1) - eq_(res[3], 6) - eq_(res[4], 0) - eq_(res[5], 64) - eq_(res[6], 1) - - -class Test_sender_id_tlv(unittest.TestCase): - - def setUp(self): - self._type = cfm.CFM_SENDER_ID_TLV - self.length = 10 - self.chassis_id_length = 1 - self.chassis_id_subtype = 3 - self.chassis_id = b"\x0a" - self.ma_domain_length = 2 - self.ma_domain = b"\x04\x05" - self.ma_length = 3 - self.ma = b"\x01\x02\x03" - self.ins = cfm.sender_id_tlv( - self.length, - self.chassis_id_length, - self.chassis_id_subtype, - self.chassis_id, - self.ma_domain_length, - self.ma_domain, - self.ma_length, - self.ma, - ) - self.form = '!BHBB1sB2sB3s' - self.buf = struct.pack( - self.form, - self._type, - self.length, - self.chassis_id_length, - self.chassis_id_subtype, - self.chassis_id, - self.ma_domain_length, - self.ma_domain, - self.ma_length, - self.ma - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.length, self.ins.length) - eq_(self.chassis_id_length, self.ins.chassis_id_length) - eq_(self.chassis_id_subtype, self.ins.chassis_id_subtype) - eq_(self.chassis_id, self.ins.chassis_id) - eq_(self.ma_domain_length, self.ins.ma_domain_length) - eq_(self.ma_domain, self.ins.ma_domain) - eq_(self.ma_length, self.ins.ma_length) - eq_(self.ma, self.ins.ma) - - def test_parser(self): - _res = cfm.sender_id_tlv.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.length, res.length) - eq_(self.chassis_id_length, res.chassis_id_length) - eq_(self.chassis_id_subtype, res.chassis_id_subtype) - eq_(self.chassis_id, res.chassis_id) - eq_(self.ma_domain_length, res.ma_domain_length) - eq_(self.ma_domain, res.ma_domain) - eq_(self.ma_length, res.ma_length) - eq_(self.ma, res.ma) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.chassis_id_length, res[2]) - eq_(self.chassis_id_subtype, res[3]) - eq_(self.chassis_id, res[4]) - eq_(self.ma_domain_length, res[5]) - eq_(self.ma_domain, res[6]) - eq_(self.ma_length, res[7]) - eq_(self.ma, res[8]) - - def test_serialize_semi_normal_ptn1(self): - ins = cfm.sender_id_tlv( - chassis_id_subtype=self.chassis_id_subtype, - chassis_id=self.chassis_id, - ma_domain=self.ma_domain, - ) - buf = ins.serialize() - form = '!BHBB1sB2sB' - res = struct.unpack_from(form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(7, res[1]) - eq_(self.chassis_id_length, res[2]) - eq_(self.chassis_id_subtype, res[3]) - eq_(self.chassis_id, res[4]) - eq_(self.ma_domain_length, res[5]) - eq_(self.ma_domain, res[6]) - eq_(0, res[7]) - - def test_serialize_semi_normal_ptn2(self): - ins = cfm.sender_id_tlv( - ma_domain=self.ma_domain, - ma=self.ma, - ) - buf = ins.serialize() - form = '!BHBB2sB3s' - res = struct.unpack_from(form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(8, res[1]) - eq_(0, res[2]) - eq_(self.ma_domain_length, res[3]) - eq_(self.ma_domain, res[4]) - eq_(self.ma_length, res[5]) - eq_(self.ma, res[6]) - - def test_serialize_semi_normal_ptn3(self): - ins = cfm.sender_id_tlv( - chassis_id_subtype=self.chassis_id_subtype, - chassis_id=self.chassis_id, - ) - buf = ins.serialize() - form = '!BHBB1sB' - res = struct.unpack_from(form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(4, res[1]) - eq_(self.chassis_id_length, res[2]) - eq_(self.chassis_id_subtype, res[3]) - eq_(self.chassis_id, res[4]) - eq_(0, res[5]) - - def test_serialize_semi_normal_ptn4(self): - ins = cfm.sender_id_tlv( - ma_domain=self.ma_domain, - ) - buf = ins.serialize() - form = '!BHBB2sB' - res = struct.unpack_from(form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(5, res[1]) - eq_(0, res[2]) - eq_(self.ma_domain_length, res[3]) - eq_(self.ma_domain, res[4]) - eq_(0, res[5]) - - def test_serialize_with_length_zero(self): - ins = cfm.sender_id_tlv( - 0, - 0, - self.chassis_id_subtype, - self.chassis_id, - 0, - self.ma_domain, - 0, - self.ma, - ) - buf = ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.chassis_id_length, res[2]) - eq_(self.chassis_id_subtype, res[3]) - eq_(self.chassis_id, res[4]) - eq_(self.ma_domain_length, res[5]) - eq_(self.ma_domain, res[6]) - eq_(self.ma_length, res[7]) - eq_(self.ma, res[8]) - - def test_len(self): - # tlv_length = type_len + length_len + value_len - eq_(1 + 2 + 10, len(self.ins)) - - def test_default_args(self): - ins = cfm.sender_id_tlv() - buf = ins.serialize() - res = struct.unpack_from(cfm.sender_id_tlv._PACK_STR, six.binary_type(buf)) - eq_(res[0], cfm.CFM_SENDER_ID_TLV) - eq_(res[1], 1) - eq_(res[2], 0) - - -class Test_port_status_tlv(unittest.TestCase): - - def setUp(self): - self._type = cfm.CFM_PORT_STATUS_TLV - self.length = 1 - self.port_status = 1 - self.ins = cfm.port_status_tlv( - self.length, - self.port_status - ) - self.form = '!BHB' - self.buf = struct.pack( - self.form, - self._type, - self.length, - self.port_status - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.length, self.ins.length) - eq_(self.port_status, self.ins.port_status) - - def test_parser(self): - _res = cfm.port_status_tlv.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.length, res.length) - eq_(self.port_status, res.port_status) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.port_status, res[2]) - - def test_len(self): - # tlv_length = type_len + length_len + value_len - eq_(1 + 2 + 1, len(self.ins)) - - def test_default_args(self): - ins = cfm.port_status_tlv() - buf = ins.serialize() - res = struct.unpack_from(cfm.port_status_tlv._PACK_STR, six.binary_type(buf)) - eq_(res[0], cfm.CFM_PORT_STATUS_TLV) - eq_(res[1], 1) - eq_(res[2], 2) - - -class Test_data_tlv(unittest.TestCase): - - def setUp(self): - self._type = cfm.CFM_DATA_TLV - self.length = 3 - self.data_value = b"\x01\x02\x03" - self.ins = cfm.data_tlv( - self.length, - self.data_value - ) - self.form = '!BH3s' - self.buf = struct.pack( - self.form, - self._type, - self.length, - self.data_value, - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.length, self.ins.length) - eq_(self.data_value, self.ins.data_value) - - def test_parser(self): - _res = cfm.data_tlv.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.length, res.length) - eq_(self.data_value, res.data_value) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.data_value, res[2]) - - def test_serialize_with_length_zero(self): - ins = cfm.data_tlv( - 0, - self.data_value - ) - buf = ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.data_value, res[2]) - - def test_len(self): - # tlv_length = type_len + length_len + value_len - eq_(1 + 2 + 3, len(self.ins)) - - def test_default_args(self): - ins = cfm.data_tlv() - buf = ins.serialize() - res = struct.unpack_from(cfm.data_tlv._PACK_STR, six.binary_type(buf)) - eq_(res[0], cfm.CFM_DATA_TLV) - eq_(res[1], 0) - - -class Test_interface_status_tlv(unittest.TestCase): - - def setUp(self): - self._type = cfm.CFM_INTERFACE_STATUS_TLV - self.length = 1 - self.interface_status = 4 - self.ins = cfm.interface_status_tlv( - self.length, - self.interface_status - ) - self.form = '!BHB' - self.buf = struct.pack( - self.form, - self._type, - self.length, - self.interface_status - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.length, self.ins.length) - eq_(self.interface_status, self.ins.interface_status) - - def test_parser(self): - _res = cfm.interface_status_tlv.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.length, res.length) - eq_(self.interface_status, res.interface_status) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.interface_status, res[2]) - - def test_len(self): - # tlv_length = type_len + length_len + value_len - eq_(1 + 2 + 1, len(self.ins)) - - def test_default_args(self): - ins = cfm.interface_status_tlv() - buf = ins.serialize() - res = struct.unpack_from(cfm.interface_status_tlv._PACK_STR, six.binary_type(buf)) - eq_(res[0], cfm.CFM_INTERFACE_STATUS_TLV) - eq_(res[1], 1) - eq_(res[2], 1) - - -class Test_ltm_egress_identifier_tlv(unittest.TestCase): - - def setUp(self): - self._type = cfm.CFM_LTM_EGRESS_IDENTIFIER_TLV - self.length = 8 - self.egress_id_ui = 7 - self.egress_id_mac = "11:22:33:44:55:66" - self.ins = cfm.ltm_egress_identifier_tlv( - self.length, - self.egress_id_ui, - self.egress_id_mac - ) - self.form = '!BHH6s' - self.buf = struct.pack( - self.form, - self._type, - self.length, - self.egress_id_ui, - addrconv.mac.text_to_bin(self.egress_id_mac) - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.length, self.ins.length) - eq_(self.egress_id_ui, self.ins.egress_id_ui) - eq_(self.egress_id_mac, self.ins.egress_id_mac) - - def test_parser(self): - _res = cfm.ltm_egress_identifier_tlv.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.length, res.length) - eq_(self.egress_id_ui, res.egress_id_ui) - eq_(self.egress_id_mac, res.egress_id_mac) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.egress_id_ui, res[2]) - eq_(addrconv.mac.text_to_bin(self.egress_id_mac), res[3]) - - def test_serialize_with_length_zero(self): - ins = cfm.ltm_egress_identifier_tlv( - 0, - self.egress_id_ui, - self.egress_id_mac - ) - buf = ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.egress_id_ui, res[2]) - eq_(addrconv.mac.text_to_bin(self.egress_id_mac), res[3]) - - def test_len(self): - # tlv_length = type_len + length_len + value_len - eq_(1 + 2 + 8, len(self.ins)) - - def test_default_args(self): - ins = cfm.ltm_egress_identifier_tlv() - buf = ins.serialize() - res = struct.unpack_from( - cfm.ltm_egress_identifier_tlv._PACK_STR, six.binary_type(buf)) - eq_(res[0], cfm.CFM_LTM_EGRESS_IDENTIFIER_TLV) - eq_(res[1], 8) - eq_(res[2], 0) - eq_(res[3], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - -class Test_ltr_egress_identifier_tlv(unittest.TestCase): - - def setUp(self): - self._type = cfm.CFM_LTR_EGRESS_IDENTIFIER_TLV - self.length = 16 - self.last_egress_id_ui = 7 - self.last_egress_id_mac = "11:22:33:44:55:66" - self.next_egress_id_ui = 5 - self.next_egress_id_mac = "33:11:33:aa:bb:cc" - self.ins = cfm.ltr_egress_identifier_tlv(self.length, - self.last_egress_id_ui, - self.last_egress_id_mac, - self.next_egress_id_ui, - self.next_egress_id_mac - ) - self.form = '!BHH6sH6s' - self.buf = struct.pack( - self.form, - self._type, - self.length, - self.last_egress_id_ui, - addrconv.mac.text_to_bin(self.last_egress_id_mac), - self.next_egress_id_ui, - addrconv.mac.text_to_bin(self.next_egress_id_mac)) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.length, self.ins.length) - eq_(self.last_egress_id_ui, self.ins.last_egress_id_ui) - eq_(self.last_egress_id_mac, self.ins.last_egress_id_mac) - eq_(self.next_egress_id_ui, self.ins.next_egress_id_ui) - eq_(self.next_egress_id_mac, self.ins.next_egress_id_mac) - - def test_parser(self): - _res = cfm.ltr_egress_identifier_tlv.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.length, res.length) - eq_(self.last_egress_id_ui, res.last_egress_id_ui) - eq_(self.last_egress_id_mac, res.last_egress_id_mac) - eq_(self.next_egress_id_ui, res.next_egress_id_ui) - eq_(self.next_egress_id_mac, res.next_egress_id_mac) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.last_egress_id_ui, res[2]) - eq_(addrconv.mac.text_to_bin(self.last_egress_id_mac), res[3]) - eq_(self.next_egress_id_ui, res[4]) - eq_(addrconv.mac.text_to_bin(self.next_egress_id_mac), res[5]) - - def test_serialize_with_length_zero(self): - ins = cfm.ltr_egress_identifier_tlv(0, - self.last_egress_id_ui, - self.last_egress_id_mac, - self.next_egress_id_ui, - self.next_egress_id_mac - ) - buf = ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.last_egress_id_ui, res[2]) - eq_(addrconv.mac.text_to_bin(self.last_egress_id_mac), res[3]) - eq_(self.next_egress_id_ui, res[4]) - eq_(addrconv.mac.text_to_bin(self.next_egress_id_mac), res[5]) - - def test_len(self): - # tlv_length = type_len + length_len + value_len - eq_(1 + 2 + 16, len(self.ins)) - - def test_default_args(self): - ins = cfm.ltr_egress_identifier_tlv() - buf = ins.serialize() - res = struct.unpack_from(cfm.ltr_egress_identifier_tlv._PACK_STR, - six.binary_type(buf)) - eq_(res[0], cfm.CFM_LTR_EGRESS_IDENTIFIER_TLV) - eq_(res[1], 16) - eq_(res[2], 0) - eq_(res[3], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - eq_(res[4], 0) - eq_(res[5], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - -class Test_organization_specific_tlv(unittest.TestCase): - - def setUp(self): - self._type = cfm.CFM_ORGANIZATION_SPECIFIC_TLV - self.length = 10 - self.oui = b"\xff\x12\x34" - self.subtype = 3 - self.value = b"\x01\x02\x0f\x0e\x0d\x0c" - self.ins = cfm.organization_specific_tlv(self.length, - self.oui, - self.subtype, - self.value - ) - self.form = '!BH3sB6s' - self.buf = struct.pack(self.form, - self._type, - self.length, - self.oui, - self.subtype, - self.value - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.length, self.ins.length) - eq_(self.oui, self.ins.oui) - eq_(self.subtype, self.ins.subtype) - eq_(self.value, self.ins.value) - - def test_parser(self): - _res = cfm.organization_specific_tlv.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.length, res.length) - eq_(self.oui, res.oui) - eq_(self.subtype, res.subtype) - eq_(self.value, res.value) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.oui, res[2]) - eq_(self.subtype, res[3]) - eq_(self.value, res[4]) - - def test_serialize_with_zero(self): - ins = cfm.organization_specific_tlv(0, - self.oui, - self.subtype, - self.value - ) - buf = ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.oui, res[2]) - eq_(self.subtype, res[3]) - eq_(self.value, res[4]) - - def test_len(self): - # tlv_length = type_len + length_len + value_len - eq_(1 + 2 + 10, len(self.ins)) - - def test_default_args(self): - ins = cfm.organization_specific_tlv() - buf = ins.serialize() - res = struct.unpack_from(cfm.organization_specific_tlv._PACK_STR, - six.binary_type(buf)) - eq_(res[0], cfm.CFM_ORGANIZATION_SPECIFIC_TLV) - eq_(res[1], 4) - eq_(res[2], b"\x00\x00\x00") - eq_(res[3], 0) - - -class Test_reply_ingress_tlv(unittest.TestCase): - - def setUp(self): - self._type = cfm.CFM_REPLY_INGRESS_TLV - self.length = 12 - self.action = 2 - self.mac_address = 'aa:bb:cc:56:34:12' - self.port_id_length = 3 - self.port_id_subtype = 2 - self.port_id = b"\x01\x04\x09" - self.ins = cfm.reply_ingress_tlv(self.length, self.action, - self.mac_address, - self.port_id_length, - self.port_id_subtype, - self.port_id - ) - self.form = '!BHB6sBB3s' - self.buf = struct.pack(self.form, - self._type, - self.length, - self.action, - addrconv.mac.text_to_bin(self.mac_address), - self.port_id_length, - self.port_id_subtype, - self.port_id - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.length, self.ins.length) - eq_(self.action, self.ins.action) - eq_(self.mac_address, self.ins.mac_address) - eq_(self.port_id_length, self.ins.port_id_length) - eq_(self.port_id_subtype, self.ins.port_id_subtype) - eq_(self.port_id, self.ins.port_id) - - def test_parser(self): - _res = cfm.reply_ingress_tlv.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.length, res.length) - eq_(self.action, res.action) - eq_(self.mac_address, res.mac_address) - eq_(self.port_id_length, res.port_id_length) - eq_(self.port_id_subtype, res.port_id_subtype) - eq_(self.port_id, res.port_id) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.action, res[2]) - eq_(addrconv.mac.text_to_bin(self.mac_address), res[3]) - eq_(self.port_id_length, res[4]) - eq_(self.port_id_subtype, res[5]) - eq_(self.port_id, res[6]) - - def test_serialize_with_zero(self): - ins = cfm.reply_ingress_tlv(0, - self.action, - self.mac_address, - 0, - self.port_id_subtype, - self.port_id - ) - buf = ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.action, res[2]) - eq_(addrconv.mac.text_to_bin(self.mac_address), res[3]) - eq_(self.port_id_length, res[4]) - eq_(self.port_id_subtype, res[5]) - eq_(self.port_id, res[6]) - - def test_len(self): - # tlv_length = type_len + length_len + value_len - eq_(1 + 2 + 12, len(self.ins)) - - def test_default_args(self): - ins = cfm.reply_ingress_tlv() - buf = ins.serialize() - res = struct.unpack_from(cfm.reply_ingress_tlv._PACK_STR, six.binary_type(buf)) - eq_(res[0], cfm.CFM_REPLY_INGRESS_TLV) - eq_(res[1], 7) - eq_(res[2], 1) - eq_(res[3], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - -class Test_reply_egress_tlv(unittest.TestCase): - - def setUp(self): - self._type = cfm.CFM_REPLY_EGRESS_TLV - self.length = 12 - self.action = 2 - self.mac_address = 'aa:bb:cc:56:34:12' - self.port_id_length = 3 - self.port_id_subtype = 2 - self.port_id = b"\x01\x04\x09" - self.ins = cfm.reply_egress_tlv(self.length, - self.action, - self.mac_address, - self.port_id_length, - self.port_id_subtype, - self.port_id - ) - self.form = '!BHB6sBB3s' - self.buf = struct.pack(self.form, - self._type, - self.length, - self.action, - addrconv.mac.text_to_bin(self.mac_address), - self.port_id_length, - self.port_id_subtype, - self.port_id - ) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.length, self.ins.length) - eq_(self.action, self.ins.action) - eq_(self.mac_address, self.ins.mac_address) - eq_(self.port_id_length, self.ins.port_id_length) - eq_(self.port_id_subtype, self.ins.port_id_subtype) - eq_(self.port_id, self.ins.port_id) - - def test_parser(self): - _res = cfm.reply_ingress_tlv.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.length, res.length) - eq_(self.action, res.action) - eq_(self.mac_address, res.mac_address) - eq_(self.port_id_length, res.port_id_length) - eq_(self.port_id_subtype, res.port_id_subtype) - eq_(self.port_id, res.port_id) - - def test_serialize(self): - buf = self.ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.action, res[2]) - eq_(addrconv.mac.text_to_bin(self.mac_address), res[3]) - eq_(self.port_id_length, res[4]) - eq_(self.port_id_subtype, res[5]) - eq_(self.port_id, res[6]) - - def test_serialize_with_zero(self): - ins = cfm.reply_egress_tlv(0, - self.action, - self.mac_address, - 0, - self.port_id_subtype, - self.port_id - ) - buf = ins.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self._type, res[0]) - eq_(self.length, res[1]) - eq_(self.action, res[2]) - eq_(addrconv.mac.text_to_bin(self.mac_address), res[3]) - eq_(self.port_id_length, res[4]) - eq_(self.port_id_subtype, res[5]) - eq_(self.port_id, res[6]) - - def test_len(self): - # tlv_length = type_len + length_len + value_len - eq_(1 + 2 + 12, len(self.ins)) - - def test_default_args(self): - ins = cfm.reply_egress_tlv() - buf = ins.serialize() - res = struct.unpack_from(cfm.reply_egress_tlv._PACK_STR, - six.binary_type(buf)) - eq_(res[0], cfm.CFM_REPLY_EGRESS_TLV) - eq_(res[1], 7) - eq_(res[2], 1) - eq_(res[3], addrconv.mac.text_to_bin('00:00:00:00:00:00')) diff --git a/ryu/tests/unit/packet/test_dhcp.py b/ryu/tests/unit/packet/test_dhcp.py deleted file mode 100644 index cc96804b..00000000 --- a/ryu/tests/unit/packet/test_dhcp.py +++ /dev/null @@ -1,218 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import inspect -import logging -import struct -import unittest - -import six -from nose.tools import eq_ -from nose.tools import ok_ - -from ryu.lib import addrconv -from ryu.lib.packet import dhcp - - -LOG = logging.getLogger(__name__) - - -class Test_dhcp_offer(unittest.TestCase): - - op = dhcp.DHCP_BOOT_REPLY - chaddr = 'aa:aa:aa:aa:aa:aa' - htype = 1 - hlen = 6 - hops = 0 - xid = 1 - secs = 0 - flags = 1 - ciaddr = '192.168.10.10' - yiaddr = '192.168.20.20' - siaddr = '192.168.30.30' - giaddr = '192.168.40.40' - sname = 'abc' - boot_file = '' - - option_list = [ - dhcp.option(dhcp.DHCP_MESSAGE_TYPE_OPT, b'\x02', 1), - dhcp.option(dhcp.DHCP_SUBNET_MASK_OPT, b'\xff\xff\xff\x00', 4), - dhcp.option(dhcp.DHCP_GATEWAY_ADDR_OPT, b'\xc0\xa8\x0a\x09', 4), - dhcp.option(dhcp.DHCP_DNS_SERVER_ADDR_OPT, b'\xc0\xa8\x0a\x09', 4), - dhcp.option(dhcp.DHCP_IP_ADDR_LEASE_TIME_OPT, b'\x00\x03\xf4\x80', 4), - dhcp.option(dhcp.DHCP_RENEWAL_TIME_OPT, b'\x00\x01\xfa\x40', 4), - dhcp.option(dhcp.DHCP_REBINDING_TIME_OPT, b'\x00\x03\x75\xf0', 4), - dhcp.option(dhcp.DHCP_SERVER_IDENTIFIER_OPT, b'\xc0\xa8\x0a\x09', 4)] - magic_cookie = '99.130.83.99' - options = dhcp.options(option_list=option_list, options_len=50, - magic_cookie=magic_cookie) - - dh = dhcp.dhcp(op, chaddr, options, htype=htype, hlen=hlen, - hops=hops, xid=xid, secs=secs, flags=flags, - ciaddr=ciaddr, yiaddr=yiaddr, siaddr=siaddr, - giaddr=giaddr, sname=sname, boot_file=boot_file) - - buf = ( - b"\x02\x01\x06\x00\x00\x00\x00\x01\x00\x00\x00\x01\xc0\xa8\x0a\x0a" - b"\xc0\xa8\x14\x14\xc0\xa8\x1e\x1e\xc0\xa8\x28\x28\xaa\xaa\xaa\xaa" - b"\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x62\x63\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" - b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x82\x53\x63" - b"\x35\x01\x02\x01\x04\xff\xff\xff\x00\x03\x04\xc0\xa8\x0a\x09\x06" - b"\x04\xc0\xa8\x0a\x09\x33\x04\x00\x03\xf4\x80\x3a\x04\x00\x01\xfa" - b"\x40\x3b\x04\x00\x03\x75\xf0\x36\x04\xc0\xa8\x0a\x09\xff") - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.op, self.dh.op) - eq_(self.htype, self.dh.htype) - eq_(self.hlen, self.dh.hlen) - eq_(self.hops, self.dh.hops) - eq_(self.xid, self.dh.xid) - eq_(self.secs, self.dh.secs) - eq_(self.flags, self.dh.flags) - eq_(self.ciaddr, self.dh.ciaddr) - eq_(self.yiaddr, self.dh.yiaddr) - eq_(self.siaddr, self.dh.siaddr) - eq_(self.giaddr, self.dh.giaddr) - eq_(self.chaddr, self.dh.chaddr) - eq_(self.sname, self.dh.sname) - eq_(self.boot_file, self.dh.boot_file) - eq_(str(self.options), str(self.dh.options)) - - def test_parser(self): - res, _, rest = dhcp.dhcp.parser(self.buf) - - eq_(self.op, res.op) - eq_(self.htype, res.htype) - eq_(self.hlen, res.hlen) - eq_(self.hops, res.hops) - eq_(self.xid, res.xid) - eq_(self.secs, res.secs) - eq_(self.flags, res.flags) - eq_(self.ciaddr, res.ciaddr) - eq_(self.yiaddr, res.yiaddr) - eq_(self.siaddr, res.siaddr) - eq_(self.giaddr, res.giaddr) - eq_(self.chaddr, res.chaddr) - # sname is 64 byte length. rest of data is filled by '\x00'. - eq_(self.sname.ljust(64, '\x00'), res.sname) - # boof_file is 128 byte length. rest of data is filled by '\x00'. - eq_(self.boot_file.ljust(128, '\x00'), res.boot_file) - eq_(str(self.options), str(res.options)) - eq_(b'', rest) - - def test_parser_corrupted(self): - corrupt_buf = self.buf[:-4] - pkt, _, rest = dhcp.dhcp.parser(corrupt_buf) - - ok_(isinstance(pkt, dhcp.dhcp)) - ok_(isinstance(pkt.options, dhcp.options)) - for opt in pkt.options.option_list[:-1]: - ok_(isinstance(opt, dhcp.option)) - ok_(isinstance(pkt.options.option_list[-1], six.binary_type)) - - buf = pkt.serialize() - eq_(str(buf), str(corrupt_buf)) - eq_(b'', rest) - - def test_serialize(self): - buf = self.dh.serialize() - - res = struct.unpack_from(dhcp.dhcp._DHCP_PACK_STR, - six.binary_type(buf)) - - eq_(self.op, res[0]) - eq_(self.htype, res[1]) - eq_(self.hlen, res[2]) - eq_(self.hops, res[3]) - eq_(self.xid, res[4]) - eq_(self.secs, res[5]) - eq_(self.flags, res[6]) - eq_(self.ciaddr, addrconv.ipv4.bin_to_text(res[7])) - eq_(self.yiaddr, addrconv.ipv4.bin_to_text(res[8])) - eq_(self.siaddr, addrconv.ipv4.bin_to_text(res[9])) - eq_(self.giaddr, addrconv.ipv4.bin_to_text(res[10])) - eq_(self.chaddr, addrconv.mac.bin_to_text(res[11][:6])) - # sname is 64 byte length. rest of data is filled by '\x00'. - eq_(self.sname.ljust(64, '\x00'), res[12].decode('ascii')) - # boof_file is 128 byte length. rest of data is filled by '\x00'. - eq_(self.boot_file.ljust(128, '\x00'), res[13].decode('ascii')) - options = dhcp.options.parser( - buf[struct.calcsize(dhcp.dhcp._DHCP_PACK_STR):]) - eq_(str(self.options), str(options)) - - def test_to_string(self): - option_values = ['tag', 'length', 'value'] - opt_str_list = [] - for option in self.option_list: - _opt_str = ','.join(['%s=%s' % (k, repr(getattr(option, k))) - for k, v in inspect.getmembers(option) - if k in option_values]) - opt_str = '%s(%s)' % (dhcp.option.__name__, _opt_str) - opt_str_list.append(opt_str) - option_str = '[%s]' % ', '.join(opt_str_list) - - opts_vals = {'magic_cookie': repr(self.magic_cookie), - 'option_list': option_str, - 'options_len': repr(self.options.options_len)} - _options_str = ','.join(['%s=%s' % (k, opts_vals[k]) - for k, v in inspect.getmembers(self.options) - if k in opts_vals]) - options_str = '%s(%s)' % (dhcp.options.__name__, _options_str) - - dhcp_values = {'op': repr(self.op), - 'htype': repr(self.htype), - 'hlen': repr(self.hlen), - 'hops': repr(self.hops), - 'xid': repr(self.xid), - 'secs': repr(self.secs), - 'flags': repr(self.flags), - 'ciaddr': repr(self.ciaddr), - 'yiaddr': repr(self.yiaddr), - 'siaddr': repr(self.siaddr), - 'giaddr': repr(self.giaddr), - 'chaddr': repr(self.chaddr), - 'sname': repr(self.sname), - 'boot_file': repr(self.boot_file), - 'options': options_str} - _dh_str = ','.join(['%s=%s' % (k, dhcp_values[k]) - for k, v in inspect.getmembers(self.dh) - if k in dhcp_values]) - dh_str = '%s(%s)' % (dhcp.dhcp.__name__, _dh_str) - - eq_(str(self.dh), dh_str) - eq_(repr(self.dh), dh_str) - - def test_json(self): - jsondict = self.dh.to_jsondict() - dh = dhcp.dhcp.from_jsondict(jsondict['dhcp']) - eq_(str(self.dh), str(dh)) diff --git a/ryu/tests/unit/packet/test_ethernet.py b/ryu/tests/unit/packet/test_ethernet.py deleted file mode 100644 index 6fd767bd..00000000 --- a/ryu/tests/unit/packet/test_ethernet.py +++ /dev/null @@ -1,103 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import six -import struct -import netaddr -from struct import * -from nose.tools import * -from ryu.ofproto import ether, inet -from ryu.lib.packet.ethernet import ethernet -from ryu.lib.packet.packet import Packet -from ryu.lib.packet.arp import arp -from ryu.lib import addrconv - - -LOG = logging.getLogger('test_ethernet') - - -class Test_ethernet(unittest.TestCase): - """ Test case for ethernet - """ - - dst = 'aa:aa:aa:aa:aa:aa' - src = 'bb:bb:bb:bb:bb:bb' - ethertype = ether.ETH_TYPE_ARP - - buf = pack(ethernet._PACK_STR, - addrconv.mac.text_to_bin(dst), - addrconv.mac.text_to_bin(src), ethertype) - - e = ethernet(dst, src, ethertype) - - def setUp(self): - pass - - def tearDown(self): - pass - - def find_protocol(self, pkt, name): - for p in pkt.protocols: - if p.protocol_name == name: - return p - - def test_init(self): - eq_(self.dst, self.e.dst) - eq_(self.src, self.e.src) - eq_(self.ethertype, self.e.ethertype) - - def test_parser(self): - res, ptype, _ = self.e.parser(self.buf) - LOG.debug((res, ptype)) - - eq_(res.dst, self.dst) - eq_(res.src, self.src) - eq_(res.ethertype, self.ethertype) - eq_(ptype, arp) - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.e.serialize(data, prev) - - fmt = ethernet._PACK_STR - res = struct.unpack(fmt, buf) - - eq_(res[0], addrconv.mac.text_to_bin(self.dst)) - eq_(res[1], addrconv.mac.text_to_bin(self.src)) - eq_(res[2], self.ethertype) - - @raises(Exception) - def test_malformed_ethernet(self): - m_short_buf = self.buf[1:ethernet._MIN_LEN] - ethernet.parser(m_short_buf) - - def test_default_args(self): - e = ethernet() - buf = e.serialize(bytearray(), None) - res = struct.unpack(e._PACK_STR, six.binary_type(buf)) - - eq_(res[0], addrconv.mac.text_to_bin('ff:ff:ff:ff:ff:ff')) - eq_(res[1], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - eq_(res[2], ether.ETH_TYPE_IP) - - def test_json(self): - jsondict = self.e.to_jsondict() - e = ethernet.from_jsondict(jsondict['ethernet']) - eq_(str(self.e), str(e)) diff --git a/ryu/tests/unit/packet/test_geneve.py b/ryu/tests/unit/packet/test_geneve.py deleted file mode 100644 index 919d05f8..00000000 --- a/ryu/tests/unit/packet/test_geneve.py +++ /dev/null @@ -1,62 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import logging -import os -import sys - -import unittest -from nose.tools import eq_ -from nose.tools import ok_ - -from ryu.lib import pcaplib -from ryu.lib.packet import geneve -from ryu.lib.packet import packet -from ryu.utils import binary_str - - -LOG = logging.getLogger(__name__) - -GENEVE_DATA_DIR = os.path.join( - os.path.dirname(sys.modules[__name__].__file__), - '../../packet_data/pcap/') - - -class Test_geneve(unittest.TestCase): - """ - Test case for ryu.lib.packet.geneve. - """ - - def test_parser(self): - files = [ - 'geneve_unknown', - ] - - for f in files: - # print('*** testing %s ...' % f) - for _, buf in pcaplib.Reader( - open(GENEVE_DATA_DIR + f + '.pcap', 'rb')): - # Checks if message can be parsed as expected. - pkt = packet.Packet(buf) - geneve_pkt = pkt.get_protocol(geneve.geneve) - ok_(isinstance(geneve_pkt, geneve.geneve), - 'Failed to parse Geneve message: %s' % pkt) - - # Checks if message can be serialized as expected. - pkt.serialize() - eq_(buf, pkt.data, - "b'%s' != b'%s'" % (binary_str(buf), binary_str(pkt.data))) diff --git a/ryu/tests/unit/packet/test_gre.py b/ryu/tests/unit/packet/test_gre.py deleted file mode 100644 index c955ec70..00000000 --- a/ryu/tests/unit/packet/test_gre.py +++ /dev/null @@ -1,115 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import logging -import os -import sys - -import unittest -from nose.tools import eq_ -from nose.tools import ok_ - -from ryu.lib import pcaplib -from ryu.lib.packet import gre -from ryu.lib.packet import packet -from ryu.utils import binary_str -from ryu.lib.packet.ether_types import ETH_TYPE_IP, ETH_TYPE_TEB - -LOG = logging.getLogger(__name__) - -GENEVE_DATA_DIR = os.path.join( - os.path.dirname(sys.modules[__name__].__file__), - '../../packet_data/pcap/') - - -class Test_gre(unittest.TestCase): - """ - Test case gre for ryu.lib.packet.gre. - """ - - version = 0 - gre_proto = ETH_TYPE_IP - nvgre_proto = ETH_TYPE_TEB - checksum = 0x440d - seq_number = 10 - key = 256100 - vsid = 1000 - flow_id = 100 - - gre = gre.gre(version=version, protocol=gre_proto, checksum=checksum, - key=key, seq_number=seq_number) - - def test_key_setter(self): - self.gre.key = self.key - eq_(self.gre._key, self.key) - eq_(self.gre._vsid, self.vsid) - eq_(self.gre._flow_id, self.flow_id) - - def test_key_setter_none(self): - self.gre.key = None - eq_(self.gre._key, None) - eq_(self.gre._vsid, None) - eq_(self.gre._flow_id, None) - - self.gre.key = self.key - - def test_vsid_setter(self): - self.gre.vsid = self.vsid - eq_(self.gre._key, self.key) - eq_(self.gre._vsid, self.vsid) - eq_(self.gre._flow_id, self.flow_id) - - def test_flowid_setter(self): - self.gre.flow_id = self.flow_id - eq_(self.gre._key, self.key) - eq_(self.gre._vsid, self.vsid) - eq_(self.gre._flow_id, self.flow_id) - - def test_nvgre_init(self): - nvgre = gre.nvgre(version=self.version, vsid=self.vsid, - flow_id=self.flow_id) - - eq_(nvgre.version, self.version) - eq_(nvgre.protocol, self.nvgre_proto) - eq_(nvgre.checksum, None) - eq_(nvgre.seq_number, None) - eq_(nvgre._key, self.key) - eq_(nvgre._vsid, self.vsid) - eq_(nvgre._flow_id, self.flow_id) - - def test_parser(self): - files = [ - 'gre_full_options', - 'gre_no_option', - 'gre_nvgre_option', - ] - - for f in files: - # print('*** testing %s ...' % f) - for _, buf in pcaplib.Reader( - open(GENEVE_DATA_DIR + f + '.pcap', 'rb')): - # Checks if message can be parsed as expected. - pkt = packet.Packet(buf) - gre_pkt = pkt.get_protocol(gre.gre) - ok_(isinstance(gre_pkt, gre.gre), - 'Failed to parse Gre message: %s' % pkt) - - # Checks if message can be serialized as expected. - pkt.serialize() - - eq_(buf, pkt.data, - "b'%s' != b'%s'" % (binary_str(buf), binary_str(pkt.data))) diff --git a/ryu/tests/unit/packet/test_icmp.py b/ryu/tests/unit/packet/test_icmp.py deleted file mode 100644 index f9438893..00000000 --- a/ryu/tests/unit/packet/test_icmp.py +++ /dev/null @@ -1,380 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import inspect -import logging -import six -import struct -import unittest - -from nose.tools import eq_ -from ryu.lib.packet import icmp -from ryu.lib.packet import packet_utils - - -LOG = logging.getLogger(__name__) - - -class Test_icmp(unittest.TestCase): - - echo_id = None - echo_seq = None - echo_data = None - - unreach_mtu = None - unreach_data = None - unreach_data_len = None - - te_data = None - te_data_len = None - - def setUp(self): - self.type_ = icmp.ICMP_ECHO_REQUEST - self.code = 0 - self.csum = 0 - self.data = None - - self.ic = icmp.icmp(self.type_, self.code, self.csum, self.data) - - self.buf = bytearray(struct.pack( - icmp.icmp._PACK_STR, self.type_, self.code, self.csum)) - self.csum_calc = packet_utils.checksum(self.buf) - struct.pack_into('!H', self.buf, 2, self.csum_calc) - - def setUp_with_echo(self): - self.echo_id = 13379 - self.echo_seq = 1 - self.echo_data = b'\x30\x0e\x09\x00\x00\x00\x00\x00' \ - + b'\x10\x11\x12\x13\x14\x15\x16\x17' \ - + b'\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' \ - + b'\x20\x21\x22\x23\x24\x25\x26\x27' \ - + b'\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f' \ - + b'\x30\x31\x32\x33\x34\x35\x36\x37' - self.data = icmp.echo( - id_=self.echo_id, seq=self.echo_seq, data=self.echo_data) - - self.type_ = icmp.ICMP_ECHO_REQUEST - self.code = 0 - self.ic = icmp.icmp(self.type_, self.code, self.csum, self.data) - - self.buf = bytearray(struct.pack( - icmp.icmp._PACK_STR, self.type_, self.code, self.csum)) - self.buf += self.data.serialize() - self.csum_calc = packet_utils.checksum(self.buf) - struct.pack_into('!H', self.buf, 2, self.csum_calc) - - def setUp_with_dest_unreach(self): - self.unreach_mtu = 10 - self.unreach_data = b'abc' - self.unreach_data_len = len(self.unreach_data) - self.data = icmp.dest_unreach( - data_len=self.unreach_data_len, mtu=self.unreach_mtu, - data=self.unreach_data) - - self.type_ = icmp.ICMP_DEST_UNREACH - self.code = icmp.ICMP_HOST_UNREACH_CODE - self.ic = icmp.icmp(self.type_, self.code, self.csum, self.data) - - self.buf = bytearray(struct.pack( - icmp.icmp._PACK_STR, self.type_, self.code, self.csum)) - self.buf += self.data.serialize() - self.csum_calc = packet_utils.checksum(self.buf) - struct.pack_into('!H', self.buf, 2, self.csum_calc) - - def setUp_with_TimeExceeded(self): - self.te_data = b'abc' - self.te_data_len = len(self.te_data) - self.data = icmp.TimeExceeded( - data_len=self.te_data_len, data=self.te_data) - - self.type_ = icmp.ICMP_TIME_EXCEEDED - self.code = 0 - self.ic = icmp.icmp(self.type_, self.code, self.csum, self.data) - - self.buf = bytearray(struct.pack( - icmp.icmp._PACK_STR, self.type_, self.code, self.csum)) - self.buf += self.data.serialize() - self.csum_calc = packet_utils.checksum(self.buf) - struct.pack_into('!H', self.buf, 2, self.csum_calc) - - def test_init(self): - eq_(self.type_, self.ic.type) - eq_(self.code, self.ic.code) - eq_(self.csum, self.ic.csum) - eq_(str(self.data), str(self.ic.data)) - - def test_init_with_echo(self): - self.setUp_with_echo() - self.test_init() - - def test_init_with_dest_unreach(self): - self.setUp_with_dest_unreach() - self.test_init() - - def test_init_with_TimeExceeded(self): - self.setUp_with_TimeExceeded() - self.test_init() - - def test_parser(self): - _res = icmp.icmp.parser(six.binary_type(self.buf)) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - - eq_(self.type_, res.type) - eq_(self.code, res.code) - eq_(self.csum_calc, res.csum) - eq_(str(self.data), str(res.data)) - - def test_parser_with_echo(self): - self.setUp_with_echo() - self.test_parser() - - def test_parser_with_dest_unreach(self): - self.setUp_with_dest_unreach() - self.test_parser() - - def test_parser_with_TimeExceeded(self): - self.setUp_with_TimeExceeded() - self.test_parser() - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.ic.serialize(data, prev) - - res = struct.unpack_from(icmp.icmp._PACK_STR, six.binary_type(buf)) - - eq_(self.type_, res[0]) - eq_(self.code, res[1]) - eq_(self.csum_calc, res[2]) - - def test_serialize_with_echo(self): - self.setUp_with_echo() - self.test_serialize() - - data = bytearray() - prev = None - buf = self.ic.serialize(data, prev) - echo = icmp.echo.parser(six.binary_type(buf), icmp.icmp._MIN_LEN) - eq_(repr(self.data), repr(echo)) - - def test_serialize_with_dest_unreach(self): - self.setUp_with_dest_unreach() - self.test_serialize() - - data = bytearray() - prev = None - buf = self.ic.serialize(data, prev) - unreach = icmp.dest_unreach.parser(six.binary_type(buf), icmp.icmp._MIN_LEN) - eq_(repr(self.data), repr(unreach)) - - def test_serialize_with_TimeExceeded(self): - self.setUp_with_TimeExceeded() - self.test_serialize() - - data = bytearray() - prev = None - buf = self.ic.serialize(data, prev) - te = icmp.TimeExceeded.parser(six.binary_type(buf), icmp.icmp._MIN_LEN) - eq_(repr(self.data), repr(te)) - - def test_to_string(self): - icmp_values = {'type': repr(self.type_), - 'code': repr(self.code), - 'csum': repr(self.csum), - 'data': repr(self.data)} - _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) - for k, v in inspect.getmembers(self.ic) - if k in icmp_values]) - ic_str = '%s(%s)' % (icmp.icmp.__name__, _ic_str) - - eq_(str(self.ic), ic_str) - eq_(repr(self.ic), ic_str) - - def test_to_string_with_echo(self): - self.setUp_with_echo() - self.test_to_string() - - def test_to_string_with_dest_unreach(self): - self.setUp_with_dest_unreach() - self.test_to_string() - - def test_to_string_with_TimeExceeded(self): - self.setUp_with_TimeExceeded() - self.test_to_string() - - def test_default_args(self): - ic = icmp.icmp() - buf = ic.serialize(bytearray(), None) - res = struct.unpack(icmp.icmp._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], 8) - eq_(res[1], 0) - eq_(buf[4:], b'\x00\x00\x00\x00') - - # with data - ic = icmp.icmp(type_=icmp.ICMP_DEST_UNREACH, data=icmp.dest_unreach()) - buf = ic.serialize(bytearray(), None) - res = struct.unpack(icmp.icmp._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], 3) - eq_(res[1], 0) - eq_(buf[4:], b'\x00\x00\x00\x00') - - def test_json(self): - jsondict = self.ic.to_jsondict() - ic = icmp.icmp.from_jsondict(jsondict['icmp']) - eq_(str(self.ic), str(ic)) - - def test_json_with_echo(self): - self.setUp_with_echo() - self.test_json() - - def test_json_with_dest_unreach(self): - self.setUp_with_dest_unreach() - self.test_json() - - def test_json_with_TimeExceeded(self): - self.setUp_with_TimeExceeded() - self.test_json() - - -class Test_echo(unittest.TestCase): - - def setUp(self): - self.id_ = 13379 - self.seq = 1 - self.data = b'\x30\x0e\x09\x00\x00\x00\x00\x00' \ - + b'\x10\x11\x12\x13\x14\x15\x16\x17' \ - + b'\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' \ - + b'\x20\x21\x22\x23\x24\x25\x26\x27' \ - + b'\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f' \ - + b'\x30\x31\x32\x33\x34\x35\x36\x37' - self.echo = icmp.echo( - self.id_, self.seq, self.data) - self.buf = struct.pack('!HH', self.id_, self.seq) - self.buf += self.data - - def test_init(self): - eq_(self.id_, self.echo.id) - eq_(self.seq, self.echo.seq) - eq_(self.data, self.echo.data) - - def test_parser(self): - _res = icmp.echo.parser(self.buf, 0) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.id_, res.id) - eq_(self.seq, res.seq) - eq_(self.data, res.data) - - def test_serialize(self): - buf = self.echo.serialize() - res = struct.unpack_from('!HH', six.binary_type(buf)) - eq_(self.id_, res[0]) - eq_(self.seq, res[1]) - eq_(self.data, buf[struct.calcsize('!HH'):]) - - def test_default_args(self): - ec = icmp.echo() - buf = ec.serialize() - res = struct.unpack(icmp.echo._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0) - eq_(res[1], 0) - - -class Test_dest_unreach(unittest.TestCase): - - def setUp(self): - self.mtu = 10 - self.data = b'abc' - self.data_len = len(self.data) - self.dest_unreach = icmp.dest_unreach( - data_len=self.data_len, mtu=self.mtu, data=self.data) - self.buf = struct.pack('!xBH', self.data_len, self.mtu) - self.buf += self.data - - def test_init(self): - eq_(self.data_len, self.dest_unreach.data_len) - eq_(self.mtu, self.dest_unreach.mtu) - eq_(self.data, self.dest_unreach.data) - - def test_parser(self): - _res = icmp.dest_unreach.parser(self.buf, 0) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.data_len, res.data_len) - eq_(self.mtu, res.mtu) - eq_(self.data, res.data) - - def test_serialize(self): - buf = self.dest_unreach.serialize() - res = struct.unpack_from('!xBH', six.binary_type(buf)) - eq_(self.data_len, res[0]) - eq_(self.mtu, res[1]) - eq_(self.data, buf[struct.calcsize('!xBH'):]) - - def test_default_args(self): - du = icmp.dest_unreach() - buf = du.serialize() - res = struct.unpack(icmp.dest_unreach._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0) - eq_(res[1], 0) - - -class Test_TimeExceeded(unittest.TestCase): - - def setUp(self): - self.data = b'abc' - self.data_len = len(self.data) - self.te = icmp.TimeExceeded( - data_len=self.data_len, data=self.data) - self.buf = struct.pack('!xBxx', self.data_len) - self.buf += self.data - - def test_init(self): - eq_(self.data_len, self.te.data_len) - eq_(self.data, self.te.data) - - def test_parser(self): - _res = icmp.TimeExceeded.parser(self.buf, 0) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.data_len, res.data_len) - eq_(self.data, res.data) - - def test_serialize(self): - buf = self.te.serialize() - res = struct.unpack_from('!xBxx', six.binary_type(buf)) - eq_(self.data_len, res[0]) - eq_(self.data, buf[struct.calcsize('!xBxx'):]) - - def test_default_args(self): - te = icmp.TimeExceeded() - buf = te.serialize() - res = struct.unpack(icmp.TimeExceeded._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0) diff --git a/ryu/tests/unit/packet/test_icmpv6.py b/ryu/tests/unit/packet/test_icmpv6.py deleted file mode 100644 index c6438171..00000000 --- a/ryu/tests/unit/packet/test_icmpv6.py +++ /dev/null @@ -1,2039 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import six -import struct -import inspect - -from nose.tools import ok_, eq_, nottest, raises -from ryu.ofproto import ether, inet -from ryu.lib.packet.ethernet import ethernet -from ryu.lib.packet.packet import Packet -from ryu.lib.packet import icmpv6 -from ryu.lib.packet.ipv6 import ipv6 -from ryu.lib.packet import packet_utils -from ryu.lib import addrconv - - -LOG = logging.getLogger(__name__) - - -def icmpv6_csum(prev, buf): - ph = struct.pack('!16s16sI3xB', - addrconv.ipv6.text_to_bin(prev.src), - addrconv.ipv6.text_to_bin(prev.dst), - prev.payload_length, prev.nxt) - h = bytearray(buf) - struct.pack_into('!H', h, 2, 0) - - return packet_utils.checksum(ph + h) - - -class Test_icmpv6_header(unittest.TestCase): - type_ = 255 - code = 0 - csum = 207 - buf = b'\xff\x00\x00\xcf' - icmp = icmpv6.icmpv6(type_, code, 0) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.type_, self.icmp.type_) - eq_(self.code, self.icmp.code) - eq_(0, self.icmp.csum) - - def test_parser(self): - msg, n, _ = self.icmp.parser(self.buf) - - eq_(msg.type_, self.type_) - eq_(msg.code, self.code) - eq_(msg.csum, self.csum) - eq_(msg.data, None) - eq_(n, None) - - def test_serialize(self): - src_ipv6 = 'fe80::200:ff:fe00:ef' - dst_ipv6 = 'fe80::200:ff:fe00:1' - prev = ipv6(6, 0, 0, 4, 58, 255, src_ipv6, dst_ipv6) - - buf = self.icmp.serialize(bytearray(), prev) - (type_, code, csum) = struct.unpack(self.icmp._PACK_STR, six.binary_type(buf)) - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, self.csum) - - @raises(Exception) - def test_malformed_icmpv6(self): - m_short_buf = self.buf[1:self.icmp._MIN_LEN] - self.icmp.parser(m_short_buf) - - def test_default_args(self): - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6() - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - def test_json(self): - jsondict = self.icmp.to_jsondict() - icmp = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) - eq_(str(self.icmp), str(icmp)) - - -class Test_icmpv6_echo_request(unittest.TestCase): - type_ = 128 - code = 0 - csum = 0xa572 - id_ = 0x7620 - seq = 0 - data = b'\x01\xc9\xe7\x36\xd3\x39\x06\x00' - buf = b'\x80\x00\xa5\x72\x76\x20\x00\x00' - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - echo = icmpv6.echo(0, 0) - eq_(echo.id, 0) - eq_(echo.seq, 0) - eq_(echo.data, None) - - def _test_parser(self, data=None): - buf = self.buf + (data or b'') - msg, n, _ = icmpv6.icmpv6.parser(buf) - - eq_(msg.type_, self.type_) - eq_(msg.code, self.code) - eq_(msg.csum, self.csum) - eq_(msg.data.id, self.id_) - eq_(msg.data.seq, self.seq) - eq_(msg.data.data, data) - eq_(n, None) - - def test_parser_without_data(self): - self._test_parser() - - def test_parser_with_data(self): - self._test_parser(self.data) - - def _test_serialize(self, echo_data=None): - buf = self.buf + (echo_data or b'') - src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' - dst_ipv6 = '3ffe:501:0:1001::2' - prev = ipv6(6, 0, 0, len(buf), 64, 255, src_ipv6, dst_ipv6) - echo_csum = icmpv6_csum(prev, buf) - - echo = icmpv6.echo(self.id_, self.seq, echo_data) - icmp = icmpv6.icmpv6(self.type_, self.code, 0, echo) - buf = six.binary_type(icmp.serialize(bytearray(), prev)) - - (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) - (id_, seq) = struct.unpack_from(echo._PACK_STR, buf, icmp._MIN_LEN) - data = buf[(icmp._MIN_LEN + echo._MIN_LEN):] - data = data if len(data) != 0 else None - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, echo_csum) - eq_(id_, self.id_) - eq_(seq, self.seq) - eq_(data, echo_data) - - def test_serialize_without_data(self): - self._test_serialize() - - def test_serialize_with_data(self): - self._test_serialize(self.data) - - def test_to_string(self): - ec = icmpv6.echo(self.id_, self.seq, self.data) - ic = icmpv6.icmpv6(self.type_, self.code, self.csum, ec) - - echo_values = {'id': self.id_, - 'seq': self.seq, - 'data': self.data} - _echo_str = ','.join(['%s=%s' % (k, repr(echo_values[k])) - for k, v in inspect.getmembers(ec) - if k in echo_values]) - echo_str = '%s(%s)' % (icmpv6.echo.__name__, _echo_str) - - icmp_values = {'type_': repr(self.type_), - 'code': repr(self.code), - 'csum': repr(self.csum), - 'data': echo_str} - _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) - for k, v in inspect.getmembers(ic) - if k in icmp_values]) - ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) - - eq_(str(ic), ic_str) - eq_(repr(ic), ic_str) - - def test_default_args(self): - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ICMPV6_ECHO_REQUEST, data=icmpv6.echo()) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ICMPV6_ECHO_REQUEST) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.echo._PACK_STR, six.binary_type(buf[4:])) - - eq_(res[0], 0) - eq_(res[1], 0) - - def test_json(self): - ec = icmpv6.echo(self.id_, self.seq, self.data) - ic1 = icmpv6.icmpv6(self.type_, self.code, self.csum, ec) - jsondict = ic1.to_jsondict() - ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) - eq_(str(ic1), str(ic2)) - - -class Test_icmpv6_echo_reply(Test_icmpv6_echo_request): - def setUp(self): - self.type_ = 129 - self.csum = 0xa472 - self.buf = b'\x81\x00\xa4\x72\x76\x20\x00\x00' - - def test_default_args(self): - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ICMPV6_ECHO_REPLY, data=icmpv6.echo()) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ICMPV6_ECHO_REPLY) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.echo._PACK_STR, six.binary_type(buf[4:])) - - eq_(res[0], 0) - eq_(res[1], 0) - - -class Test_icmpv6_neighbor_solicit(unittest.TestCase): - type_ = 135 - code = 0 - csum = 0x952d - res = 0 - dst = '3ffe:507:0:1:200:86ff:fe05:80da' - nd_type = 1 - nd_length = 1 - nd_hw_src = '00:60:97:07:69:ea' - data = b'\x01\x01\x00\x60\x97\x07\x69\xea' - buf = b'\x87\x00\x95\x2d\x00\x00\x00\x00' \ - + b'\x3f\xfe\x05\x07\x00\x00\x00\x01' \ - + b'\x02\x00\x86\xff\xfe\x05\x80\xda' - src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' - dst_ipv6 = '3ffe:501:0:1001::2' - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - nd = icmpv6.nd_neighbor(self.res, self.dst) - eq_(nd.res, self.res) - eq_(nd.dst, self.dst) - eq_(nd.option, None) - - def _test_parser(self, data=None): - buf = self.buf + (data or b'') - msg, n, _ = icmpv6.icmpv6.parser(buf) - - eq_(msg.type_, self.type_) - eq_(msg.code, self.code) - eq_(msg.csum, self.csum) - eq_(msg.data.res, self.res) - eq_(addrconv.ipv6.text_to_bin(msg.data.dst), - addrconv.ipv6.text_to_bin(self.dst)) - eq_(n, None) - if data: - nd = msg.data.option - eq_(nd.length, self.nd_length) - eq_(nd.hw_src, self.nd_hw_src) - eq_(nd.data, None) - - def test_parser_without_data(self): - self._test_parser() - - def test_parser_with_data(self): - self._test_parser(self.data) - - def test_serialize_without_data(self): - nd = icmpv6.nd_neighbor(self.res, self.dst) - prev = ipv6(6, 0, 0, 24, 64, 255, self.src_ipv6, self.dst_ipv6) - nd_csum = icmpv6_csum(prev, self.buf) - - icmp = icmpv6.icmpv6(self.type_, self.code, 0, nd) - buf = six.binary_type(icmp.serialize(bytearray(), prev)) - - (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) - (res, dst) = struct.unpack_from(nd._PACK_STR, buf, icmp._MIN_LEN) - data = buf[(icmp._MIN_LEN + nd._MIN_LEN):] - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, nd_csum) - eq_(res >> 29, self.res) - eq_(dst, addrconv.ipv6.text_to_bin(self.dst)) - eq_(data, b'') - - def test_serialize_with_data(self): - nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) - nd = icmpv6.nd_neighbor(self.res, self.dst, nd_opt) - prev = ipv6(6, 0, 0, 32, 64, 255, self.src_ipv6, self.dst_ipv6) - nd_csum = icmpv6_csum(prev, self.buf + self.data) - - icmp = icmpv6.icmpv6(self.type_, self.code, 0, nd) - buf = six.binary_type(icmp.serialize(bytearray(), prev)) - - (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) - (res, dst) = struct.unpack_from(nd._PACK_STR, buf, icmp._MIN_LEN) - (nd_type, nd_length, nd_hw_src) = struct.unpack_from( - nd_opt._PACK_STR, buf, icmp._MIN_LEN + nd._MIN_LEN) - data = buf[(icmp._MIN_LEN + nd._MIN_LEN + 8):] - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, nd_csum) - eq_(res >> 29, self.res) - eq_(dst, addrconv.ipv6.text_to_bin(self.dst)) - eq_(nd_type, self.nd_type) - eq_(nd_length, self.nd_length) - eq_(nd_hw_src, addrconv.mac.text_to_bin(self.nd_hw_src)) - - def test_to_string(self): - nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) - nd = icmpv6.nd_neighbor(self.res, self.dst, nd_opt) - ic = icmpv6.icmpv6(self.type_, self.code, self.csum, nd) - - nd_opt_values = {'length': self.nd_length, - 'hw_src': self.nd_hw_src, - 'data': None} - _nd_opt_str = ','.join(['%s=%s' % (k, repr(nd_opt_values[k])) - for k, v in inspect.getmembers(nd_opt) - if k in nd_opt_values]) - nd_opt_str = '%s(%s)' % (icmpv6.nd_option_sla.__name__, _nd_opt_str) - - nd_values = {'res': repr(nd.res), - 'dst': repr(self.dst), - 'option': nd_opt_str} - _nd_str = ','.join(['%s=%s' % (k, nd_values[k]) - for k, v in inspect.getmembers(nd) - if k in nd_values]) - nd_str = '%s(%s)' % (icmpv6.nd_neighbor.__name__, _nd_str) - - icmp_values = {'type_': repr(self.type_), - 'code': repr(self.code), - 'csum': repr(self.csum), - 'data': nd_str} - _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) - for k, v in inspect.getmembers(ic) - if k in icmp_values]) - ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) - - eq_(str(ic), ic_str) - eq_(repr(ic), ic_str) - - def test_default_args(self): - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_NEIGHBOR_SOLICIT, data=icmpv6.nd_neighbor()) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_NEIGHBOR_SOLICIT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_neighbor._PACK_STR, six.binary_type(buf[4:])) - - eq_(res[0], 0) - eq_(res[1], addrconv.ipv6.text_to_bin('::')) - - # with nd_option_sla - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_NEIGHBOR_SOLICIT, - data=icmpv6.nd_neighbor( - option=icmpv6.nd_option_sla())) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_NEIGHBOR_SOLICIT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_neighbor._PACK_STR, - six.binary_type(buf[4:24])) - - eq_(res[0], 0) - eq_(res[1], addrconv.ipv6.text_to_bin('::')) - - res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, - six.binary_type(buf[24:])) - - eq_(res[0], icmpv6.ND_OPTION_SLA) - eq_(res[1], len(icmpv6.nd_option_sla()) // 8) - eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - def test_json(self): - nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) - nd = icmpv6.nd_neighbor(self.res, self.dst, nd_opt) - ic1 = icmpv6.icmpv6(self.type_, self.code, self.csum, nd) - jsondict = ic1.to_jsondict() - ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) - eq_(str(ic1), str(ic2)) - - -class Test_icmpv6_neighbor_advert(Test_icmpv6_neighbor_solicit): - def setUp(self): - self.type_ = 136 - self.csum = 0xb8ba - self.res = 7 - self.dst = '3ffe:507:0:1:260:97ff:fe07:69ea' - self.nd_type = 2 - self.nd_length = 1 - self.nd_data = None - self.nd_hw_src = '00:60:97:07:69:ea' - self.data = b'\x02\x01\x00\x60\x97\x07\x69\xea' - self.buf = b'\x88\x00\xb8\xba\xe0\x00\x00\x00' \ - + b'\x3f\xfe\x05\x07\x00\x00\x00\x01' \ - + b'\x02\x60\x97\xff\xfe\x07\x69\xea' - - def test_serialize_with_data(self): - nd_opt = icmpv6.nd_option_tla(self.nd_length, self.nd_hw_src) - nd = icmpv6.nd_neighbor(self.res, self.dst, nd_opt) - prev = ipv6(6, 0, 0, 32, 64, 255, self.src_ipv6, self.dst_ipv6) - nd_csum = icmpv6_csum(prev, self.buf + self.data) - - icmp = icmpv6.icmpv6(self.type_, self.code, 0, nd) - buf = six.binary_type(icmp.serialize(bytearray(), prev)) - - (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) - (res, dst) = struct.unpack_from(nd._PACK_STR, buf, icmp._MIN_LEN) - (nd_type, nd_length, nd_hw_src) = struct.unpack_from( - nd_opt._PACK_STR, buf, icmp._MIN_LEN + nd._MIN_LEN) - data = buf[(icmp._MIN_LEN + nd._MIN_LEN + 8):] - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, nd_csum) - eq_(res >> 29, self.res) - eq_(dst, addrconv.ipv6.text_to_bin(self.dst)) - eq_(nd_type, self.nd_type) - eq_(nd_length, self.nd_length) - eq_(nd_hw_src, addrconv.mac.text_to_bin(self.nd_hw_src)) - - def test_to_string(self): - nd_opt = icmpv6.nd_option_tla(self.nd_length, self.nd_hw_src) - nd = icmpv6.nd_neighbor(self.res, self.dst, nd_opt) - ic = icmpv6.icmpv6(self.type_, self.code, self.csum, nd) - - nd_opt_values = {'length': self.nd_length, - 'hw_src': self.nd_hw_src, - 'data': None} - _nd_opt_str = ','.join(['%s=%s' % (k, repr(nd_opt_values[k])) - for k, v in inspect.getmembers(nd_opt) - if k in nd_opt_values]) - nd_opt_str = '%s(%s)' % (icmpv6.nd_option_tla.__name__, _nd_opt_str) - - nd_values = {'res': repr(nd.res), - 'dst': repr(self.dst), - 'option': nd_opt_str} - _nd_str = ','.join(['%s=%s' % (k, nd_values[k]) - for k, v in inspect.getmembers(nd) - if k in nd_values]) - nd_str = '%s(%s)' % (icmpv6.nd_neighbor.__name__, _nd_str) - - icmp_values = {'type_': repr(self.type_), - 'code': repr(self.code), - 'csum': repr(self.csum), - 'data': nd_str} - _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) - for k, v in inspect.getmembers(ic) - if k in icmp_values]) - ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) - - eq_(str(ic), ic_str) - eq_(repr(ic), ic_str) - - def test_default_args(self): - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_NEIGHBOR_ADVERT, data=icmpv6.nd_neighbor()) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_NEIGHBOR_ADVERT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_neighbor._PACK_STR, six.binary_type(buf[4:])) - - eq_(res[0], 0) - eq_(res[1], addrconv.ipv6.text_to_bin('::')) - - # with nd_option_tla - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_NEIGHBOR_ADVERT, - data=icmpv6.nd_neighbor( - option=icmpv6.nd_option_tla())) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_NEIGHBOR_ADVERT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_neighbor._PACK_STR, - six.binary_type(buf[4:24])) - - eq_(res[0], 0) - eq_(res[1], addrconv.ipv6.text_to_bin('::')) - - res = struct.unpack(icmpv6.nd_option_tla._PACK_STR, - six.binary_type(buf[24:])) - - eq_(res[0], icmpv6.ND_OPTION_TLA) - eq_(res[1], len(icmpv6.nd_option_tla()) // 8) - eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - -class Test_icmpv6_router_solicit(unittest.TestCase): - type_ = 133 - code = 0 - csum = 0x97d9 - res = 0 - nd_type = 1 - nd_length = 1 - nd_hw_src = '12:2d:a5:6d:bc:0f' - data = b'\x00\x00\x00\x00\x01\x01\x12\x2d\xa5\x6d\xbc\x0f' - buf = b'\x85\x00\x97\xd9' - src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' - dst_ipv6 = '3ffe:501:0:1001::2' - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - rs = icmpv6.nd_router_solicit(self.res) - eq_(rs.res, self.res) - eq_(rs.option, None) - - def _test_parser(self, data=None): - buf = self.buf + (data or b'') - msg, n, _ = icmpv6.icmpv6.parser(buf) - - eq_(msg.type_, self.type_) - eq_(msg.code, self.code) - eq_(msg.csum, self.csum) - if data is not None: - eq_(msg.data.res, self.res) - eq_(n, None) - if data: - rs = msg.data.option - eq_(rs.length, self.nd_length) - eq_(rs.hw_src, self.nd_hw_src) - eq_(rs.data, None) - - def test_parser_without_data(self): - self._test_parser() - - def test_parser_with_data(self): - self._test_parser(self.data) - - def test_serialize_without_data(self): - rs = icmpv6.nd_router_solicit(self.res) - prev = ipv6(6, 0, 0, 8, 64, 255, self.src_ipv6, self.dst_ipv6) - rs_csum = icmpv6_csum(prev, self.buf) - - icmp = icmpv6.icmpv6(self.type_, self.code, 0, rs) - buf = six.binary_type(icmp.serialize(bytearray(), prev)) - - (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) - res = struct.unpack_from(rs._PACK_STR, buf, icmp._MIN_LEN) - data = buf[(icmp._MIN_LEN + rs._MIN_LEN):] - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, rs_csum) - eq_(res[0], self.res) - eq_(data, b'') - - def test_serialize_with_data(self): - nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) - rs = icmpv6.nd_router_solicit(self.res, nd_opt) - prev = ipv6(6, 0, 0, 16, 64, 255, self.src_ipv6, self.dst_ipv6) - rs_csum = icmpv6_csum(prev, self.buf + self.data) - - icmp = icmpv6.icmpv6(self.type_, self.code, 0, rs) - buf = six.binary_type(icmp.serialize(bytearray(), prev)) - - (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) - res = struct.unpack_from(rs._PACK_STR, buf, icmp._MIN_LEN) - (nd_type, nd_length, nd_hw_src) = struct.unpack_from( - nd_opt._PACK_STR, buf, icmp._MIN_LEN + rs._MIN_LEN) - data = buf[(icmp._MIN_LEN + rs._MIN_LEN + 8):] - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, rs_csum) - eq_(res[0], self.res) - eq_(nd_type, self.nd_type) - eq_(nd_length, self.nd_length) - eq_(nd_hw_src, addrconv.mac.text_to_bin(self.nd_hw_src)) - - def test_to_string(self): - nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) - rs = icmpv6.nd_router_solicit(self.res, nd_opt) - ic = icmpv6.icmpv6(self.type_, self.code, self.csum, rs) - - nd_opt_values = {'length': self.nd_length, - 'hw_src': self.nd_hw_src, - 'data': None} - _nd_opt_str = ','.join(['%s=%s' % (k, repr(nd_opt_values[k])) - for k, v in inspect.getmembers(nd_opt) - if k in nd_opt_values]) - nd_opt_str = '%s(%s)' % (icmpv6.nd_option_sla.__name__, _nd_opt_str) - - rs_values = {'res': repr(rs.res), - 'option': nd_opt_str} - _rs_str = ','.join(['%s=%s' % (k, rs_values[k]) - for k, v in inspect.getmembers(rs) - if k in rs_values]) - rs_str = '%s(%s)' % (icmpv6.nd_router_solicit.__name__, _rs_str) - - icmp_values = {'type_': repr(self.type_), - 'code': repr(self.code), - 'csum': repr(self.csum), - 'data': rs_str} - _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) - for k, v in inspect.getmembers(ic) - if k in icmp_values]) - ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) - - eq_(str(ic), ic_str) - eq_(repr(ic), ic_str) - - def test_default_args(self): - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_ROUTER_SOLICIT, data=icmpv6.nd_router_solicit()) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_ROUTER_SOLICIT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_router_solicit._PACK_STR, - six.binary_type(buf[4:])) - - eq_(res[0], 0) - - # with nd_option_sla - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_ROUTER_SOLICIT, - data=icmpv6.nd_router_solicit( - option=icmpv6.nd_option_sla())) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_ROUTER_SOLICIT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_router_solicit._PACK_STR, - six.binary_type(buf[4:8])) - - eq_(res[0], 0) - - res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, - six.binary_type(buf[8:])) - - eq_(res[0], icmpv6.ND_OPTION_SLA) - eq_(res[1], len(icmpv6.nd_option_sla()) // 8) - eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - def test_json(self): - nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) - rs = icmpv6.nd_router_solicit(self.res, nd_opt) - ic1 = icmpv6.icmpv6(self.type_, self.code, self.csum, rs) - jsondict = ic1.to_jsondict() - ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) - eq_(str(ic1), str(ic2)) - - -class Test_icmpv6_router_advert(unittest.TestCase): - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_default_args(self): - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_ROUTER_ADVERT, data=icmpv6.nd_router_advert()) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_ROUTER_ADVERT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_router_advert._PACK_STR, - six.binary_type(buf[4:])) - - eq_(res[0], 0) - eq_(res[1], 0) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 0) - - # with nd_option_sla - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_ROUTER_ADVERT, - data=icmpv6.nd_router_advert( - options=[icmpv6.nd_option_sla()])) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_ROUTER_ADVERT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_router_advert._PACK_STR, - six.binary_type(buf[4:16])) - - eq_(res[0], 0) - eq_(res[1], 0) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 0) - - res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, - six.binary_type(buf[16:])) - - eq_(res[0], icmpv6.ND_OPTION_SLA) - eq_(res[1], len(icmpv6.nd_option_sla()) // 8) - eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - # with nd_option_pi - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_ROUTER_ADVERT, - data=icmpv6.nd_router_advert( - options=[icmpv6.nd_option_pi()])) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_ROUTER_ADVERT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_router_advert._PACK_STR, - six.binary_type(buf[4:16])) - - eq_(res[0], 0) - eq_(res[1], 0) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 0) - - res = struct.unpack(icmpv6.nd_option_pi._PACK_STR, - six.binary_type(buf[16:])) - - eq_(res[0], icmpv6.ND_OPTION_PI) - eq_(res[1], 4) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 0) - eq_(res[5], 0) - eq_(res[6], 0) - eq_(res[7], addrconv.ipv6.text_to_bin('::')) - - # with nd_option_sla and nd_option_pi - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_ROUTER_ADVERT, - data=icmpv6.nd_router_advert( - options=[icmpv6.nd_option_sla(), icmpv6.nd_option_pi()])) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_ROUTER_ADVERT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_router_advert._PACK_STR, - six.binary_type(buf[4:16])) - - eq_(res[0], 0) - eq_(res[1], 0) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 0) - - res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, - six.binary_type(buf[16:24])) - - eq_(res[0], icmpv6.ND_OPTION_SLA) - eq_(res[1], len(icmpv6.nd_option_sla()) // 8) - eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - res = struct.unpack(icmpv6.nd_option_pi._PACK_STR, - six.binary_type(buf[24:])) - - eq_(res[0], icmpv6.ND_OPTION_PI) - eq_(res[1], len(icmpv6.nd_option_pi()) // 8) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 0) - eq_(res[5], 0) - eq_(res[6], 0) - eq_(res[7], addrconv.ipv6.text_to_bin('::')) - - def test_json(self): - ic1 = icmpv6.icmpv6( - type_=icmpv6.ND_ROUTER_ADVERT, - data=icmpv6.nd_router_advert( - options=[icmpv6.nd_option_sla(), icmpv6.nd_option_pi()])) - jsondict = ic1.to_jsondict() - ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) - eq_(str(ic1), str(ic2)) - - -class Test_icmpv6_nd_option_la(unittest.TestCase): - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_default_args(self): - la = icmpv6.nd_option_sla() - buf = la.serialize() - res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, six.binary_type(buf)) - - eq_(res[0], icmpv6.ND_OPTION_SLA) - eq_(res[1], len(icmpv6.nd_option_sla()) // 8) - eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - # with nd_neighbor - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_NEIGHBOR_ADVERT, - data=icmpv6.nd_neighbor( - option=icmpv6.nd_option_tla())) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_NEIGHBOR_ADVERT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_neighbor._PACK_STR, - six.binary_type(buf[4:24])) - - eq_(res[0], 0) - eq_(res[1], addrconv.ipv6.text_to_bin('::')) - - res = struct.unpack(icmpv6.nd_option_tla._PACK_STR, - six.binary_type(buf[24:])) - - eq_(res[0], icmpv6.ND_OPTION_TLA) - eq_(res[1], len(icmpv6.nd_option_tla()) // 8) - eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - # with nd_router_solicit - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_ROUTER_SOLICIT, - data=icmpv6.nd_router_solicit( - option=icmpv6.nd_option_sla())) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_ROUTER_SOLICIT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_router_solicit._PACK_STR, - six.binary_type(buf[4:8])) - - eq_(res[0], 0) - - res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, - six.binary_type(buf[8:])) - - eq_(res[0], icmpv6.ND_OPTION_SLA) - eq_(res[1], len(icmpv6.nd_option_sla()) // 8) - eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) - - -class Test_icmpv6_nd_option_pi(unittest.TestCase): - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_default_args(self): - pi = icmpv6.nd_option_pi() - buf = pi.serialize() - res = struct.unpack(icmpv6.nd_option_pi._PACK_STR, six.binary_type(buf)) - - eq_(res[0], icmpv6.ND_OPTION_PI) - eq_(res[1], len(icmpv6.nd_option_pi()) // 8) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 0) - eq_(res[5], 0) - eq_(res[6], 0) - eq_(res[7], addrconv.ipv6.text_to_bin('::')) - - # with nd_router_advert - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.ND_ROUTER_ADVERT, - data=icmpv6.nd_router_advert( - options=[icmpv6.nd_option_pi()])) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.ND_ROUTER_ADVERT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.nd_router_advert._PACK_STR, - six.binary_type(buf[4:16])) - - eq_(res[0], 0) - eq_(res[1], 0) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 0) - - res = struct.unpack(icmpv6.nd_option_pi._PACK_STR, - six.binary_type(buf[16:])) - - eq_(res[0], icmpv6.ND_OPTION_PI) - eq_(res[1], 4) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 0) - eq_(res[5], 0) - eq_(res[6], 0) - eq_(res[7], addrconv.ipv6.text_to_bin('::')) - - -class Test_icmpv6_membership_query(unittest.TestCase): - type_ = 130 - code = 0 - csum = 0xb5a4 - maxresp = 10000 - address = 'ff08::1' - buf = b'\x82\x00\xb5\xa4\x27\x10\x00\x00' \ - + b'\xff\x08\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - mld = icmpv6.mld(self.maxresp, self.address) - eq_(mld.maxresp, self.maxresp) - eq_(mld.address, self.address) - - def test_parser(self): - msg, n, _ = icmpv6.icmpv6.parser(self.buf) - - eq_(msg.type_, self.type_) - eq_(msg.code, self.code) - eq_(msg.csum, self.csum) - eq_(msg.data.maxresp, self.maxresp) - eq_(msg.data.address, self.address) - eq_(n, None) - - def test_serialize(self): - src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' - dst_ipv6 = '3ffe:501:0:1001::2' - prev = ipv6(6, 0, 0, len(self.buf), 64, 255, src_ipv6, dst_ipv6) - mld_csum = icmpv6_csum(prev, self.buf) - - mld = icmpv6.mld(self.maxresp, self.address) - icmp = icmpv6.icmpv6(self.type_, self.code, 0, mld) - buf = six.binary_type(icmp.serialize(bytearray(), prev)) - - (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) - (maxresp, address) = struct.unpack_from( - mld._PACK_STR, buf, icmp._MIN_LEN) - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, mld_csum) - eq_(maxresp, self.maxresp) - eq_(address, addrconv.ipv6.text_to_bin(self.address)) - - def test_to_string(self): - ml = icmpv6.mld(self.maxresp, self.address) - ic = icmpv6.icmpv6(self.type_, self.code, self.csum, ml) - - mld_values = {'maxresp': self.maxresp, - 'address': self.address} - _mld_str = ','.join(['%s=%s' % (k, repr(mld_values[k])) - for k, v in inspect.getmembers(ml) - if k in mld_values]) - mld_str = '%s(%s)' % (icmpv6.mld.__name__, _mld_str) - - icmp_values = {'type_': repr(self.type_), - 'code': repr(self.code), - 'csum': repr(self.csum), - 'data': mld_str} - _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) - for k, v in inspect.getmembers(ic) - if k in icmp_values]) - ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) - - eq_(str(ic), ic_str) - eq_(repr(ic), ic_str) - - def test_default_args(self): - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.MLD_LISTENER_QUERY, data=icmpv6.mld()) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.MLD_LISTENER_QUERY) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.mld._PACK_STR, six.binary_type(buf[4:])) - - eq_(res[0], 0) - eq_(res[1], addrconv.ipv6.text_to_bin('::')) - - def test_json(self): - ic1 = icmpv6.icmpv6( - type_=icmpv6.MLD_LISTENER_QUERY, - data=icmpv6.mld()) - jsondict = ic1.to_jsondict() - ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) - eq_(str(ic1), str(ic2)) - - -class Test_icmpv6_membership_report(Test_icmpv6_membership_query): - type_ = 131 - code = 0 - csum = 0xb4a4 - maxresp = 10000 - address = 'ff08::1' - buf = b'\x83\x00\xb4\xa4\x27\x10\x00\x00' \ - + b'\xff\x08\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' - - def test_json(self): - ic1 = icmpv6.icmpv6( - type_=icmpv6.MLD_LISTENER_REPOR, - data=icmpv6.mld()) - jsondict = ic1.to_jsondict() - ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) - eq_(str(ic1), str(ic2)) - - -class Test_icmpv6_membership_done(Test_icmpv6_membership_query): - type_ = 132 - code = 0 - csum = 0xb3a4 - maxresp = 10000 - address = 'ff08::1' - buf = b'\x84\x00\xb3\xa4\x27\x10\x00\x00' \ - + b'\xff\x08\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' - - def test_json(self): - ic1 = icmpv6.icmpv6( - type_=icmpv6.MLD_LISTENER_DONE, - data=icmpv6.mld()) - jsondict = ic1.to_jsondict() - ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) - eq_(str(ic1), str(ic2)) - - -class Test_mldv2_query(unittest.TestCase): - type_ = 130 - code = 0 - csum = 0xb5a4 - maxresp = 10000 - address = 'ff08::1' - s_flg = 0 - qrv = 2 - s_qrv = s_flg << 3 | qrv - qqic = 10 - num = 0 - srcs = [] - - mld = icmpv6.mldv2_query( - maxresp, address, s_flg, qrv, qqic, num, srcs) - - buf = b'\x82\x00\xb5\xa4\x27\x10\x00\x00' \ - + b'\xff\x08\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ - + b'\x02\x0a\x00\x00' - - def setUp(self): - pass - - def setUp_with_srcs(self): - self.num = 2 - self.srcs = ['ff80::1', 'ff80::2'] - self.mld = icmpv6.mldv2_query( - self.maxresp, self.address, self.s_flg, self.qrv, self.qqic, - self.num, self.srcs) - self.buf = b'\x82\x00\xb5\xa4\x27\x10\x00\x00' \ - + b'\xff\x08\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ - + b'\x02\x0a\x00\x02' \ - + b'\xff\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ - + b'\xff\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x02' - - def tearDown(self): - pass - - def find_protocol(self, pkt, name): - for p in pkt.protocols: - if p.protocol_name == name: - return p - - def test_init(self): - eq_(self.mld.maxresp, self.maxresp) - eq_(self.mld.address, self.address) - eq_(self.mld.s_flg, self.s_flg) - eq_(self.mld.qrv, self.qrv) - eq_(self.mld.qqic, self.qqic) - eq_(self.mld.num, self.num) - eq_(self.mld.srcs, self.srcs) - - def test_init_with_srcs(self): - self.setUp_with_srcs() - self.test_init() - - def test_parser(self): - msg, n, _ = icmpv6.icmpv6.parser(self.buf) - - eq_(msg.type_, self.type_) - eq_(msg.code, self.code) - eq_(msg.csum, self.csum) - eq_(msg.data.maxresp, self.maxresp) - eq_(msg.data.address, self.address) - eq_(msg.data.s_flg, self.s_flg) - eq_(msg.data.qrv, self.qrv) - eq_(msg.data.qqic, self.qqic) - eq_(msg.data.num, self.num) - eq_(msg.data.srcs, self.srcs) - eq_(n, None) - - def test_parser_with_srcs(self): - self.setUp_with_srcs() - self.test_parser() - - def test_serialize(self): - src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' - dst_ipv6 = '3ffe:501:0:1001::2' - prev = ipv6(6, 0, 0, len(self.buf), 64, 255, src_ipv6, dst_ipv6) - mld_csum = icmpv6_csum(prev, self.buf) - - icmp = icmpv6.icmpv6(self.type_, self.code, 0, self.mld) - buf = icmp.serialize(bytearray(), prev) - - (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, - six.binary_type(buf)) - (maxresp, address, s_qrv, qqic, num) = struct.unpack_from( - self.mld._PACK_STR, six.binary_type(buf), icmp._MIN_LEN) - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, mld_csum) - eq_(maxresp, self.maxresp) - eq_(address, addrconv.ipv6.text_to_bin(self.address)) - s_flg = (s_qrv >> 3) & 0b1 - qrv = s_qrv & 0b111 - eq_(s_flg, self.s_flg) - eq_(qrv, self.qrv) - eq_(qqic, self.qqic) - eq_(num, self.num) - - def test_serialize_with_srcs(self): - self.setUp_with_srcs() - src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' - dst_ipv6 = '3ffe:501:0:1001::2' - prev = ipv6(6, 0, 0, len(self.buf), 64, 255, src_ipv6, dst_ipv6) - mld_csum = icmpv6_csum(prev, self.buf) - - icmp = icmpv6.icmpv6(self.type_, self.code, 0, self.mld) - buf = icmp.serialize(bytearray(), prev) - - (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, - six.binary_type(buf)) - (maxresp, address, s_qrv, qqic, num) = struct.unpack_from( - self.mld._PACK_STR, six.binary_type(buf), icmp._MIN_LEN) - (addr1, addr2) = struct.unpack_from( - '!16s16s', six.binary_type(buf), icmp._MIN_LEN + self.mld._MIN_LEN) - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, mld_csum) - eq_(maxresp, self.maxresp) - eq_(address, addrconv.ipv6.text_to_bin(self.address)) - s_flg = (s_qrv >> 3) & 0b1 - qrv = s_qrv & 0b111 - eq_(s_flg, self.s_flg) - eq_(qrv, self.qrv) - eq_(qqic, self.qqic) - eq_(num, self.num) - eq_(addr1, addrconv.ipv6.text_to_bin(self.srcs[0])) - eq_(addr2, addrconv.ipv6.text_to_bin(self.srcs[1])) - - def _build_mldv2_query(self): - e = ethernet(ethertype=ether.ETH_TYPE_IPV6) - i = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6(type_=icmpv6.MLD_LISTENER_QUERY, - data=self.mld) - p = e / i / ic - return p - - def test_build_mldv2_query(self): - p = self._build_mldv2_query() - - e = self.find_protocol(p, "ethernet") - ok_(e) - eq_(e.ethertype, ether.ETH_TYPE_IPV6) - - i = self.find_protocol(p, "ipv6") - ok_(i) - eq_(i.nxt, inet.IPPROTO_ICMPV6) - - ic = self.find_protocol(p, "icmpv6") - ok_(ic) - eq_(ic.type_, icmpv6.MLD_LISTENER_QUERY) - - eq_(ic.data.maxresp, self.maxresp) - eq_(ic.data.address, self.address) - eq_(ic.data.s_flg, self.s_flg) - eq_(ic.data.qrv, self.qrv) - eq_(ic.data.num, self.num) - eq_(ic.data.srcs, self.srcs) - - def test_build_mldv2_query_with_srcs(self): - self.setUp_with_srcs() - self.test_build_mldv2_query() - - def test_to_string(self): - ic = icmpv6.icmpv6(self.type_, self.code, self.csum, self.mld) - - mld_values = {'maxresp': self.maxresp, - 'address': self.address, - 's_flg': self.s_flg, - 'qrv': self.qrv, - 'qqic': self.qqic, - 'num': self.num, - 'srcs': self.srcs} - _mld_str = ','.join(['%s=%s' % (k, repr(mld_values[k])) - for k, v in inspect.getmembers(self.mld) - if k in mld_values]) - mld_str = '%s(%s)' % (icmpv6.mldv2_query.__name__, _mld_str) - - icmp_values = {'type_': repr(self.type_), - 'code': repr(self.code), - 'csum': repr(self.csum), - 'data': mld_str} - _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) - for k, v in inspect.getmembers(ic) - if k in icmp_values]) - ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) - - eq_(str(ic), ic_str) - eq_(repr(ic), ic_str) - - def test_to_string_with_srcs(self): - self.setUp_with_srcs() - self.test_to_string() - - @raises(Exception) - def test_num_larger_than_srcs(self): - self.srcs = ['ff80::1', 'ff80::2', 'ff80::3'] - self.num = len(self.srcs) + 1 - self.buf = pack(icmpv6.mldv2_query._PACK_STR, self.maxresp, - addrconv.ipv6.text_to_bin(self.address), - self.s_qrv, self.qqic, self.num) - for src in self.srcs: - self.buf += pack('16s', addrconv.ipv6.text_to_bin(src)) - self.mld = icmpv6.mldv2_query( - self.maxresp, self.address, self.s_flg, self.qrv, self.qqic, - self.num, self.srcs) - self.test_parser() - - @raises(Exception) - def test_num_smaller_than_srcs(self): - self.srcs = ['ff80::1', 'ff80::2', 'ff80::3'] - self.num = len(self.srcs) - 1 - self.buf = pack(icmpv6.mldv2_query._PACK_STR, self.maxresp, - addrconv.ipv6.text_to_bin(self.address), - self.s_qrv, self.qqic, self.num) - for src in self.srcs: - self.buf += pack('16s', addrconv.ipv6.text_to_bin(src)) - self.mld = icmpv6.mldv2_query( - self.maxresp, self.address, self.s_flg, self.qrv, self.qqic, - self.num, self.srcs) - self.test_parser() - - def test_default_args(self): - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.MLD_LISTENER_QUERY, data=icmpv6.mldv2_query()) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.MLD_LISTENER_QUERY) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.mldv2_query._PACK_STR, six.binary_type(buf[4:])) - - eq_(res[0], 0) - eq_(res[1], addrconv.ipv6.text_to_bin('::')) - eq_(res[2], 2) - eq_(res[3], 0) - eq_(res[4], 0) - - # srcs without num - srcs = ['ff80::1', 'ff80::2', 'ff80::3'] - que = icmpv6.mldv2_query(srcs=srcs) - buf = que.serialize() - res = struct.unpack_from( - icmpv6.mldv2_query._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0) - eq_(res[1], addrconv.ipv6.text_to_bin('::')) - eq_(res[2], 2) - eq_(res[3], 0) - eq_(res[4], len(srcs)) - - (src1, src2, src3) = struct.unpack_from( - '16s16s16s', six.binary_type(buf), icmpv6.mldv2_query._MIN_LEN) - - eq_(src1, addrconv.ipv6.text_to_bin(srcs[0])) - eq_(src2, addrconv.ipv6.text_to_bin(srcs[1])) - eq_(src3, addrconv.ipv6.text_to_bin(srcs[2])) - - def test_json(self): - jsondict = self.mld.to_jsondict() - mld = icmpv6.mldv2_query.from_jsondict(jsondict['mldv2_query']) - eq_(str(self.mld), str(mld)) - - def test_json_with_srcs(self): - self.setUp_with_srcs() - self.test_json() - - -class Test_mldv2_report(unittest.TestCase): - type_ = 143 - code = 0 - csum = 0xb5a4 - record_num = 0 - records = [] - - mld = icmpv6.mldv2_report(record_num, records) - - buf = b'\x8f\x00\xb5\xa4\x00\x00\x00\x00' - - def setUp(self): - pass - - def setUp_with_records(self): - self.record1 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 0, 0, 'ff00::1') - self.record2 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 0, 2, 'ff00::2', - ['fe80::1', 'fe80::2']) - self.record3 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 1, 0, 'ff00::3', [], b'abc\x00') - self.record4 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 2, 2, 'ff00::4', - ['fe80::1', 'fe80::2'], b'abcde\x00\x00\x00') - self.records = [self.record1, self.record2, self.record3, - self.record4] - self.record_num = len(self.records) - self.mld = icmpv6.mldv2_report(self.record_num, self.records) - self.buf = b'\x8f\x00\xb5\xa4\x00\x00\x00\x04' \ - + b'\x01\x00\x00\x00' \ - + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ - + b'\x01\x00\x00\x02' \ - + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x02' \ - + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ - + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x02' \ - + b'\x01\x01\x00\x00' \ - + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x03' \ - + b'\x61\x62\x63\x00' \ - + b'\x01\x02\x00\x02' \ - + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x04' \ - + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ - + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x02' \ - + b'\x61\x62\x63\x64\x65\x00\x00\x00' - - def tearDown(self): - pass - - def find_protocol(self, pkt, name): - for p in pkt.protocols: - if p.protocol_name == name: - return p - - def test_init(self): - eq_(self.mld.record_num, self.record_num) - eq_(self.mld.records, self.records) - - def test_init_with_records(self): - self.setUp_with_records() - self.test_init() - - def test_parser(self): - msg, n, _ = icmpv6.icmpv6.parser(self.buf) - - eq_(msg.type_, self.type_) - eq_(msg.code, self.code) - eq_(msg.csum, self.csum) - eq_(msg.data.record_num, self.record_num) - eq_(repr(msg.data.records), repr(self.records)) - - def test_parser_with_records(self): - self.setUp_with_records() - self.test_parser() - - def test_serialize(self): - src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' - dst_ipv6 = '3ffe:501:0:1001::2' - prev = ipv6(6, 0, 0, len(self.buf), 64, 255, src_ipv6, dst_ipv6) - mld_csum = icmpv6_csum(prev, self.buf) - - icmp = icmpv6.icmpv6(self.type_, self.code, 0, self.mld) - buf = icmp.serialize(bytearray(), prev) - - (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, - six.binary_type(buf)) - (record_num, ) = struct.unpack_from( - self.mld._PACK_STR, six.binary_type(buf), icmp._MIN_LEN) - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, mld_csum) - eq_(record_num, self.record_num) - - def test_serialize_with_records(self): - self.setUp_with_records() - src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' - dst_ipv6 = '3ffe:501:0:1001::2' - prev = ipv6(6, 0, 0, len(self.buf), 64, 255, src_ipv6, dst_ipv6) - mld_csum = icmpv6_csum(prev, self.buf) - - icmp = icmpv6.icmpv6(self.type_, self.code, 0, self.mld) - buf = six.binary_type(icmp.serialize(bytearray(), prev)) - - (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, - six.binary_type(buf)) - (record_num, ) = struct.unpack_from( - self.mld._PACK_STR, six.binary_type(buf), icmp._MIN_LEN) - offset = icmp._MIN_LEN + self.mld._MIN_LEN - rec1 = icmpv6.mldv2_report_group.parser(buf[offset:]) - offset += len(rec1) - rec2 = icmpv6.mldv2_report_group.parser(buf[offset:]) - offset += len(rec2) - rec3 = icmpv6.mldv2_report_group.parser(buf[offset:]) - offset += len(rec3) - rec4 = icmpv6.mldv2_report_group.parser(buf[offset:]) - - eq_(type_, self.type_) - eq_(code, self.code) - eq_(csum, mld_csum) - eq_(record_num, self.record_num) - eq_(repr(rec1), repr(self.record1)) - eq_(repr(rec2), repr(self.record2)) - eq_(repr(rec3), repr(self.record3)) - eq_(repr(rec4), repr(self.record4)) - - def _build_mldv2_report(self): - e = ethernet(ethertype=ether.ETH_TYPE_IPV6) - i = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6(type_=icmpv6.MLDV2_LISTENER_REPORT, - data=self.mld) - p = e / i / ic - return p - - def test_build_mldv2_report(self): - p = self._build_mldv2_report() - - e = self.find_protocol(p, "ethernet") - ok_(e) - eq_(e.ethertype, ether.ETH_TYPE_IPV6) - - i = self.find_protocol(p, "ipv6") - ok_(i) - eq_(i.nxt, inet.IPPROTO_ICMPV6) - - ic = self.find_protocol(p, "icmpv6") - ok_(ic) - eq_(ic.type_, icmpv6.MLDV2_LISTENER_REPORT) - - eq_(ic.data.record_num, self.record_num) - eq_(ic.data.records, self.records) - - def test_build_mldv2_report_with_records(self): - self.setUp_with_records() - self.test_build_mldv2_report() - - def test_to_string(self): - ic = icmpv6.icmpv6(self.type_, self.code, self.csum, self.mld) - - mld_values = {'record_num': self.record_num, - 'records': self.records} - _mld_str = ','.join(['%s=%s' % (k, repr(mld_values[k])) - for k, v in inspect.getmembers(self.mld) - if k in mld_values]) - mld_str = '%s(%s)' % (icmpv6.mldv2_report.__name__, _mld_str) - - icmp_values = {'type_': repr(self.type_), - 'code': repr(self.code), - 'csum': repr(self.csum), - 'data': mld_str} - _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) - for k, v in inspect.getmembers(ic) - if k in icmp_values]) - ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) - - eq_(str(ic), ic_str) - eq_(repr(ic), ic_str) - - def test_to_string_with_records(self): - self.setUp_with_records() - self.test_to_string() - - @raises(Exception) - def test_record_num_larger_than_records(self): - self.record1 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 0, 0, 'ff00::1') - self.record2 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 0, 2, 'ff00::2', - ['fe80::1', 'fe80::2']) - self.record3 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 1, 0, 'ff00::3', [], b'abc\x00') - self.record4 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 2, 2, 'ff00::4', - ['fe80::1', 'fe80::2'], b'abcde\x00\x00\x00') - self.records = [self.record1, self.record2, self.record3, - self.record4] - self.record_num = len(self.records) + 1 - self.buf = struct.pack( - icmpv6.mldv2_report._PACK_STR, self.record_num) - self.buf += self.record1.serialize() - self.buf += self.record2.serialize() - self.buf += self.record3.serialize() - self.buf += self.record4.serialize() - self.mld = icmpv6.mldv2_report(self.record_num, self.records) - self.test_parser() - - @raises(Exception) - def test_record_num_smaller_than_records(self): - self.record1 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 0, 0, 'ff00::1') - self.record2 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 0, 2, 'ff00::2', - ['fe80::1', 'fe80::2']) - self.record3 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 1, 0, 'ff00::3', [], b'abc\x00') - self.record4 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 2, 2, 'ff00::4', - ['fe80::1', 'fe80::2'], b'abcde\x00\x00\x00') - self.records = [self.record1, self.record2, self.record3, - self.record4] - self.record_num = len(self.records) - 1 - self.buf = struct.pack( - icmpv6.mldv2_report._PACK_STR, self.record_num) - self.buf += self.record1.serialize() - self.buf += self.record2.serialize() - self.buf += self.record3.serialize() - self.buf += self.record4.serialize() - self.mld = icmpv6.mldv2_report(self.record_num, self.records) - self.test_parser() - - def test_default_args(self): - prev = ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6( - type_=icmpv6.MLDV2_LISTENER_REPORT, data=icmpv6.mldv2_report()) - prev.serialize(ic, None) - buf = ic.serialize(bytearray(), prev) - res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) - - eq_(res[0], icmpv6.MLDV2_LISTENER_REPORT) - eq_(res[1], 0) - eq_(res[2], icmpv6_csum(prev, buf)) - - res = struct.unpack(icmpv6.mldv2_report._PACK_STR, six.binary_type(buf[4:])) - - eq_(res[0], 0) - - # records without record_num - record1 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 0, 0, 'ff00::1') - record2 = icmpv6.mldv2_report_group( - icmpv6.MODE_IS_INCLUDE, 0, 2, 'ff00::2', - ['fe80::1', 'fe80::2']) - records = [record1, record2] - rep = icmpv6.mldv2_report(records=records) - buf = rep.serialize() - res = struct.unpack_from( - icmpv6.mldv2_report._PACK_STR, six.binary_type(buf)) - - eq_(res[0], len(records)) - - res = struct.unpack_from( - icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf), - icmpv6.mldv2_report._MIN_LEN) - - eq_(res[0], icmpv6.MODE_IS_INCLUDE) - eq_(res[1], 0) - eq_(res[2], 0) - eq_(res[3], addrconv.ipv6.text_to_bin('ff00::1')) - - res = struct.unpack_from( - icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf), - icmpv6.mldv2_report._MIN_LEN + - icmpv6.mldv2_report_group._MIN_LEN) - - eq_(res[0], icmpv6.MODE_IS_INCLUDE) - eq_(res[1], 0) - eq_(res[2], 2) - eq_(res[3], addrconv.ipv6.text_to_bin('ff00::2')) - - res = struct.unpack_from( - '16s16s', six.binary_type(buf), - icmpv6.mldv2_report._MIN_LEN + - icmpv6.mldv2_report_group._MIN_LEN + - icmpv6.mldv2_report_group._MIN_LEN) - - eq_(res[0], addrconv.ipv6.text_to_bin('fe80::1')) - eq_(res[1], addrconv.ipv6.text_to_bin('fe80::2')) - - def test_json(self): - jsondict = self.mld.to_jsondict() - mld = icmpv6.mldv2_report.from_jsondict(jsondict['mldv2_report']) - eq_(str(self.mld), str(mld)) - - def test_json_with_records(self): - self.setUp_with_records() - self.test_json() - - -class Test_mldv2_report_group(unittest.TestCase): - type_ = icmpv6.MODE_IS_INCLUDE - aux_len = 0 - num = 0 - address = 'ff00::1' - srcs = [] - aux = None - mld = icmpv6.mldv2_report_group( - type_, aux_len, num, address, srcs, aux) - buf = b'\x01\x00\x00\x00' \ - + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' - - def setUp(self): - pass - - def setUp_with_srcs(self): - self.srcs = ['fe80::1', 'fe80::2', 'fe80::3'] - self.num = len(self.srcs) - self.mld = icmpv6.mldv2_report_group( - self.type_, self.aux_len, self.num, self.address, self.srcs, - self.aux) - self.buf = b'\x01\x00\x00\x03' \ - + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ - + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ - + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x02' \ - + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x03' - - def setUp_with_aux(self): - self.aux = b'\x01\x02\x03\x04\x05\x06\x07\x08' - self.aux_len = len(self.aux) // 4 - self.mld = icmpv6.mldv2_report_group( - self.type_, self.aux_len, self.num, self.address, self.srcs, - self.aux) - self.buf = b'\x01\x02\x00\x00' \ - + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ - + b'\x01\x02\x03\x04\x05\x06\x07\x08' - - def setUp_with_srcs_and_aux(self): - self.srcs = ['fe80::1', 'fe80::2', 'fe80::3'] - self.num = len(self.srcs) - self.aux = b'\x01\x02\x03\x04\x05\x06\x07\x08' - self.aux_len = len(self.aux) // 4 - self.mld = icmpv6.mldv2_report_group( - self.type_, self.aux_len, self.num, self.address, self.srcs, - self.aux) - self.buf = b'\x01\x02\x00\x03' \ - + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ - + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ - + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x02' \ - + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x03' \ - + b'\x01\x02\x03\x04\x05\x06\x07\x08' - - def tearDown(self): - pass - - def test_init(self): - eq_(self.mld.type_, self.type_) - eq_(self.mld.aux_len, self.aux_len) - eq_(self.mld.num, self.num) - eq_(self.mld.address, self.address) - eq_(self.mld.srcs, self.srcs) - eq_(self.mld.aux, self.aux) - - def test_init_with_srcs(self): - self.setUp_with_srcs() - self.test_init() - - def test_init_with_aux(self): - self.setUp_with_aux() - self.test_init() - - def test_init_with_srcs_and_aux(self): - self.setUp_with_srcs_and_aux() - self.test_init() - - def test_parser(self): - _res = icmpv6.mldv2_report_group.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - - eq_(res.type_, self.type_) - eq_(res.aux_len, self.aux_len) - eq_(res.num, self.num) - eq_(res.address, self.address) - eq_(res.srcs, self.srcs) - eq_(res.aux, self.aux) - - def test_parser_with_srcs(self): - self.setUp_with_srcs() - self.test_parser() - - def test_parser_with_aux(self): - self.setUp_with_aux() - self.test_parser() - - def test_parser_with_srcs_and_aux(self): - self.setUp_with_srcs_and_aux() - self.test_parser() - - def test_serialize(self): - buf = self.mld.serialize() - res = struct.unpack_from( - icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) - - eq_(res[0], self.type_) - eq_(res[1], self.aux_len) - eq_(res[2], self.num) - eq_(res[3], addrconv.ipv6.text_to_bin(self.address)) - - def test_serialize_with_srcs(self): - self.setUp_with_srcs() - buf = self.mld.serialize() - res = struct.unpack_from( - icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) - (src1, src2, src3) = struct.unpack_from( - '16s16s16s', six.binary_type(buf), icmpv6.mldv2_report_group._MIN_LEN) - eq_(res[0], self.type_) - eq_(res[1], self.aux_len) - eq_(res[2], self.num) - eq_(res[3], addrconv.ipv6.text_to_bin(self.address)) - eq_(src1, addrconv.ipv6.text_to_bin(self.srcs[0])) - eq_(src2, addrconv.ipv6.text_to_bin(self.srcs[1])) - eq_(src3, addrconv.ipv6.text_to_bin(self.srcs[2])) - - def test_serialize_with_aux(self): - self.setUp_with_aux() - buf = self.mld.serialize() - res = struct.unpack_from( - icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) - (aux, ) = struct.unpack_from( - '%ds' % (self.aux_len * 4), six.binary_type(buf), - icmpv6.mldv2_report_group._MIN_LEN) - eq_(res[0], self.type_) - eq_(res[1], self.aux_len) - eq_(res[2], self.num) - eq_(res[3], addrconv.ipv6.text_to_bin(self.address)) - eq_(aux, self.aux) - - def test_serialize_with_srcs_and_aux(self): - self.setUp_with_srcs_and_aux() - buf = self.mld.serialize() - res = struct.unpack_from( - icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) - (src1, src2, src3) = struct.unpack_from( - '16s16s16s', six.binary_type(buf), icmpv6.mldv2_report_group._MIN_LEN) - (aux, ) = struct.unpack_from( - '%ds' % (self.aux_len * 4), six.binary_type(buf), - icmpv6.mldv2_report_group._MIN_LEN + 16 * 3) - eq_(res[0], self.type_) - eq_(res[1], self.aux_len) - eq_(res[2], self.num) - eq_(res[3], addrconv.ipv6.text_to_bin(self.address)) - eq_(src1, addrconv.ipv6.text_to_bin(self.srcs[0])) - eq_(src2, addrconv.ipv6.text_to_bin(self.srcs[1])) - eq_(src3, addrconv.ipv6.text_to_bin(self.srcs[2])) - eq_(aux, self.aux) - - def test_to_string(self): - igmp_values = {'type_': repr(self.type_), - 'aux_len': repr(self.aux_len), - 'num': repr(self.num), - 'address': repr(self.address), - 'srcs': repr(self.srcs), - 'aux': repr(self.aux)} - _g_str = ','.join(['%s=%s' % (k, igmp_values[k]) - for k, v in inspect.getmembers(self.mld) - if k in igmp_values]) - g_str = '%s(%s)' % (icmpv6.mldv2_report_group.__name__, _g_str) - - eq_(str(self.mld), g_str) - eq_(repr(self.mld), g_str) - - def test_to_string_with_srcs(self): - self.setUp_with_srcs() - self.test_to_string() - - def test_to_string_with_aux(self): - self.setUp_with_aux() - self.test_to_string() - - def test_to_string_with_srcs_and_aux(self): - self.setUp_with_srcs_and_aux() - self.test_to_string() - - def test_len(self): - eq_(len(self.mld), 20) - - def test_len_with_srcs(self): - self.setUp_with_srcs() - eq_(len(self.mld), 68) - - def test_len_with_aux(self): - self.setUp_with_aux() - eq_(len(self.mld), 28) - - def test_len_with_srcs_and_aux(self): - self.setUp_with_srcs_and_aux() - eq_(len(self.mld), 76) - - @raises - def test_num_larger_than_srcs(self): - self.srcs = ['fe80::1', 'fe80::2', 'fe80::3'] - self.num = len(self.srcs) + 1 - self.buf = struct.pack( - icmpv6.mldv2_report_group._PACK_STR, self.type_, self.aux_len, - self.num, addrconv.ipv6.text_to_bin(self.address)) - for src in self.srcs: - self.buf += pack('16s', addrconv.ipv6.text_to_bin(src)) - self.mld = icmpv6.mldv2_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - self.test_parser() - - @raises - def test_num_smaller_than_srcs(self): - self.srcs = ['fe80::1', 'fe80::2', 'fe80::3'] - self.num = len(self.srcs) - 1 - self.buf = struct.pack( - icmpv6.mldv2_report_group._PACK_STR, self.type_, self.aux_len, - self.num, addrconv.ipv6.text_to_bin(self.address)) - for src in self.srcs: - self.buf += pack('16s', addrconv.ipv6.text_to_bin(src)) - self.mld = icmpv6.mldv2_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - self.test_parser() - - @raises - def test_aux_len_larger_than_aux(self): - self.aux = b'\x01\x02\x03\x04\x05\x06\x07\x08' - self.aux_len = len(self.aux) // 4 + 1 - self.buf = struct.pack( - icmpv6.mldv2_report_group._PACK_STR, self.type_, self.aux_len, - self.num, addrconv.ipv6.text_to_bin(self.address)) - self.buf += self.aux - self.mld = icmpv6.mldv2_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - self.test_parser() - - @raises - def test_aux_len_smaller_than_aux(self): - self.aux = b'\x01\x02\x03\x04\x05\x06\x07\x08' - self.aux_len = len(self.aux) // 4 - 1 - self.buf = struct.pack( - icmpv6.mldv2_report_group._PACK_STR, self.type_, self.aux_len, - self.num, addrconv.ipv6.text_to_bin(self.address)) - self.buf += self.aux - self.mld = icmpv6.mldv2_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - self.test_parser() - - def test_default_args(self): - rep = icmpv6.mldv2_report_group() - buf = rep.serialize() - res = struct.unpack_from( - icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0) - eq_(res[1], 0) - eq_(res[2], 0) - eq_(res[3], addrconv.ipv6.text_to_bin('::')) - - # srcs without num - srcs = ['fe80::1', 'fe80::2', 'fe80::3'] - rep = icmpv6.mldv2_report_group(srcs=srcs) - buf = rep.serialize() - LOG.info(repr(buf)) - res = struct.unpack_from( - icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0) - eq_(res[1], 0) - eq_(res[2], len(srcs)) - eq_(res[3], addrconv.ipv6.text_to_bin('::')) - - (src1, src2, src3) = struct.unpack_from( - '16s16s16s', six.binary_type(buf), icmpv6.mldv2_report_group._MIN_LEN) - - eq_(src1, addrconv.ipv6.text_to_bin(srcs[0])) - eq_(src2, addrconv.ipv6.text_to_bin(srcs[1])) - eq_(src3, addrconv.ipv6.text_to_bin(srcs[2])) - - # aux without aux_len - rep = icmpv6.mldv2_report_group(aux=b'\x01\x02\x03') - buf = rep.serialize() - res = struct.unpack_from( - icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0) - eq_(res[1], 1) - eq_(res[2], 0) - eq_(res[3], addrconv.ipv6.text_to_bin('::')) - eq_(buf[icmpv6.mldv2_report_group._MIN_LEN:], b'\x01\x02\x03\x00') - - def test_json(self): - jsondict = self.mld.to_jsondict() - mld = icmpv6.mldv2_report_group.from_jsondict( - jsondict['mldv2_report_group']) - eq_(str(self.mld), str(mld)) - - def test_json_with_srcs(self): - self.setUp_with_srcs() - self.test_json() - - def test_json_with_aux(self): - self.setUp_with_aux() - self.test_json() - - def test_json_with_srcs_and_aux(self): - self.setUp_with_srcs_and_aux() - self.test_json() diff --git a/ryu/tests/unit/packet/test_igmp.py b/ryu/tests/unit/packet/test_igmp.py deleted file mode 100644 index 9813450d..00000000 --- a/ryu/tests/unit/packet/test_igmp.py +++ /dev/null @@ -1,997 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import inspect -import logging -import six - -from struct import pack, unpack_from, pack_into -from nose.tools import ok_, eq_, raises -from ryu.ofproto import ether -from ryu.ofproto import inet -from ryu.lib.packet.ethernet import ethernet -from ryu.lib.packet.ipv4 import ipv4 -from ryu.lib.packet.packet import Packet -from ryu.lib.packet.packet_utils import checksum -from ryu.lib import addrconv -from ryu.lib.packet.igmp import igmp -from ryu.lib.packet.igmp import igmpv3_query -from ryu.lib.packet.igmp import igmpv3_report -from ryu.lib.packet.igmp import igmpv3_report_group -from ryu.lib.packet.igmp import IGMP_TYPE_QUERY -from ryu.lib.packet.igmp import IGMP_TYPE_REPORT_V3 -from ryu.lib.packet.igmp import MODE_IS_INCLUDE - -LOG = logging.getLogger(__name__) - - -class Test_igmp(unittest.TestCase): - """ Test case for Internet Group Management Protocol - """ - def setUp(self): - self.msgtype = IGMP_TYPE_QUERY - self.maxresp = 100 - self.csum = 0 - self.address = '225.0.0.1' - - self.buf = pack(igmp._PACK_STR, self.msgtype, self.maxresp, - self.csum, - addrconv.ipv4.text_to_bin(self.address)) - - self.g = igmp(self.msgtype, self.maxresp, self.csum, - self.address) - - def tearDown(self): - pass - - def find_protocol(self, pkt, name): - for p in pkt.protocols: - if p.protocol_name == name: - return p - - def test_init(self): - eq_(self.msgtype, self.g.msgtype) - eq_(self.maxresp, self.g.maxresp) - eq_(self.csum, self.g.csum) - eq_(self.address, self.g.address) - - def test_parser(self): - _res = self.g.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - - eq_(res.msgtype, self.msgtype) - eq_(res.maxresp, self.maxresp) - eq_(res.csum, self.csum) - eq_(res.address, self.address) - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.g.serialize(data, prev) - - res = unpack_from(igmp._PACK_STR, six.binary_type(buf)) - - eq_(res[0], self.msgtype) - eq_(res[1], self.maxresp) - eq_(res[2], checksum(self.buf)) - eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) - - def _build_igmp(self): - dl_dst = '11:22:33:44:55:66' - dl_src = 'aa:bb:cc:dd:ee:ff' - dl_type = ether.ETH_TYPE_IP - e = ethernet(dl_dst, dl_src, dl_type) - - total_length = 20 + igmp._MIN_LEN - nw_proto = inet.IPPROTO_IGMP - nw_dst = '11.22.33.44' - nw_src = '55.66.77.88' - i = ipv4(total_length=total_length, src=nw_src, dst=nw_dst, - proto=nw_proto) - - p = Packet() - - p.add_protocol(e) - p.add_protocol(i) - p.add_protocol(self.g) - p.serialize() - return p - - def test_build_igmp(self): - p = self._build_igmp() - - e = self.find_protocol(p, "ethernet") - ok_(e) - eq_(e.ethertype, ether.ETH_TYPE_IP) - - i = self.find_protocol(p, "ipv4") - ok_(i) - eq_(i.proto, inet.IPPROTO_IGMP) - - g = self.find_protocol(p, "igmp") - ok_(g) - - eq_(g.msgtype, self.msgtype) - eq_(g.maxresp, self.maxresp) - eq_(g.csum, checksum(self.buf)) - eq_(g.address, self.address) - - def test_to_string(self): - igmp_values = {'msgtype': repr(self.msgtype), - 'maxresp': repr(self.maxresp), - 'csum': repr(self.csum), - 'address': repr(self.address)} - _g_str = ','.join(['%s=%s' % (k, igmp_values[k]) - for k, v in inspect.getmembers(self.g) - if k in igmp_values]) - g_str = '%s(%s)' % (igmp.__name__, _g_str) - - eq_(str(self.g), g_str) - eq_(repr(self.g), g_str) - - @raises(Exception) - def test_malformed_igmp(self): - m_short_buf = self.buf[1:igmp._MIN_LEN] - igmp.parser(m_short_buf) - - def test_default_args(self): - ig = igmp() - buf = ig.serialize(bytearray(), None) - res = unpack_from(igmp._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0x11) - eq_(res[1], 0) - eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) - - def test_json(self): - jsondict = self.g.to_jsondict() - g = igmp.from_jsondict(jsondict['igmp']) - eq_(str(self.g), str(g)) - - -class Test_igmpv3_query(unittest.TestCase): - """ Test case for Internet Group Management Protocol v3 - Membership Query Message""" - def setUp(self): - self.msgtype = IGMP_TYPE_QUERY - self.maxresp = 100 - self.csum = 0 - self.address = '225.0.0.1' - self.s_flg = 0 - self.qrv = 2 - self.qqic = 10 - self.num = 0 - self.srcs = [] - - self.s_qrv = self.s_flg << 3 | self.qrv - - self.buf = pack(igmpv3_query._PACK_STR, self.msgtype, - self.maxresp, self.csum, - addrconv.ipv4.text_to_bin(self.address), - self.s_qrv, self.qqic, self.num) - - self.g = igmpv3_query( - self.msgtype, self.maxresp, self.csum, self.address, - self.s_flg, self.qrv, self.qqic, self.num, self.srcs) - - def setUp_with_srcs(self): - self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] - self.num = len(self.srcs) - self.buf = pack(igmpv3_query._PACK_STR, self.msgtype, - self.maxresp, self.csum, - addrconv.ipv4.text_to_bin(self.address), - self.s_qrv, self.qqic, self.num) - for src in self.srcs: - self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) - self.g = igmpv3_query( - self.msgtype, self.maxresp, self.csum, self.address, - self.s_flg, self.qrv, self.qqic, self.num, self.srcs) - - def tearDown(self): - pass - - def find_protocol(self, pkt, name): - for p in pkt.protocols: - if p.protocol_name == name: - return p - - def test_init(self): - eq_(self.msgtype, self.g.msgtype) - eq_(self.maxresp, self.g.maxresp) - eq_(self.csum, self.g.csum) - eq_(self.address, self.g.address) - eq_(self.s_flg, self.g.s_flg) - eq_(self.qrv, self.g.qrv) - eq_(self.qqic, self.g.qqic) - eq_(self.num, self.g.num) - eq_(self.srcs, self.g.srcs) - - def test_init_with_srcs(self): - self.setUp_with_srcs() - self.test_init() - - def test_parser(self): - _res = self.g.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - - eq_(res.msgtype, self.msgtype) - eq_(res.maxresp, self.maxresp) - eq_(res.csum, self.csum) - eq_(res.address, self.address) - eq_(res.s_flg, self.s_flg) - eq_(res.qrv, self.qrv) - eq_(res.qqic, self.qqic) - eq_(res.num, self.num) - eq_(res.srcs, self.srcs) - - def test_parser_with_srcs(self): - self.setUp_with_srcs() - self.test_parser() - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.g.serialize(data, prev) - - res = unpack_from(igmpv3_query._PACK_STR, six.binary_type(buf)) - - eq_(res[0], self.msgtype) - eq_(res[1], self.maxresp) - eq_(res[2], checksum(self.buf)) - eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) - eq_(res[4], self.s_qrv) - eq_(res[5], self.qqic) - eq_(res[6], self.num) - - def test_serialize_with_srcs(self): - self.setUp_with_srcs() - data = bytearray() - prev = None - buf = self.g.serialize(data, prev) - - res = unpack_from(igmpv3_query._PACK_STR, six.binary_type(buf)) - (src1, src2, src3) = unpack_from('4s4s4s', six.binary_type(buf), - igmpv3_query._MIN_LEN) - - eq_(res[0], self.msgtype) - eq_(res[1], self.maxresp) - eq_(res[2], checksum(self.buf)) - eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) - eq_(res[4], self.s_qrv) - eq_(res[5], self.qqic) - eq_(res[6], self.num) - eq_(src1, addrconv.ipv4.text_to_bin(self.srcs[0])) - eq_(src2, addrconv.ipv4.text_to_bin(self.srcs[1])) - eq_(src3, addrconv.ipv4.text_to_bin(self.srcs[2])) - - def _build_igmp(self): - dl_dst = '11:22:33:44:55:66' - dl_src = 'aa:bb:cc:dd:ee:ff' - dl_type = ether.ETH_TYPE_IP - e = ethernet(dl_dst, dl_src, dl_type) - - total_length = len(ipv4()) + len(self.g) - nw_proto = inet.IPPROTO_IGMP - nw_dst = '11.22.33.44' - nw_src = '55.66.77.88' - i = ipv4(total_length=total_length, src=nw_src, dst=nw_dst, - proto=nw_proto, ttl=1) - - p = Packet() - - p.add_protocol(e) - p.add_protocol(i) - p.add_protocol(self.g) - p.serialize() - return p - - def test_build_igmp(self): - p = self._build_igmp() - - e = self.find_protocol(p, "ethernet") - ok_(e) - eq_(e.ethertype, ether.ETH_TYPE_IP) - - i = self.find_protocol(p, "ipv4") - ok_(i) - eq_(i.proto, inet.IPPROTO_IGMP) - - g = self.find_protocol(p, "igmpv3_query") - ok_(g) - - eq_(g.msgtype, self.msgtype) - eq_(g.maxresp, self.maxresp) - eq_(g.csum, checksum(self.buf)) - eq_(g.address, self.address) - eq_(g.s_flg, self.s_flg) - eq_(g.qrv, self.qrv) - eq_(g.qqic, self.qqic) - eq_(g.num, self.num) - eq_(g.srcs, self.srcs) - - def test_build_igmp_with_srcs(self): - self.setUp_with_srcs() - self.test_build_igmp() - - def test_to_string(self): - igmp_values = {'msgtype': repr(self.msgtype), - 'maxresp': repr(self.maxresp), - 'csum': repr(self.csum), - 'address': repr(self.address), - 's_flg': repr(self.s_flg), - 'qrv': repr(self.qrv), - 'qqic': repr(self.qqic), - 'num': repr(self.num), - 'srcs': repr(self.srcs)} - _g_str = ','.join(['%s=%s' % (k, igmp_values[k]) - for k, v in inspect.getmembers(self.g) - if k in igmp_values]) - g_str = '%s(%s)' % (igmpv3_query.__name__, _g_str) - - eq_(str(self.g), g_str) - eq_(repr(self.g), g_str) - - def test_to_string_with_srcs(self): - self.setUp_with_srcs() - self.test_to_string() - - @raises(Exception) - def test_num_larger_than_srcs(self): - self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] - self.num = len(self.srcs) + 1 - self.buf = pack(igmpv3_query._PACK_STR, self.msgtype, - self.maxresp, self.csum, - addrconv.ipv4.text_to_bin(self.address), - self.s_qrv, self.qqic, self.num) - for src in self.srcs: - self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) - self.g = igmpv3_query( - self.msgtype, self.maxresp, self.csum, self.address, - self.s_flg, self.qrv, self.qqic, self.num, self.srcs) - self.test_parser() - - @raises(Exception) - def test_num_smaller_than_srcs(self): - self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] - self.num = len(self.srcs) - 1 - self.buf = pack(igmpv3_query._PACK_STR, self.msgtype, - self.maxresp, self.csum, - addrconv.ipv4.text_to_bin(self.address), - self.s_qrv, self.qqic, self.num) - for src in self.srcs: - self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) - self.g = igmpv3_query( - self.msgtype, self.maxresp, self.csum, self.address, - self.s_flg, self.qrv, self.qqic, self.num, self.srcs) - self.test_parser() - - def test_default_args(self): - prev = ipv4(proto=inet.IPPROTO_IGMP) - g = igmpv3_query() - prev.serialize(g, None) - buf = g.serialize(bytearray(), prev) - res = unpack_from(igmpv3_query._PACK_STR, six.binary_type(buf)) - buf = bytearray(buf) - pack_into('!H', buf, 2, 0) - - eq_(res[0], IGMP_TYPE_QUERY) - eq_(res[1], 100) - eq_(res[2], checksum(buf)) - eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) - eq_(res[4], 2) - eq_(res[5], 0) - eq_(res[6], 0) - - # srcs without num - prev = ipv4(proto=inet.IPPROTO_IGMP) - srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] - g = igmpv3_query(srcs=srcs) - prev.serialize(g, None) - buf = g.serialize(bytearray(), prev) - res = unpack_from(igmpv3_query._PACK_STR, six.binary_type(buf)) - buf = bytearray(buf) - pack_into('!H', buf, 2, 0) - - eq_(res[0], IGMP_TYPE_QUERY) - eq_(res[1], 100) - eq_(res[2], checksum(buf)) - eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) - eq_(res[4], 2) - eq_(res[5], 0) - eq_(res[6], len(srcs)) - - res = unpack_from('4s4s4s', six.binary_type(buf), igmpv3_query._MIN_LEN) - - eq_(res[0], addrconv.ipv4.text_to_bin(srcs[0])) - eq_(res[1], addrconv.ipv4.text_to_bin(srcs[1])) - eq_(res[2], addrconv.ipv4.text_to_bin(srcs[2])) - - def test_json(self): - jsondict = self.g.to_jsondict() - g = igmpv3_query.from_jsondict(jsondict['igmpv3_query']) - eq_(str(self.g), str(g)) - - def test_json_with_srcs(self): - self.setUp_with_srcs() - self.test_json() - - -class Test_igmpv3_report(unittest.TestCase): - """ Test case for Internet Group Management Protocol v3 - Membership Report Message""" - def setUp(self): - self.msgtype = IGMP_TYPE_REPORT_V3 - self.csum = 0 - self.record_num = 0 - self.records = [] - - self.buf = pack(igmpv3_report._PACK_STR, self.msgtype, - self.csum, self.record_num) - - self.g = igmpv3_report( - self.msgtype, self.csum, self.record_num, self.records) - - def setUp_with_records(self): - self.record1 = igmpv3_report_group( - MODE_IS_INCLUDE, 0, 0, '225.0.0.1') - self.record2 = igmpv3_report_group( - MODE_IS_INCLUDE, 0, 2, '225.0.0.2', - ['172.16.10.10', '172.16.10.27']) - self.record3 = igmpv3_report_group( - MODE_IS_INCLUDE, 1, 0, '225.0.0.3', [], b'abc\x00') - self.record4 = igmpv3_report_group( - MODE_IS_INCLUDE, 2, 2, '225.0.0.4', - ['172.16.10.10', '172.16.10.27'], b'abcde\x00\x00\x00') - self.records = [self.record1, self.record2, self.record3, - self.record4] - self.record_num = len(self.records) - self.buf = pack(igmpv3_report._PACK_STR, self.msgtype, - self.csum, self.record_num) - self.buf += self.record1.serialize() - self.buf += self.record2.serialize() - self.buf += self.record3.serialize() - self.buf += self.record4.serialize() - self.g = igmpv3_report( - self.msgtype, self.csum, self.record_num, self.records) - - def tearDown(self): - pass - - def find_protocol(self, pkt, name): - for p in pkt.protocols: - if p.protocol_name == name: - return p - - def test_init(self): - eq_(self.msgtype, self.g.msgtype) - eq_(self.csum, self.g.csum) - eq_(self.record_num, self.g.record_num) - eq_(self.records, self.g.records) - - def test_init_with_records(self): - self.setUp_with_records() - self.test_init() - - def test_parser(self): - _res = self.g.parser(six.binary_type(self.buf)) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - - eq_(res.msgtype, self.msgtype) - eq_(res.csum, self.csum) - eq_(res.record_num, self.record_num) - eq_(repr(res.records), repr(self.records)) - - def test_parser_with_records(self): - self.setUp_with_records() - self.test_parser() - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.g.serialize(data, prev) - - res = unpack_from(igmpv3_report._PACK_STR, six.binary_type(buf)) - - eq_(res[0], self.msgtype) - eq_(res[1], checksum(self.buf)) - eq_(res[2], self.record_num) - - def test_serialize_with_records(self): - self.setUp_with_records() - data = bytearray() - prev = None - buf = six.binary_type(self.g.serialize(data, prev)) - - res = unpack_from(igmpv3_report._PACK_STR, buf) - offset = igmpv3_report._MIN_LEN - rec1 = igmpv3_report_group.parser(buf[offset:]) - offset += len(rec1) - rec2 = igmpv3_report_group.parser(buf[offset:]) - offset += len(rec2) - rec3 = igmpv3_report_group.parser(buf[offset:]) - offset += len(rec3) - rec4 = igmpv3_report_group.parser(buf[offset:]) - - eq_(res[0], self.msgtype) - eq_(res[1], checksum(self.buf)) - eq_(res[2], self.record_num) - eq_(repr(rec1), repr(self.record1)) - eq_(repr(rec2), repr(self.record2)) - eq_(repr(rec3), repr(self.record3)) - eq_(repr(rec4), repr(self.record4)) - - def _build_igmp(self): - dl_dst = '11:22:33:44:55:66' - dl_src = 'aa:bb:cc:dd:ee:ff' - dl_type = ether.ETH_TYPE_IP - e = ethernet(dl_dst, dl_src, dl_type) - - total_length = len(ipv4()) + len(self.g) - nw_proto = inet.IPPROTO_IGMP - nw_dst = '11.22.33.44' - nw_src = '55.66.77.88' - i = ipv4(total_length=total_length, src=nw_src, dst=nw_dst, - proto=nw_proto, ttl=1) - - p = Packet() - - p.add_protocol(e) - p.add_protocol(i) - p.add_protocol(self.g) - p.serialize() - return p - - def test_build_igmp(self): - p = self._build_igmp() - - e = self.find_protocol(p, "ethernet") - ok_(e) - eq_(e.ethertype, ether.ETH_TYPE_IP) - - i = self.find_protocol(p, "ipv4") - ok_(i) - eq_(i.proto, inet.IPPROTO_IGMP) - - g = self.find_protocol(p, "igmpv3_report") - ok_(g) - - eq_(g.msgtype, self.msgtype) - eq_(g.csum, checksum(self.buf)) - eq_(g.record_num, self.record_num) - eq_(g.records, self.records) - - def test_build_igmp_with_records(self): - self.setUp_with_records() - self.test_build_igmp() - - def test_to_string(self): - igmp_values = {'msgtype': repr(self.msgtype), - 'csum': repr(self.csum), - 'record_num': repr(self.record_num), - 'records': repr(self.records)} - _g_str = ','.join(['%s=%s' % (k, igmp_values[k]) - for k, v in inspect.getmembers(self.g) - if k in igmp_values]) - g_str = '%s(%s)' % (igmpv3_report.__name__, _g_str) - - eq_(str(self.g), g_str) - eq_(repr(self.g), g_str) - - def test_to_string_with_records(self): - self.setUp_with_records() - self.test_to_string() - - @raises(Exception) - def test_record_num_larger_than_records(self): - self.record1 = igmpv3_report_group( - MODE_IS_INCLUDE, 0, 0, '225.0.0.1') - self.record2 = igmpv3_report_group( - MODE_IS_INCLUDE, 0, 2, '225.0.0.2', - ['172.16.10.10', '172.16.10.27']) - self.record3 = igmpv3_report_group( - MODE_IS_INCLUDE, 1, 0, '225.0.0.3', [], b'abc\x00') - self.record4 = igmpv3_report_group( - MODE_IS_INCLUDE, 1, 2, '225.0.0.4', - ['172.16.10.10', '172.16.10.27'], b'abc\x00') - self.records = [self.record1, self.record2, self.record3, - self.record4] - self.record_num = len(self.records) + 1 - self.buf = pack(igmpv3_report._PACK_STR, self.msgtype, - self.csum, self.record_num) - self.buf += self.record1.serialize() - self.buf += self.record2.serialize() - self.buf += self.record3.serialize() - self.buf += self.record4.serialize() - self.g = igmpv3_report( - self.msgtype, self.csum, self.record_num, self.records) - self.test_parser() - - @raises(Exception) - def test_record_num_smaller_than_records(self): - self.record1 = igmpv3_report_group( - MODE_IS_INCLUDE, 0, 0, '225.0.0.1') - self.record2 = igmpv3_report_group( - MODE_IS_INCLUDE, 0, 2, '225.0.0.2', - ['172.16.10.10', '172.16.10.27']) - self.record3 = igmpv3_report_group( - MODE_IS_INCLUDE, 1, 0, '225.0.0.3', [], b'abc\x00') - self.record4 = igmpv3_report_group( - MODE_IS_INCLUDE, 1, 2, '225.0.0.4', - ['172.16.10.10', '172.16.10.27'], b'abc\x00') - self.records = [self.record1, self.record2, self.record3, - self.record4] - self.record_num = len(self.records) - 1 - self.buf = pack(igmpv3_report._PACK_STR, self.msgtype, - self.csum, self.record_num) - self.buf += self.record1.serialize() - self.buf += self.record2.serialize() - self.buf += self.record3.serialize() - self.buf += self.record4.serialize() - self.g = igmpv3_report( - self.msgtype, self.csum, self.record_num, self.records) - self.test_parser() - - def test_default_args(self): - prev = ipv4(proto=inet.IPPROTO_IGMP) - g = igmpv3_report() - prev.serialize(g, None) - buf = g.serialize(bytearray(), prev) - res = unpack_from(igmpv3_report._PACK_STR, six.binary_type(buf)) - buf = bytearray(buf) - pack_into('!H', buf, 2, 0) - - eq_(res[0], IGMP_TYPE_REPORT_V3) - eq_(res[1], checksum(buf)) - eq_(res[2], 0) - - # records without record_num - prev = ipv4(proto=inet.IPPROTO_IGMP) - record1 = igmpv3_report_group( - MODE_IS_INCLUDE, 0, 0, '225.0.0.1') - record2 = igmpv3_report_group( - MODE_IS_INCLUDE, 0, 2, '225.0.0.2', - ['172.16.10.10', '172.16.10.27']) - record3 = igmpv3_report_group( - MODE_IS_INCLUDE, 1, 0, '225.0.0.3', [], b'abc\x00') - record4 = igmpv3_report_group( - MODE_IS_INCLUDE, 1, 2, '225.0.0.4', - ['172.16.10.10', '172.16.10.27'], b'abc\x00') - records = [record1, record2, record3, record4] - g = igmpv3_report(records=records) - prev.serialize(g, None) - buf = g.serialize(bytearray(), prev) - res = unpack_from(igmpv3_report._PACK_STR, six.binary_type(buf)) - buf = bytearray(buf) - pack_into('!H', buf, 2, 0) - - eq_(res[0], IGMP_TYPE_REPORT_V3) - eq_(res[1], checksum(buf)) - eq_(res[2], len(records)) - - def test_json(self): - jsondict = self.g.to_jsondict() - g = igmpv3_report.from_jsondict(jsondict['igmpv3_report']) - eq_(str(self.g), str(g)) - - def test_json_with_records(self): - self.setUp_with_records() - self.test_json() - - -class Test_igmpv3_report_group(unittest.TestCase): - """Test case for Group Records of - Internet Group Management Protocol v3 Membership Report Message""" - def setUp(self): - self.type_ = MODE_IS_INCLUDE - self.aux_len = 0 - self.num = 0 - self.address = '225.0.0.1' - self.srcs = [] - self.aux = None - - self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, - self.aux_len, self.num, - addrconv.ipv4.text_to_bin(self.address)) - - self.g = igmpv3_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - - def setUp_with_srcs(self): - self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] - self.num = len(self.srcs) - self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, - self.aux_len, self.num, - addrconv.ipv4.text_to_bin(self.address)) - for src in self.srcs: - self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) - self.g = igmpv3_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - - def setUp_with_aux(self): - self.aux = b'\x01\x02\x03\x04\x05\x00\x00\x00' - self.aux_len = len(self.aux) // 4 - self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, - self.aux_len, self.num, - addrconv.ipv4.text_to_bin(self.address)) - self.buf += self.aux - self.g = igmpv3_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - - def setUp_with_srcs_and_aux(self): - self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] - self.num = len(self.srcs) - self.aux = b'\x01\x02\x03\x04\x05\x00\x00\x00' - self.aux_len = len(self.aux) // 4 - self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, - self.aux_len, self.num, - addrconv.ipv4.text_to_bin(self.address)) - for src in self.srcs: - self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) - self.buf += self.aux - self.g = igmpv3_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.type_, self.g.type_) - eq_(self.aux_len, self.g.aux_len) - eq_(self.num, self.g.num) - eq_(self.address, self.g.address) - eq_(self.srcs, self.g.srcs) - eq_(self.aux, self.g.aux) - - def test_init_with_srcs(self): - self.setUp_with_srcs() - self.test_init() - - def test_init_with_aux(self): - self.setUp_with_aux() - self.test_init() - - def test_init_with_srcs_and_aux(self): - self.setUp_with_srcs_and_aux() - self.test_init() - - def test_parser(self): - _res = self.g.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - - eq_(res.type_, self.type_) - eq_(res.aux_len, self.aux_len) - eq_(res.num, self.num) - eq_(res.address, self.address) - eq_(res.srcs, self.srcs) - eq_(res.aux, self.aux) - - def test_parser_with_srcs(self): - self.setUp_with_srcs() - self.test_parser() - - def test_parser_with_aux(self): - self.setUp_with_aux() - self.test_parser() - - def test_parser_with_srcs_and_aux(self): - self.setUp_with_srcs_and_aux() - self.test_parser() - - def test_serialize(self): - buf = self.g.serialize() - res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) - - eq_(res[0], self.type_) - eq_(res[1], self.aux_len) - eq_(res[2], self.num) - eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) - - def test_serialize_with_srcs(self): - self.setUp_with_srcs() - buf = self.g.serialize() - res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) - (src1, src2, src3) = unpack_from('4s4s4s', six.binary_type(buf), - igmpv3_report_group._MIN_LEN) - eq_(res[0], self.type_) - eq_(res[1], self.aux_len) - eq_(res[2], self.num) - eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) - eq_(src1, addrconv.ipv4.text_to_bin(self.srcs[0])) - eq_(src2, addrconv.ipv4.text_to_bin(self.srcs[1])) - eq_(src3, addrconv.ipv4.text_to_bin(self.srcs[2])) - - def test_serialize_with_aux(self): - self.setUp_with_aux() - buf = self.g.serialize() - res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) - (aux, ) = unpack_from('%ds' % (self.aux_len * 4), six.binary_type(buf), - igmpv3_report_group._MIN_LEN) - eq_(res[0], self.type_) - eq_(res[1], self.aux_len) - eq_(res[2], self.num) - eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) - eq_(aux, self.aux) - - def test_serialize_with_srcs_and_aux(self): - self.setUp_with_srcs_and_aux() - buf = self.g.serialize() - res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) - (src1, src2, src3) = unpack_from('4s4s4s', six.binary_type(buf), - igmpv3_report_group._MIN_LEN) - (aux, ) = unpack_from('%ds' % (self.aux_len * 4), six.binary_type(buf), - igmpv3_report_group._MIN_LEN + 12) - eq_(res[0], self.type_) - eq_(res[1], self.aux_len) - eq_(res[2], self.num) - eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) - eq_(src1, addrconv.ipv4.text_to_bin(self.srcs[0])) - eq_(src2, addrconv.ipv4.text_to_bin(self.srcs[1])) - eq_(src3, addrconv.ipv4.text_to_bin(self.srcs[2])) - eq_(aux, self.aux) - - def test_to_string(self): - igmp_values = {'type_': repr(self.type_), - 'aux_len': repr(self.aux_len), - 'num': repr(self.num), - 'address': repr(self.address), - 'srcs': repr(self.srcs), - 'aux': repr(self.aux)} - _g_str = ','.join(['%s=%s' % (k, igmp_values[k]) - for k, v in inspect.getmembers(self.g) - if k in igmp_values]) - g_str = '%s(%s)' % (igmpv3_report_group.__name__, _g_str) - - eq_(str(self.g), g_str) - eq_(repr(self.g), g_str) - - def test_to_string_with_srcs(self): - self.setUp_with_srcs() - self.test_to_string() - - def test_to_string_with_aux(self): - self.setUp_with_aux() - self.test_to_string() - - def test_to_string_with_srcs_and_aux(self): - self.setUp_with_srcs_and_aux() - self.test_to_string() - - def test_len(self): - eq_(len(self.g), 8) - - def test_len_with_srcs(self): - self.setUp_with_srcs() - eq_(len(self.g), 20) - - def test_len_with_aux(self): - self.setUp_with_aux() - eq_(len(self.g), 16) - - def test_len_with_srcs_and_aux(self): - self.setUp_with_srcs_and_aux() - eq_(len(self.g), 28) - - @raises - def test_num_larger_than_srcs(self): - self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] - self.num = len(self.srcs) + 1 - self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, - self.aux_len, self.num, - addrconv.ipv4.text_to_bin(self.address)) - for src in self.srcs: - self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) - self.g = igmpv3_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - self.test_parser() - - @raises - def test_num_smaller_than_srcs(self): - self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] - self.num = len(self.srcs) - 1 - self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, - self.aux_len, self.num, - addrconv.ipv4.text_to_bin(self.address)) - for src in self.srcs: - self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) - self.g = igmpv3_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - self.test_parser() - - @raises - def test_aux_len_larger_than_aux(self): - self.aux = b'\x01\x02\x03\x04\x05\x00\x00\x00' - self.aux_len = len(self.aux) // 4 + 1 - self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, - self.aux_len, self.num, - addrconv.ipv4.text_to_bin(self.address)) - self.buf += self.aux - self.g = igmpv3_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - self.test_parser() - - @raises - def test_aux_len_smaller_than_aux(self): - self.aux = b'\x01\x02\x03\x04\x05\x00\x00\x00' - self.aux_len = len(self.aux) // 4 - 1 - self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, - self.aux_len, self.num, - addrconv.ipv4.text_to_bin(self.address)) - self.buf += self.aux - self.g = igmpv3_report_group( - self.type_, self.aux_len, self.num, self.address, - self.srcs, self.aux) - self.test_parser() - - def test_default_args(self): - rep = igmpv3_report_group() - buf = rep.serialize() - res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0) - eq_(res[1], 0) - eq_(res[2], 0) - eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) - - # srcs without num - srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] - rep = igmpv3_report_group(srcs=srcs) - buf = rep.serialize() - res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0) - eq_(res[1], 0) - eq_(res[2], len(srcs)) - eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) - - res = unpack_from('4s4s4s', six.binary_type(buf), - igmpv3_report_group._MIN_LEN) - - eq_(res[0], addrconv.ipv4.text_to_bin(srcs[0])) - eq_(res[1], addrconv.ipv4.text_to_bin(srcs[1])) - eq_(res[2], addrconv.ipv4.text_to_bin(srcs[2])) - - # aux without aux_len - aux = b'abcde' - rep = igmpv3_report_group(aux=aux) - buf = rep.serialize() - res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 0) - eq_(res[1], 2) - eq_(res[2], 0) - eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) - eq_(buf[igmpv3_report_group._MIN_LEN:], b'abcde\x00\x00\x00') diff --git a/ryu/tests/unit/packet/test_ipv4.py b/ryu/tests/unit/packet/test_ipv4.py deleted file mode 100644 index 69186f3f..00000000 --- a/ryu/tests/unit/packet/test_ipv4.py +++ /dev/null @@ -1,137 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import six -import struct -from struct import * -from nose.tools import * -from ryu.ofproto import ether, inet -from ryu.lib.packet import packet_utils -from ryu.lib.packet.ethernet import ethernet -from ryu.lib.packet.packet import Packet -from ryu.lib.packet.ipv4 import ipv4 -from ryu.lib.packet.tcp import tcp -from ryu.lib import addrconv - - -LOG = logging.getLogger('test_ipv4') - - -class Test_ipv4(unittest.TestCase): - """ Test case for ipv4 - """ - - version = 4 - header_length = 5 + 10 - ver_hlen = version << 4 | header_length - tos = 0 - total_length = header_length + 64 - identification = 30774 - flags = 4 - offset = 1480 - flg_off = flags << 13 | offset - ttl = 64 - proto = inet.IPPROTO_TCP - csum = 0xadc6 - src = '131.151.32.21' - dst = '131.151.32.129' - length = header_length * 4 - option = b'\x86\x28\x00\x00\x00\x01\x01\x22' \ - + b'\x00\x01\xae\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00\x00\x00\x00\x01' - - buf = pack(ipv4._PACK_STR, ver_hlen, tos, total_length, identification, - flg_off, ttl, proto, csum, - addrconv.ipv4.text_to_bin(src), - addrconv.ipv4.text_to_bin(dst)) \ - + option - - ip = ipv4(version, header_length, tos, total_length, identification, - flags, offset, ttl, proto, csum, src, dst, option) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.version, self.ip.version) - eq_(self.header_length, self.ip.header_length) - eq_(self.tos, self.ip.tos) - eq_(self.total_length, self.ip.total_length) - eq_(self.identification, self.ip.identification) - eq_(self.flags, self.ip.flags) - eq_(self.offset, self.ip.offset) - eq_(self.ttl, self.ip.ttl) - eq_(self.proto, self.ip.proto) - eq_(self.csum, self.ip.csum) - eq_(self.src, self.ip.src) - eq_(self.dst, self.ip.dst) - eq_(self.length, len(self.ip)) - eq_(self.option, self.ip.option) - - def test_parser(self): - res, ptype, _ = self.ip.parser(self.buf) - - eq_(res.version, self.version) - eq_(res.header_length, self.header_length) - eq_(res.tos, self.tos) - eq_(res.total_length, self.total_length) - eq_(res.identification, self.identification) - eq_(res.flags, self.flags) - eq_(res.offset, self.offset) - eq_(res.ttl, self.ttl) - eq_(res.proto, self.proto) - eq_(res.csum, self.csum) - eq_(res.src, self.src) - eq_(res.dst, self.dst) - eq_(ptype, tcp) - - def test_serialize(self): - buf = self.ip.serialize(bytearray(), None) - res = struct.unpack_from(ipv4._PACK_STR, six.binary_type(buf)) - option = buf[ipv4._MIN_LEN:ipv4._MIN_LEN + len(self.option)] - - eq_(res[0], self.ver_hlen) - eq_(res[1], self.tos) - eq_(res[2], self.total_length) - eq_(res[3], self.identification) - eq_(res[4], self.flg_off) - eq_(res[5], self.ttl) - eq_(res[6], self.proto) - eq_(res[8], addrconv.ipv4.text_to_bin(self.src)) - eq_(res[9], addrconv.ipv4.text_to_bin(self.dst)) - eq_(option, self.option) - - # checksum - csum = packet_utils.checksum(buf) - eq_(csum, 0) - - @raises(Exception) - def test_malformed_ipv4(self): - m_short_buf = self.buf[1:ipv4._MIN_LEN] - ipv4.parser(m_short_buf) - - def test_json(self): - jsondict = self.ip.to_jsondict() - ip = ipv4.from_jsondict(jsondict['ipv4']) - eq_(str(self.ip), str(ip)) diff --git a/ryu/tests/unit/packet/test_ipv6.py b/ryu/tests/unit/packet/test_ipv6.py deleted file mode 100644 index 455dc8c3..00000000 --- a/ryu/tests/unit/packet/test_ipv6.py +++ /dev/null @@ -1,1128 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import unittest -import logging -import inspect -import six -import struct - -from nose.tools import * -from ryu.lib import addrconv -from ryu.lib import ip -from ryu.lib.packet import ipv6 - - -LOG = logging.getLogger(__name__) - - -class Test_ipv6(unittest.TestCase): - - def setUp(self): - self.version = 6 - self.traffic_class = 0 - self.flow_label = 0 - self.payload_length = 817 - self.nxt = 6 - self.hop_limit = 128 - self.src = '2002:4637:d5d3::4637:d5d3' - self.dst = '2001:4860:0:2001::68' - self.ext_hdrs = [] - self.ip = ipv6.ipv6( - self.version, self.traffic_class, self.flow_label, - self.payload_length, self.nxt, self.hop_limit, self.src, - self.dst, self.ext_hdrs) - - self.v_tc_flow = ( - self.version << 28 | self.traffic_class << 20 | - self.flow_label << 12) - self.buf = struct.pack( - ipv6.ipv6._PACK_STR, self.v_tc_flow, - self.payload_length, self.nxt, self.hop_limit, - addrconv.ipv6.text_to_bin(self.src), - addrconv.ipv6.text_to_bin(self.dst)) - - def setUp_with_hop_opts(self): - self.opt1_type = 5 - self.opt1_len = 2 - self.opt1_data = b'\x00\x00' - self.opt2_type = 1 - self.opt2_len = 0 - self.opt2_data = None - self.options = [ - ipv6.option(self.opt1_type, self.opt1_len, self.opt1_data), - ipv6.option(self.opt2_type, self.opt2_len, self.opt2_data), - ] - self.hop_opts_nxt = 6 - self.hop_opts_size = 0 - self.hop_opts = ipv6.hop_opts( - self.hop_opts_nxt, self.hop_opts_size, self.options) - self.ext_hdrs = [self.hop_opts] - self.payload_length += len(self.hop_opts) - self.nxt = ipv6.hop_opts.TYPE - self.ip = ipv6.ipv6( - self.version, self.traffic_class, self.flow_label, - self.payload_length, self.nxt, self.hop_limit, self.src, - self.dst, self.ext_hdrs) - self.buf = struct.pack( - ipv6.ipv6._PACK_STR, self.v_tc_flow, - self.payload_length, self.nxt, self.hop_limit, - addrconv.ipv6.text_to_bin(self.src), - addrconv.ipv6.text_to_bin(self.dst)) - self.buf += self.hop_opts.serialize() - - def setUp_with_dst_opts(self): - self.opt1_type = 5 - self.opt1_len = 2 - self.opt1_data = b'\x00\x00' - self.opt2_type = 1 - self.opt2_len = 0 - self.opt2_data = None - self.options = [ - ipv6.option(self.opt1_type, self.opt1_len, self.opt1_data), - ipv6.option(self.opt2_type, self.opt2_len, self.opt2_data), - ] - self.dst_opts_nxt = 6 - self.dst_opts_size = 0 - self.dst_opts = ipv6.dst_opts( - self.dst_opts_nxt, self.dst_opts_size, self.options) - self.ext_hdrs = [self.dst_opts] - self.payload_length += len(self.dst_opts) - self.nxt = ipv6.dst_opts.TYPE - self.ip = ipv6.ipv6( - self.version, self.traffic_class, self.flow_label, - self.payload_length, self.nxt, self.hop_limit, self.src, - self.dst, self.ext_hdrs) - self.buf = struct.pack( - ipv6.ipv6._PACK_STR, self.v_tc_flow, - self.payload_length, self.nxt, self.hop_limit, - addrconv.ipv6.text_to_bin(self.src), - addrconv.ipv6.text_to_bin(self.dst)) - self.buf += self.dst_opts.serialize() - - def setUp_with_routing_type3(self): - self.routing_nxt = 6 - self.routing_size = 6 - self.routing_type = 3 - self.routing_seg = 2 - self.routing_cmpi = 0 - self.routing_cmpe = 0 - self.routing_adrs = ["2001:db8:dead::1", "2001:db8:dead::2", - "2001:db8:dead::3"] - self.routing = ipv6.routing_type3( - self.routing_nxt, self.routing_size, - self.routing_type, self.routing_seg, - self.routing_cmpi, self.routing_cmpe, - self.routing_adrs) - self.ext_hdrs = [self.routing] - self.payload_length += len(self.routing) - self.nxt = ipv6.routing.TYPE - self.ip = ipv6.ipv6( - self.version, self.traffic_class, self.flow_label, - self.payload_length, self.nxt, self.hop_limit, self.src, - self.dst, self.ext_hdrs) - self.buf = struct.pack( - ipv6.ipv6._PACK_STR, self.v_tc_flow, - self.payload_length, self.nxt, self.hop_limit, - addrconv.ipv6.text_to_bin(self.src), - addrconv.ipv6.text_to_bin(self.dst)) - self.buf += self.routing.serialize() - - def setUp_with_fragment(self): - self.fragment_nxt = 6 - self.fragment_offset = 50 - self.fragment_more = 1 - self.fragment_id = 123 - self.fragment = ipv6.fragment( - self.fragment_nxt, self.fragment_offset, self.fragment_more, - self.fragment_id) - self.ext_hdrs = [self.fragment] - self.payload_length += len(self.fragment) - self.nxt = ipv6.fragment.TYPE - self.ip = ipv6.ipv6( - self.version, self.traffic_class, self.flow_label, - self.payload_length, self.nxt, self.hop_limit, self.src, - self.dst, self.ext_hdrs) - self.buf = struct.pack( - ipv6.ipv6._PACK_STR, self.v_tc_flow, - self.payload_length, self.nxt, self.hop_limit, - addrconv.ipv6.text_to_bin(self.src), - addrconv.ipv6.text_to_bin(self.dst)) - self.buf += self.fragment.serialize() - - def setUp_with_auth(self): - self.auth_nxt = 6 - self.auth_size = 4 - self.auth_spi = 256 - self.auth_seq = 1 - self.auth_data = b'\xa0\xe7\xf8\xab\xf9\x69\x1a\x8b\xf3\x9f\x7c\xae' - self.auth = ipv6.auth( - self.auth_nxt, self.auth_size, self.auth_spi, self.auth_seq, - self.auth_data) - self.ext_hdrs = [self.auth] - self.payload_length += len(self.auth) - self.nxt = ipv6.auth.TYPE - self.ip = ipv6.ipv6( - self.version, self.traffic_class, self.flow_label, - self.payload_length, self.nxt, self.hop_limit, self.src, - self.dst, self.ext_hdrs) - self.buf = struct.pack( - ipv6.ipv6._PACK_STR, self.v_tc_flow, - self.payload_length, self.nxt, self.hop_limit, - addrconv.ipv6.text_to_bin(self.src), - addrconv.ipv6.text_to_bin(self.dst)) - self.buf += self.auth.serialize() - - def setUp_with_multi_headers(self): - self.opt1_type = 5 - self.opt1_len = 2 - self.opt1_data = b'\x00\x00' - self.opt2_type = 1 - self.opt2_len = 0 - self.opt2_data = None - self.options = [ - ipv6.option(self.opt1_type, self.opt1_len, self.opt1_data), - ipv6.option(self.opt2_type, self.opt2_len, self.opt2_data), - ] - self.hop_opts_nxt = ipv6.auth.TYPE - self.hop_opts_size = 0 - self.hop_opts = ipv6.hop_opts( - self.hop_opts_nxt, self.hop_opts_size, self.options) - self.auth_nxt = 6 - self.auth_size = 4 - self.auth_spi = 256 - self.auth_seq = 1 - self.auth_data = b'\xa0\xe7\xf8\xab\xf9\x69\x1a\x8b\xf3\x9f\x7c\xae' - self.auth = ipv6.auth( - self.auth_nxt, self.auth_size, self.auth_spi, self.auth_seq, - self.auth_data) - self.ext_hdrs = [self.hop_opts, self.auth] - self.payload_length += len(self.hop_opts) + len(self.auth) - self.nxt = ipv6.hop_opts.TYPE - self.ip = ipv6.ipv6( - self.version, self.traffic_class, self.flow_label, - self.payload_length, self.nxt, self.hop_limit, self.src, - self.dst, self.ext_hdrs) - self.buf = struct.pack( - ipv6.ipv6._PACK_STR, self.v_tc_flow, - self.payload_length, self.nxt, self.hop_limit, - addrconv.ipv6.text_to_bin(self.src), - addrconv.ipv6.text_to_bin(self.dst)) - self.buf += self.hop_opts.serialize() - self.buf += self.auth.serialize() - - def tearDown(self): - pass - - def test_init(self): - eq_(self.version, self.ip.version) - eq_(self.traffic_class, self.ip.traffic_class) - eq_(self.flow_label, self.ip.flow_label) - eq_(self.payload_length, self.ip.payload_length) - eq_(self.nxt, self.ip.nxt) - eq_(self.hop_limit, self.ip.hop_limit) - eq_(self.src, self.ip.src) - eq_(self.dst, self.ip.dst) - eq_(str(self.ext_hdrs), str(self.ip.ext_hdrs)) - - def test_init_with_hop_opts(self): - self.setUp_with_hop_opts() - self.test_init() - - def test_init_with_dst_opts(self): - self.setUp_with_dst_opts() - self.test_init() - - def test_init_with_routing_type3(self): - self.setUp_with_routing_type3() - self.test_init() - - def test_init_with_fragment(self): - self.setUp_with_fragment() - self.test_init() - - def test_init_with_auth(self): - self.setUp_with_auth() - self.test_init() - - def test_init_with_multi_headers(self): - self.setUp_with_multi_headers() - self.test_init() - - def test_parser(self): - _res = self.ip.parser(six.binary_type(self.buf)) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - - eq_(self.version, res.version) - eq_(self.traffic_class, res.traffic_class) - eq_(self.flow_label, res.flow_label) - eq_(self.payload_length, res.payload_length) - eq_(self.nxt, res.nxt) - eq_(self.hop_limit, res.hop_limit) - eq_(self.src, res.src) - eq_(self.dst, res.dst) - eq_(str(self.ext_hdrs), str(res.ext_hdrs)) - - def test_parser_with_hop_opts(self): - self.setUp_with_hop_opts() - self.test_parser() - - def test_parser_with_dst_opts(self): - self.setUp_with_dst_opts() - self.test_parser() - - def test_parser_with_routing_type3(self): - self.setUp_with_routing_type3() - self.test_parser() - - def test_parser_with_fragment(self): - self.setUp_with_fragment() - self.test_parser() - - def test_parser_with_auth(self): - self.setUp_with_auth() - self.test_parser() - - def test_parser_with_multi_headers(self): - self.setUp_with_multi_headers() - self.test_parser() - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.ip.serialize(data, prev) - - res = struct.unpack_from(ipv6.ipv6._PACK_STR, six.binary_type(buf)) - - eq_(self.v_tc_flow, res[0]) - eq_(self.payload_length, res[1]) - eq_(self.nxt, res[2]) - eq_(self.hop_limit, res[3]) - eq_(self.src, addrconv.ipv6.bin_to_text(res[4])) - eq_(self.dst, addrconv.ipv6.bin_to_text(res[5])) - - def test_serialize_with_hop_opts(self): - self.setUp_with_hop_opts() - self.test_serialize() - - data = bytearray() - prev = None - buf = self.ip.serialize(data, prev) - hop_opts = ipv6.hop_opts.parser(six.binary_type(buf[ipv6.ipv6._MIN_LEN:])) - eq_(repr(self.hop_opts), repr(hop_opts)) - - def test_serialize_with_dst_opts(self): - self.setUp_with_dst_opts() - self.test_serialize() - - data = bytearray() - prev = None - buf = self.ip.serialize(data, prev) - dst_opts = ipv6.dst_opts.parser(six.binary_type(buf[ipv6.ipv6._MIN_LEN:])) - eq_(repr(self.dst_opts), repr(dst_opts)) - - def test_serialize_with_routing_type3(self): - self.setUp_with_routing_type3() - self.test_serialize() - - data = bytearray() - prev = None - buf = self.ip.serialize(data, prev) - routing = ipv6.routing.parser(six.binary_type(buf[ipv6.ipv6._MIN_LEN:])) - eq_(repr(self.routing), repr(routing)) - - def test_serialize_with_fragment(self): - self.setUp_with_fragment() - self.test_serialize() - - data = bytearray() - prev = None - buf = self.ip.serialize(data, prev) - fragment = ipv6.fragment.parser(six.binary_type(buf[ipv6.ipv6._MIN_LEN:])) - eq_(repr(self.fragment), repr(fragment)) - - def test_serialize_with_auth(self): - self.setUp_with_auth() - self.test_serialize() - - data = bytearray() - prev = None - buf = self.ip.serialize(data, prev) - auth = ipv6.auth.parser(six.binary_type(buf[ipv6.ipv6._MIN_LEN:])) - eq_(repr(self.auth), repr(auth)) - - def test_serialize_with_multi_headers(self): - self.setUp_with_multi_headers() - self.test_serialize() - - data = bytearray() - prev = None - buf = self.ip.serialize(data, prev) - offset = ipv6.ipv6._MIN_LEN - hop_opts = ipv6.hop_opts.parser(six.binary_type(buf[offset:])) - offset += len(hop_opts) - auth = ipv6.auth.parser(six.binary_type(buf[offset:])) - eq_(repr(self.hop_opts), repr(hop_opts)) - eq_(repr(self.auth), repr(auth)) - - def test_to_string(self): - ipv6_values = {'version': self.version, - 'traffic_class': self.traffic_class, - 'flow_label': self.flow_label, - 'payload_length': self.payload_length, - 'nxt': self.nxt, - 'hop_limit': self.hop_limit, - 'src': repr(self.src), - 'dst': repr(self.dst), - 'ext_hdrs': self.ext_hdrs} - _ipv6_str = ','.join(['%s=%s' % (k, ipv6_values[k]) - for k, v in inspect.getmembers(self.ip) - if k in ipv6_values]) - ipv6_str = '%s(%s)' % (ipv6.ipv6.__name__, _ipv6_str) - - eq_(str(self.ip), ipv6_str) - eq_(repr(self.ip), ipv6_str) - - def test_to_string_with_hop_opts(self): - self.setUp_with_hop_opts() - self.test_to_string() - - def test_to_string_with_dst_opts(self): - self.setUp_with_dst_opts() - self.test_to_string() - - def test_to_string_with_fragment(self): - self.setUp_with_fragment() - self.test_to_string() - - def test_to_string_with_auth(self): - self.setUp_with_auth() - self.test_to_string() - - def test_to_string_with_multi_headers(self): - self.setUp_with_multi_headers() - self.test_to_string() - - def test_len(self): - eq_(len(self.ip), 40) - - def test_len_with_hop_opts(self): - self.setUp_with_hop_opts() - eq_(len(self.ip), 40 + len(self.hop_opts)) - - def test_len_with_dst_opts(self): - self.setUp_with_dst_opts() - eq_(len(self.ip), 40 + len(self.dst_opts)) - - def test_len_with_routing_type3(self): - self.setUp_with_routing_type3() - eq_(len(self.ip), 40 + len(self.routing)) - - def test_len_with_fragment(self): - self.setUp_with_fragment() - eq_(len(self.ip), 40 + len(self.fragment)) - - def test_len_with_auth(self): - self.setUp_with_auth() - eq_(len(self.ip), 40 + len(self.auth)) - - def test_len_with_multi_headers(self): - self.setUp_with_multi_headers() - eq_(len(self.ip), 40 + len(self.hop_opts) + len(self.auth)) - - def test_default_args(self): - ip = ipv6.ipv6() - buf = ip.serialize(bytearray(), None) - res = struct.unpack(ipv6.ipv6._PACK_STR, six.binary_type(buf)) - - eq_(res[0], 6 << 28) - eq_(res[1], 0) - eq_(res[2], 6) - eq_(res[3], 255) - eq_(res[4], addrconv.ipv6.text_to_bin('10::10')) - eq_(res[5], addrconv.ipv6.text_to_bin('20::20')) - - # with extension header - ip = ipv6.ipv6( - nxt=0, ext_hdrs=[ - ipv6.hop_opts(58, 0, [ - ipv6.option(5, 2, b'\x00\x00'), - ipv6.option(1, 0, None)])]) - buf = ip.serialize(bytearray(), None) - res = struct.unpack(ipv6.ipv6._PACK_STR + '8s', six.binary_type(buf)) - - eq_(res[0], 6 << 28) - eq_(res[1], 8) - eq_(res[2], 0) - eq_(res[3], 255) - eq_(res[4], addrconv.ipv6.text_to_bin('10::10')) - eq_(res[5], addrconv.ipv6.text_to_bin('20::20')) - eq_(res[6], b'\x3a\x00\x05\x02\x00\x00\x01\x00') - - def test_json(self): - jsondict = self.ip.to_jsondict() - ip = ipv6.ipv6.from_jsondict(jsondict['ipv6']) - eq_(str(self.ip), str(ip)) - - def test_json_with_hop_opts(self): - self.setUp_with_hop_opts() - self.test_json() - - def test_json_with_dst_opts(self): - self.setUp_with_dst_opts() - self.test_json() - - def test_json_with_routing_type3(self): - self.setUp_with_routing_type3() - self.test_json() - - def test_json_with_fragment(self): - self.setUp_with_fragment() - self.test_json() - - def test_json_with_auth(self): - self.setUp_with_auth() - self.test_json() - - def test_json_with_multi_headers(self): - self.setUp_with_multi_headers() - self.test_json() - - -class Test_hop_opts(unittest.TestCase): - - def setUp(self): - self.nxt = 0 - self.size = 8 - self.data = [ - ipv6.option(5, 2, b'\x00\x00'), - ipv6.option(1, 0, None), - ipv6.option(0xc2, 4, b'\x00\x01\x00\x00'), - ipv6.option(1, 0, None), - ] - self.hop = ipv6.hop_opts(self.nxt, self.size, self.data) - self.form = '!BB' - self.buf = struct.pack(self.form, self.nxt, self.size) \ - + self.data[0].serialize() \ - + self.data[1].serialize() \ - + self.data[2].serialize() \ - + self.data[3].serialize() - - def tearDown(self): - pass - - def test_init(self): - eq_(self.nxt, self.hop.nxt) - eq_(self.size, self.hop.size) - eq_(self.data, self.hop.data) - - @raises(Exception) - def test_invalid_size(self): - ipv6.hop_opts(self.nxt, 1, self.data) - - def test_parser(self): - _res = ipv6.hop_opts.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.nxt, res.nxt) - eq_(self.size, res.size) - eq_(str(self.data), str(res.data)) - - def test_serialize(self): - buf = self.hop.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self.nxt, res[0]) - eq_(self.size, res[1]) - offset = struct.calcsize(self.form) - opt1 = ipv6.option.parser(six.binary_type(buf[offset:])) - offset += len(opt1) - opt2 = ipv6.option.parser(six.binary_type(buf[offset:])) - offset += len(opt2) - opt3 = ipv6.option.parser(six.binary_type(buf[offset:])) - offset += len(opt3) - opt4 = ipv6.option.parser(six.binary_type(buf[offset:])) - eq_(5, opt1.type_) - eq_(2, opt1.len_) - eq_(b'\x00\x00', opt1.data) - eq_(1, opt2.type_) - eq_(0, opt2.len_) - eq_(None, opt2.data) - eq_(0xc2, opt3.type_) - eq_(4, opt3.len_) - eq_(b'\x00\x01\x00\x00', opt3.data) - eq_(1, opt4.type_) - eq_(0, opt4.len_) - eq_(None, opt4.data) - - def test_len(self): - eq_(16, len(self.hop)) - - def test_default_args(self): - hdr = ipv6.hop_opts() - buf = hdr.serialize() - res = struct.unpack('!BB', six.binary_type(buf[:2])) - - eq_(res[0], 6) - eq_(res[1], 0) - opt = ipv6.option(type_=1, len_=4, data=b'\x00\x00\x00\x00') - eq_(six.binary_type(buf[2:]), opt.serialize()) - - -class Test_dst_opts(unittest.TestCase): - - def setUp(self): - self.nxt = 60 - self.size = 8 - self.data = [ - ipv6.option(5, 2, b'\x00\x00'), - ipv6.option(1, 0, None), - ipv6.option(0xc2, 4, b'\x00\x01\x00\x00'), - ipv6.option(1, 0, None), - ] - self.dst = ipv6.dst_opts(self.nxt, self.size, self.data) - self.form = '!BB' - self.buf = struct.pack(self.form, self.nxt, self.size) \ - + self.data[0].serialize() \ - + self.data[1].serialize() \ - + self.data[2].serialize() \ - + self.data[3].serialize() - - def tearDown(self): - pass - - def test_init(self): - eq_(self.nxt, self.dst.nxt) - eq_(self.size, self.dst.size) - eq_(self.data, self.dst.data) - - @raises(Exception) - def test_invalid_size(self): - ipv6.dst_opts(self.nxt, 1, self.data) - - def test_parser(self): - _res = ipv6.dst_opts.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.nxt, res.nxt) - eq_(self.size, res.size) - eq_(str(self.data), str(res.data)) - - def test_serialize(self): - buf = self.dst.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self.nxt, res[0]) - eq_(self.size, res[1]) - offset = struct.calcsize(self.form) - opt1 = ipv6.option.parser(six.binary_type(buf[offset:])) - offset += len(opt1) - opt2 = ipv6.option.parser(six.binary_type(buf[offset:])) - offset += len(opt2) - opt3 = ipv6.option.parser(six.binary_type(buf[offset:])) - offset += len(opt3) - opt4 = ipv6.option.parser(six.binary_type(buf[offset:])) - eq_(5, opt1.type_) - eq_(2, opt1.len_) - eq_(b'\x00\x00', opt1.data) - eq_(1, opt2.type_) - eq_(0, opt2.len_) - eq_(None, opt2.data) - eq_(0xc2, opt3.type_) - eq_(4, opt3.len_) - eq_(b'\x00\x01\x00\x00', opt3.data) - eq_(1, opt4.type_) - eq_(0, opt4.len_) - eq_(None, opt4.data) - - def test_len(self): - eq_(16, len(self.dst)) - - def test_default_args(self): - hdr = ipv6.dst_opts() - buf = hdr.serialize() - res = struct.unpack('!BB', six.binary_type(buf[:2])) - - eq_(res[0], 6) - eq_(res[1], 0) - opt = ipv6.option(type_=1, len_=4, data=b'\x00\x00\x00\x00') - eq_(six.binary_type(buf[2:]), opt.serialize()) - - -class Test_option(unittest.TestCase): - - def setUp(self): - self.type_ = 5 - self.data = b'\x00\x00' - self.len_ = len(self.data) - self.opt = ipv6.option(self.type_, self.len_, self.data) - self.form = '!BB%ds' % self.len_ - self.buf = struct.pack(self.form, self.type_, self.len_, self.data) - - def tearDown(self): - pass - - def test_init(self): - eq_(self.type_, self.opt.type_) - eq_(self.len_, self.opt.len_) - eq_(self.data, self.opt.data) - - def test_parser(self): - _res = ipv6.option.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.type_, res.type_) - eq_(self.len_, res.len_) - eq_(self.data, res.data) - - def test_serialize(self): - buf = self.opt.serialize() - res = struct.unpack_from(self.form, buf) - eq_(self.type_, res[0]) - eq_(self.len_, res[1]) - eq_(self.data, res[2]) - - def test_len(self): - eq_(len(self.opt), 2 + self.len_) - - -class Test_option_pad1(Test_option): - - def setUp(self): - self.type_ = 0 - self.len_ = -1 - self.data = None - self.opt = ipv6.option(self.type_, self.len_, self.data) - self.form = '!B' - self.buf = struct.pack(self.form, self.type_) - - def test_serialize(self): - buf = self.opt.serialize() - res = struct.unpack_from(self.form, buf) - eq_(self.type_, res[0]) - - def test_default_args(self): - opt = ipv6.option() - buf = opt.serialize() - res = struct.unpack('!B', buf) - - eq_(res[0], 0) - - -class Test_option_padN(Test_option): - - def setUp(self): - self.type_ = 1 - self.len_ = 0 - self.data = None - self.opt = ipv6.option(self.type_, self.len_, self.data) - self.form = '!BB' - self.buf = struct.pack(self.form, self.type_, self.len_) - - def test_serialize(self): - buf = self.opt.serialize() - res = struct.unpack_from(self.form, buf) - eq_(self.type_, res[0]) - eq_(self.len_, res[1]) - - -class Test_routing(unittest.TestCase): - - def setUp(self): - self.nxt = 0 - self.size = 6 - self.type_ = ipv6.routing.ROUTING_TYPE_3 - self.seg = 0 - self.cmpi = 0 - self.cmpe = 0 - self.adrs = ["2001:db8:dead::1", - "2001:db8:dead::2", - "2001:db8:dead::3"] - # calculate pad - self.pad = (8 - ((len(self.adrs) - 1) * (16 - self.cmpi) + - (16 - self.cmpe) % 8)) % 8 - # create buf - self.form = '!BBBBBB2x16s16s16s' - self.buf = struct.pack(self.form, self.nxt, self.size, - self.type_, self.seg, - (self.cmpi << 4) | self.cmpe, - self.pad << 4, - addrconv.ipv6.text_to_bin(self.adrs[0]), - addrconv.ipv6.text_to_bin(self.adrs[1]), - addrconv.ipv6.text_to_bin(self.adrs[2])) - - def tearDown(self): - pass - - def test_parser(self): - _res = ipv6.routing.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.nxt, res.nxt) - eq_(self.size, res.size) - eq_(self.type_, res.type_) - eq_(self.seg, res.seg) - eq_(self.cmpi, res.cmpi) - eq_(self.cmpe, res.cmpe) - eq_(self.pad, res._pad) - eq_(self.adrs[0], res.adrs[0]) - eq_(self.adrs[1], res.adrs[1]) - eq_(self.adrs[2], res.adrs[2]) - - def test_not_implemented_type(self): - not_implemented_buf = struct.pack( - '!BBBBBB2x', 0, 6, ipv6.routing.ROUTING_TYPE_2, 0, 0, 0) - instance = ipv6.routing.parser(not_implemented_buf) - assert None == instance - - def test_invalid_type(self): - invalid_type = 99 - invalid_buf = struct.pack('!BBBBBB2x', 0, 6, invalid_type, 0, 0, 0) - instance = ipv6.routing.parser(invalid_buf) - assert None == instance - - -class Test_routing_type3(unittest.TestCase): - - def setUp(self): - self.nxt = 0 - self.size = 6 - self.type_ = 3 - self.seg = 0 - self.cmpi = 0 - self.cmpe = 0 - self.adrs = ["2001:db8:dead::1", - "2001:db8:dead::2", - "2001:db8:dead::3"] - # calculate pad - self.pad = (8 - ((len(self.adrs) - 1) * (16 - self.cmpi) + - (16 - self.cmpe) % 8)) % 8 - - self.routing = ipv6.routing_type3( - self.nxt, self.size, self.type_, self.seg, self.cmpi, - self.cmpe, self.adrs) - self.form = '!BBBBBB2x16s16s16s' - self.buf = struct.pack(self.form, self.nxt, self.size, - self.type_, self.seg, - (self.cmpi << 4) | self.cmpe, - self.pad << 4, - addrconv.ipv6.text_to_bin(self.adrs[0]), - addrconv.ipv6.text_to_bin(self.adrs[1]), - addrconv.ipv6.text_to_bin(self.adrs[2])) - - def test_init(self): - eq_(self.nxt, self.routing.nxt) - eq_(self.size, self.routing.size) - eq_(self.type_, self.routing.type_) - eq_(self.seg, self.routing.seg) - eq_(self.cmpi, self.routing.cmpi) - eq_(self.cmpe, self.routing.cmpe) - eq_(self.pad, self.routing._pad) - eq_(self.adrs[0], self.routing.adrs[0]) - eq_(self.adrs[1], self.routing.adrs[1]) - eq_(self.adrs[2], self.routing.adrs[2]) - - def test_parser(self): - _res = ipv6.routing.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.nxt, res.nxt) - eq_(self.size, res.size) - eq_(self.type_, res.type_) - eq_(self.seg, res.seg) - eq_(self.cmpi, res.cmpi) - eq_(self.cmpe, res.cmpe) - eq_(self.pad, res._pad) - eq_(self.adrs[0], res.adrs[0]) - eq_(self.adrs[1], res.adrs[1]) - eq_(self.adrs[2], res.adrs[2]) - - def test_serialize(self): - buf = self.routing.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self.nxt, res[0]) - eq_(self.size, res[1]) - eq_(self.type_, res[2]) - eq_(self.seg, res[3]) - eq_(self.cmpi, res[4] >> 4) - eq_(self.cmpe, res[4] & 0xf) - eq_(self.pad, res[5]) - eq_(addrconv.ipv6.text_to_bin(self.adrs[0]), res[6]) - eq_(addrconv.ipv6.text_to_bin(self.adrs[1]), res[7]) - eq_(addrconv.ipv6.text_to_bin(self.adrs[2]), res[8]) - - def test_parser_with_adrs_zero(self): - nxt = 0 - size = 0 - type_ = 3 - seg = 0 - cmpi = 0 - cmpe = 0 - adrs = [] - # calculate pad - pad = (8 - ((len(adrs) - 1) * (16 - cmpi) + (16 - cmpe) % 8)) % 8 - - form = '!BBBBBB2x' - buf = struct.pack(form, nxt, size, type_, seg, - (cmpi << 4) | cmpe, pad << 4) - _res = ipv6.routing.parser(buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(nxt, res.nxt) - eq_(size, res.size) - eq_(type_, res.type_) - eq_(seg, res.seg) - eq_(cmpi, res.cmpi) - eq_(cmpe, res.cmpe) - eq_(pad, res._pad) - - def test_serialize_with_adrs_zero(self): - nxt = 0 - size = 0 - type_ = 3 - seg = 0 - cmpi = 0 - cmpe = 0 - adrs = [] - # calculate pad - pad = (8 - ((len(adrs) - 1) * (16 - cmpi) + (16 - cmpe) % 8)) % 8 - routing = ipv6.routing_type3( - nxt, size, type_, seg, cmpi, - cmpe, pad) - buf = routing.serialize() - form = '!BBBBBB2x' - res = struct.unpack_from(form, six.binary_type(buf)) - eq_(nxt, res[0]) - eq_(size, res[1]) - eq_(type_, res[2]) - eq_(seg, res[3]) - eq_(cmpi, res[4] >> 4) - eq_(cmpe, res[4] & 0xf) - eq_(pad, res[5]) - - def test_parser_with_compression(self): - pass - nxt = 0 - size = 3 - type_ = 3 - seg = 0 - cmpi = 8 - cmpe = 12 - adrs = ["2001:0db8:dead:0123:4567:89ab:cdef:0001", - "2001:0db8:dead:0123:4567:89ab:cdef:0002", - "2001:0db8:dead:0123:4567:89ab:cdef:0003"] - # calculate pad - pad = (8 - ((len(adrs) - 1) * (16 - cmpi) + (16 - cmpe) % 8)) % 8 - form = '!BBBBBB2x%ds%ds%ds' % (16 - cmpi, 16 - cmpi, 16 - cmpe) - slice_i = slice(cmpi, 16) - slice_e = slice(cmpe, 16) - buf = struct.pack(form, nxt, size, type_, seg, - (cmpi << 4) | cmpe, pad << 4, - addrconv.ipv6.text_to_bin(adrs[0])[slice_i], - addrconv.ipv6.text_to_bin(adrs[1])[slice_i], - addrconv.ipv6.text_to_bin(adrs[2])[slice_e]) - _res = ipv6.routing.parser(buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(nxt, res.nxt) - eq_(size, res.size) - eq_(type_, res.type_) - eq_(seg, res.seg) - eq_(cmpi, res.cmpi) - eq_(cmpe, res.cmpe) - eq_(pad, res._pad) - eq_("::4567:89ab:cdef:1", res.adrs[0]) - eq_("::4567:89ab:cdef:2", res.adrs[1]) - eq_("::205.239.0.3", res.adrs[2]) - - def test_serialize_with_compression(self): - nxt = 0 - size = 3 - type_ = 3 - seg = 0 - cmpi = 8 - cmpe = 8 - adrs = ["2001:db8:dead::1", - "2001:db8:dead::2", - "2001:db8:dead::3"] - # calculate pad - pad = (8 - ((len(adrs) - 1) * (16 - cmpi) + (16 - cmpe) % 8)) % 8 - slice_i = slice(cmpi, 16) - slice_e = slice(cmpe, 16) - routing = ipv6.routing_type3( - nxt, size, type_, seg, cmpi, cmpe, adrs) - buf = routing.serialize() - form = '!BBBBBB2x8s8s8s' - res = struct.unpack_from(form, six.binary_type(buf)) - eq_(nxt, res[0]) - eq_(size, res[1]) - eq_(type_, res[2]) - eq_(seg, res[3]) - eq_(cmpi, res[4] >> 4) - eq_(cmpe, res[4] & 0xf) - eq_(pad, res[5]) - eq_(addrconv.ipv6.text_to_bin(adrs[0])[slice_i], res[6]) - eq_(addrconv.ipv6.text_to_bin(adrs[1])[slice_i], res[7]) - eq_(addrconv.ipv6.text_to_bin(adrs[2])[slice_e], res[8]) - - def test_len(self): - eq_((6 + 1) * 8, len(self.routing)) - - def test_default_args(self): - hdr = ipv6.routing_type3() - buf = hdr.serialize() - LOG.info(repr(buf)) - res = struct.unpack_from(ipv6.routing_type3._PACK_STR, six.binary_type(buf)) - LOG.info(res) - - eq_(res[0], 6) - eq_(res[1], 0) - eq_(res[2], 3) - eq_(res[3], 0) - eq_(res[4], (0 << 4) | 0) - eq_(res[5], 0) - - -class Test_fragment(unittest.TestCase): - - def setUp(self): - self.nxt = 44 - self.offset = 50 - self.more = 1 - self.id_ = 123 - self.fragment = ipv6.fragment( - self.nxt, self.offset, self.more, self.id_) - - self.off_m = (self.offset << 3 | self.more) - self.form = '!BxHI' - self.buf = struct.pack(self.form, self.nxt, self.off_m, self.id_) - - def test_init(self): - eq_(self.nxt, self.fragment.nxt) - eq_(self.offset, self.fragment.offset) - eq_(self.more, self.fragment.more) - eq_(self.id_, self.fragment.id_) - - def test_parser(self): - _res = ipv6.fragment.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.nxt, res.nxt) - eq_(self.offset, res.offset) - eq_(self.more, res.more) - eq_(self.id_, res.id_) - - def test_serialize(self): - buf = self.fragment.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self.nxt, res[0]) - eq_(self.off_m, res[1]) - eq_(self.id_, res[2]) - - def test_len(self): - eq_(8, len(self.fragment)) - - def test_default_args(self): - hdr = ipv6.fragment() - buf = hdr.serialize() - res = struct.unpack_from(ipv6.fragment._PACK_STR, buf) - - eq_(res[0], 6) - eq_(res[1], 0) - eq_(res[2], 0) - - -class Test_auth(unittest.TestCase): - - def setUp(self): - self.nxt = 0 - self.size = 4 - self.spi = 256 - self.seq = 1 - self.data = b'\x21\xd3\xa9\x5c\x5f\xfd\x4d\x18\x46\x22\xb9\xf8' - self.auth = ipv6.auth( - self.nxt, self.size, self.spi, self.seq, self.data) - self.form = '!BB2xII12s' - self.buf = struct.pack(self.form, self.nxt, self.size, self.spi, - self.seq, self.data) - - def test_init(self): - eq_(self.nxt, self.auth.nxt) - eq_(self.size, self.auth.size) - eq_(self.spi, self.auth.spi) - eq_(self.seq, self.auth.seq) - eq_(self.data, self.auth.data) - - def test_parser(self): - _res = ipv6.auth.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(self.nxt, res.nxt) - eq_(self.size, res.size) - eq_(self.spi, res.spi) - eq_(self.seq, res.seq) - eq_(self.data, res.data) - - def test_serialize(self): - buf = self.auth.serialize() - res = struct.unpack_from(self.form, six.binary_type(buf)) - eq_(self.nxt, res[0]) - eq_(self.size, res[1]) - eq_(self.spi, res[2]) - eq_(self.seq, res[3]) - eq_(self.data, res[4]) - - def test_len(self): - eq_((4 + 2) * 4, len(self.auth)) - - def test_len_re(self): - size = 5 - auth = ipv6.auth( - 0, size, 256, 1, - b'\x21\xd3\xa9\x5c\x5f\xfd\x4d\x18\x46\x22\xb9\xf8\xf8\xf8\xf8\xf8') - eq_((size + 2) * 4, len(auth)) - - def test_default_args(self): - hdr = ipv6.auth() - buf = hdr.serialize() - LOG.info(repr(buf)) - res = struct.unpack_from(ipv6.auth._PACK_STR, six.binary_type(buf)) - LOG.info(res) - - eq_(res[0], 6) - eq_(res[1], 2) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(buf[ipv6.auth._MIN_LEN:], b'\x00\x00\x00\x00') diff --git a/ryu/tests/unit/packet/test_llc.py b/ryu/tests/unit/packet/test_llc.py deleted file mode 100644 index 05894ab7..00000000 --- a/ryu/tests/unit/packet/test_llc.py +++ /dev/null @@ -1,42 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging - -from nose.tools import eq_ -from ryu.lib.packet import llc - - -LOG = logging.getLogger(__name__) - - -class Test_ControlFormatI(unittest.TestCase): - msg = llc.llc(llc.SAP_BPDU, llc.SAP_BPDU, llc.ControlFormatI()) - - def test_json(self): - jsondict = self.msg.to_jsondict() - msg = llc.llc.from_jsondict(jsondict['llc']) - eq_(str(self.msg), str(msg)) - - -class Test_ControlFormatS(Test_ControlFormatI): - msg = llc.llc(llc.SAP_BPDU, llc.SAP_BPDU, llc.ControlFormatS()) - - -class Test_ControlFormatU(Test_ControlFormatI): - msg = llc.llc(llc.SAP_BPDU, llc.SAP_BPDU, llc.ControlFormatU()) diff --git a/ryu/tests/unit/packet/test_lldp.py b/ryu/tests/unit/packet/test_lldp.py deleted file mode 100644 index d8d261c2..00000000 --- a/ryu/tests/unit/packet/test_lldp.py +++ /dev/null @@ -1,533 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import six -import struct -import inspect -from nose.tools import ok_, eq_, nottest - -from ryu.ofproto import ether -from ryu.lib.packet import packet -from ryu.lib.packet import ethernet -from ryu.lib.packet import lldp -from ryu.lib import addrconv - -LOG = logging.getLogger(__name__) - - -class TestLLDPMandatoryTLV(unittest.TestCase): - def setUp(self): - # sample data is based on: - # http://wiki.wireshark.org/LinkLayerDiscoveryProtocol - # - # mandatory TLV only - self.data = b'\x01\x80\xc2\x00\x00\x0e\x00\x04' \ - + b'\x96\x1f\xa7\x26\x88\xcc\x02\x07' \ - + b'\x04\x00\x04\x96\x1f\xa7\x26\x04' \ - + b'\x04\x05\x31\x2f\x33\x06\x02\x00' \ - + b'\x78\x00\x00' - - def tearDown(self): - pass - - def test_get_tlv_type(self): - buf = b'\x02\x07\x04\x00\x04\x96\x1f\xa7\x26' - eq_(lldp.LLDPBasicTLV.get_type(buf), lldp.LLDP_TLV_CHASSIS_ID) - - def test_parse_without_ethernet(self): - buf = self.data[ethernet.ethernet._MIN_LEN:] - (lldp_pkt, cls, rest_buf) = lldp.lldp.parser(buf) - eq_(len(rest_buf), 0) - - tlvs = lldp_pkt.tlvs - eq_(tlvs[0].tlv_type, lldp.LLDP_TLV_CHASSIS_ID) - eq_(tlvs[0].len, 7) - eq_(tlvs[0].subtype, lldp.ChassisID.SUB_MAC_ADDRESS) - eq_(tlvs[0].chassis_id, b'\x00\x04\x96\x1f\xa7\x26') - eq_(tlvs[1].tlv_type, lldp.LLDP_TLV_PORT_ID) - eq_(tlvs[1].len, 4) - eq_(tlvs[1].subtype, lldp.PortID.SUB_INTERFACE_NAME) - eq_(tlvs[1].port_id, b'1/3') - eq_(tlvs[2].tlv_type, lldp.LLDP_TLV_TTL) - eq_(tlvs[2].len, 2) - eq_(tlvs[2].ttl, 120) - eq_(tlvs[3].tlv_type, lldp.LLDP_TLV_END) - - def test_parse(self): - buf = self.data - pkt = packet.Packet(buf) - i = iter(pkt) - - eq_(type(next(i)), ethernet.ethernet) - eq_(type(next(i)), lldp.lldp) - - def test_tlv(self): - tlv = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, - chassis_id=b'\x00\x04\x96\x1f\xa7\x26') - eq_(tlv.tlv_type, lldp.LLDP_TLV_CHASSIS_ID) - eq_(tlv.len, 7) - (typelen, ) = struct.unpack('!H', b'\x02\x07') - eq_(tlv.typelen, typelen) - - def test_serialize_without_ethernet(self): - tlv_chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, - chassis_id=b'\x00\x04\x96\x1f\xa7\x26') - tlv_port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, - port_id=b'1/3') - tlv_ttl = lldp.TTL(ttl=120) - tlv_end = lldp.End() - tlvs = (tlv_chassis_id, tlv_port_id, tlv_ttl, tlv_end) - lldp_pkt = lldp.lldp(tlvs) - - eq_(lldp_pkt.serialize(None, None), - self.data[ethernet.ethernet._MIN_LEN:]) - - def test_serialize(self): - pkt = packet.Packet() - - dst = lldp.LLDP_MAC_NEAREST_BRIDGE - src = '00:04:96:1f:a7:26' - ethertype = ether.ETH_TYPE_LLDP - eth_pkt = ethernet.ethernet(dst, src, ethertype) - pkt.add_protocol(eth_pkt) - - tlv_chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, - chassis_id=addrconv.mac. - text_to_bin(src)) - tlv_port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, - port_id=b'1/3') - tlv_ttl = lldp.TTL(ttl=120) - tlv_end = lldp.End() - tlvs = (tlv_chassis_id, tlv_port_id, tlv_ttl, tlv_end) - lldp_pkt = lldp.lldp(tlvs) - pkt.add_protocol(lldp_pkt) - - eq_(len(pkt.protocols), 2) - - pkt.serialize() - - # Note: If ethernet frame is less than 60 bytes length, - # ethernet.ethernet() appends padding to the payload. - # So, we splits the serialized data to compare. - data_len = len(self.data) - pkt_data_lldp = pkt.data[:data_len] - pkt_data_pad = pkt.data[data_len:] - eq_(b'\x00' * (60 - data_len), pkt_data_pad) - - eq_(self.data, pkt_data_lldp) - - def test_to_string(self): - chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, - chassis_id=b'\x00\x04\x96\x1f\xa7\x26') - port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, - port_id=b'1/3') - ttl = lldp.TTL(ttl=120) - end = lldp.End() - tlvs = (chassis_id, port_id, ttl, end) - lldp_pkt = lldp.lldp(tlvs) - - chassis_id_values = {'subtype': lldp.ChassisID.SUB_MAC_ADDRESS, - 'chassis_id': b'\x00\x04\x96\x1f\xa7\x26', - 'len': chassis_id.len, - 'typelen': chassis_id.typelen} - _ch_id_str = ','.join(['%s=%s' % (k, repr(chassis_id_values[k])) - for k, v in inspect.getmembers(chassis_id) - if k in chassis_id_values]) - tlv_chassis_id_str = '%s(%s)' % (lldp.ChassisID.__name__, _ch_id_str) - - port_id_values = {'subtype': port_id.subtype, - 'port_id': port_id.port_id, - 'len': port_id.len, - 'typelen': port_id.typelen} - _port_id_str = ','.join(['%s=%s' % (k, repr(port_id_values[k])) - for k, v in inspect.getmembers(port_id) - if k in port_id_values]) - tlv_port_id_str = '%s(%s)' % (lldp.PortID.__name__, _port_id_str) - - ttl_values = {'ttl': ttl.ttl, - 'len': ttl.len, - 'typelen': ttl.typelen} - _ttl_str = ','.join(['%s=%s' % (k, repr(ttl_values[k])) - for k, v in inspect.getmembers(ttl) - if k in ttl_values]) - tlv_ttl_str = '%s(%s)' % (lldp.TTL.__name__, _ttl_str) - - end_values = {'len': end.len, - 'typelen': end.typelen} - _end_str = ','.join(['%s=%s' % (k, repr(end_values[k])) - for k, v in inspect.getmembers(end) - if k in end_values]) - tlv_end_str = '%s(%s)' % (lldp.End.__name__, _end_str) - - _tlvs_str = '(%s, %s, %s, %s)' - tlvs_str = _tlvs_str % (tlv_chassis_id_str, - tlv_port_id_str, - tlv_ttl_str, - tlv_end_str) - - _lldp_str = '%s(tlvs=%s)' - lldp_str = _lldp_str % (lldp.lldp.__name__, - tlvs_str) - - eq_(str(lldp_pkt), lldp_str) - eq_(repr(lldp_pkt), lldp_str) - - def test_json(self): - chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, - chassis_id=b'\x00\x04\x96\x1f\xa7\x26') - port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, - port_id=b'1/3') - ttl = lldp.TTL(ttl=120) - end = lldp.End() - tlvs = (chassis_id, port_id, ttl, end) - lldp1 = lldp.lldp(tlvs) - jsondict = lldp1.to_jsondict() - lldp2 = lldp.lldp.from_jsondict(jsondict['lldp']) - eq_(str(lldp1), str(lldp2)) - - -class TestLLDPOptionalTLV(unittest.TestCase): - def setUp(self): - # sample data is based on: - # http://wiki.wireshark.org/LinkLayerDiscoveryProtocol - # - # include optional TLV - self.data = b'\x01\x80\xc2\x00\x00\x0e\x00\x01' \ - + b'\x30\xf9\xad\xa0\x88\xcc\x02\x07' \ - + b'\x04\x00\x01\x30\xf9\xad\xa0\x04' \ - + b'\x04\x05\x31\x2f\x31\x06\x02\x00' \ - + b'\x78\x08\x17\x53\x75\x6d\x6d\x69' \ - + b'\x74\x33\x30\x30\x2d\x34\x38\x2d' \ - + b'\x50\x6f\x72\x74\x20\x31\x30\x30' \ - + b'\x31\x00\x0a\x0d\x53\x75\x6d\x6d' \ - + b'\x69\x74\x33\x30\x30\x2d\x34\x38' \ - + b'\x00\x0c\x4c\x53\x75\x6d\x6d\x69' \ - + b'\x74\x33\x30\x30\x2d\x34\x38\x20' \ - + b'\x2d\x20\x56\x65\x72\x73\x69\x6f' \ - + b'\x6e\x20\x37\x2e\x34\x65\x2e\x31' \ - + b'\x20\x28\x42\x75\x69\x6c\x64\x20' \ - + b'\x35\x29\x20\x62\x79\x20\x52\x65' \ - + b'\x6c\x65\x61\x73\x65\x5f\x4d\x61' \ - + b'\x73\x74\x65\x72\x20\x30\x35\x2f' \ - + b'\x32\x37\x2f\x30\x35\x20\x30\x34' \ - + b'\x3a\x35\x33\x3a\x31\x31\x00\x0e' \ - + b'\x05\x01\x00\x14\x00\x14\x10\x0e' \ - + b'\x07' \ - + b'\x06\x00\x01\x30\xf9\xad\xa0\x02' \ - + b'\x00\x00\x03\xe9\x00\xfe\x07\x00' \ - + b'\x12\x0f\x02\x07\x01\x00\xfe\x09' \ - + b'\x00\x12\x0f\x01\x03\x6c\x00\x00' \ - + b'\x10\xfe\x09\x00\x12\x0f\x03\x01' \ - + b'\x00\x00\x00\x00\xfe\x06\x00\x12' \ - + b'\x0f\x04\x05\xf2\xfe\x06\x00\x80' \ - + b'\xc2\x01\x01\xe8\xfe\x07\x00\x80' \ - + b'\xc2\x02\x01\x00\x00\xfe\x17\x00' \ - + b'\x80\xc2\x03\x01\xe8\x10\x76\x32' \ - + b'\x2d\x30\x34\x38\x38\x2d\x30\x33' \ - + b'\x2d\x30\x35\x30\x35\x00\xfe\x05' \ - + b'\x00\x80\xc2\x04\x00\x00\x00' - - def tearDown(self): - pass - - def test_parse(self): - buf = self.data - pkt = packet.Packet(buf) - i = iter(pkt) - - eq_(type(next(i)), ethernet.ethernet) - lldp_pkt = next(i) - eq_(type(lldp_pkt), lldp.lldp) - - tlvs = lldp_pkt.tlvs - - # Port Description - eq_(tlvs[3].tlv_type, lldp.LLDP_TLV_PORT_DESCRIPTION) - eq_(tlvs[3].port_description, b'Summit300-48-Port 1001\x00') - - # System Name - eq_(tlvs[4].tlv_type, lldp.LLDP_TLV_SYSTEM_NAME) - eq_(tlvs[4].system_name, b'Summit300-48\x00') - - # System Description - - eq_(tlvs[5].tlv_type, lldp.LLDP_TLV_SYSTEM_DESCRIPTION) - eq_(tlvs[5].system_description, - b'Summit300-48 - Version 7.4e.1 (Build 5) ' - + b'by Release_Master 05/27/05 04:53:11\x00') - - # SystemCapabilities - eq_(tlvs[6].tlv_type, lldp.LLDP_TLV_SYSTEM_CAPABILITIES) - eq_(tlvs[6].subtype, lldp.ChassisID.SUB_CHASSIS_COMPONENT) - eq_(tlvs[6].system_cap & lldp.SystemCapabilities.CAP_MAC_BRIDGE, - lldp.SystemCapabilities.CAP_MAC_BRIDGE) - eq_(tlvs[6].enabled_cap & lldp.SystemCapabilities.CAP_MAC_BRIDGE, - lldp.SystemCapabilities.CAP_MAC_BRIDGE) - eq_(tlvs[6].system_cap & lldp.SystemCapabilities.CAP_TELEPHONE, 0) - eq_(tlvs[6].enabled_cap & lldp.SystemCapabilities.CAP_TELEPHONE, 0) - - # Management Address - eq_(tlvs[7].tlv_type, lldp.LLDP_TLV_MANAGEMENT_ADDRESS) - eq_(tlvs[7].addr_len, 7) - eq_(tlvs[7].addr, b'\x00\x01\x30\xf9\xad\xa0') - eq_(tlvs[7].intf_num, 1001) - - # Organizationally Specific - eq_(tlvs[8].tlv_type, lldp.LLDP_TLV_ORGANIZATIONALLY_SPECIFIC) - eq_(tlvs[8].oui, b'\x00\x12\x0f') # IEEE 802.3 - eq_(tlvs[8].subtype, 0x02) # Power Via MDI - - # End - eq_(tlvs[16].tlv_type, lldp.LLDP_TLV_END) - - def test_parse_corrupted(self): - buf = self.data - pkt = packet.Packet(buf[:128]) - - def test_serialize(self): - pkt = packet.Packet() - - dst = lldp.LLDP_MAC_NEAREST_BRIDGE - src = '00:01:30:f9:ad:a0' - ethertype = ether.ETH_TYPE_LLDP - eth_pkt = ethernet.ethernet(dst, src, ethertype) - pkt.add_protocol(eth_pkt) - - tlv_chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, - chassis_id=addrconv.mac. - text_to_bin(src)) - tlv_port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, - port_id=b'1/1') - tlv_ttl = lldp.TTL(ttl=120) - tlv_port_description = lldp.PortDescription( - port_description=b'Summit300-48-Port 1001\x00') - tlv_system_name = lldp.SystemName(system_name=b'Summit300-48\x00') - tlv_system_description = lldp.SystemDescription( - system_description=b'Summit300-48 - Version 7.4e.1 (Build 5) ' - + b'by Release_Master 05/27/05 04:53:11\x00') - tlv_system_capabilities = lldp.SystemCapabilities( - subtype=lldp.ChassisID.SUB_CHASSIS_COMPONENT, - system_cap=0x14, - enabled_cap=0x14) - tlv_management_address = lldp.ManagementAddress( - addr_subtype=0x06, addr=b'\x00\x01\x30\xf9\xad\xa0', - intf_subtype=0x02, intf_num=1001, - oid=b'') - tlv_organizationally_specific = lldp.OrganizationallySpecific( - oui=b'\x00\x12\x0f', subtype=0x02, info=b'\x07\x01\x00') - tlv_end = lldp.End() - tlvs = (tlv_chassis_id, tlv_port_id, tlv_ttl, tlv_port_description, - tlv_system_name, tlv_system_description, - tlv_system_capabilities, tlv_management_address, - tlv_organizationally_specific, tlv_end) - lldp_pkt = lldp.lldp(tlvs) - pkt.add_protocol(lldp_pkt) - - eq_(len(pkt.protocols), 2) - - pkt.serialize() - - # self.data has many organizationally specific TLVs - data = six.binary_type(pkt.data[:-2]) - eq_(data, self.data[:len(data)]) - - def test_to_string(self): - chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, - chassis_id=b'\x00\x01\x30\xf9\xad\xa0') - port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, - port_id=b'1/1') - ttl = lldp.TTL(ttl=120) - port_desc = lldp.PortDescription( - port_description=b'Summit300-48-Port 1001\x00') - sys_name = lldp.SystemName(system_name=b'Summit300-48\x00') - sys_desc = lldp.SystemDescription( - system_description=b'Summit300-48 - Version 7.4e.1 (Build 5) ' - + b'by Release_Master 05/27/05 04:53:11\x00') - sys_cap = lldp.SystemCapabilities( - subtype=lldp.ChassisID.SUB_CHASSIS_COMPONENT, - system_cap=0x14, - enabled_cap=0x14) - man_addr = lldp.ManagementAddress( - addr_subtype=0x06, addr=b'\x00\x01\x30\xf9\xad\xa0', - intf_subtype=0x02, intf_num=1001, - oid='') - org_spec = lldp.OrganizationallySpecific( - oui=b'\x00\x12\x0f', subtype=0x02, info=b'\x07\x01\x00') - end = lldp.End() - tlvs = (chassis_id, port_id, ttl, port_desc, sys_name, - sys_desc, sys_cap, man_addr, org_spec, end) - lldp_pkt = lldp.lldp(tlvs) - - # ChassisID string - chassis_id_values = {'subtype': lldp.ChassisID.SUB_MAC_ADDRESS, - 'chassis_id': b'\x00\x01\x30\xf9\xad\xa0', - 'len': chassis_id.len, - 'typelen': chassis_id.typelen} - _ch_id_str = ','.join(['%s=%s' % (k, repr(chassis_id_values[k])) - for k, v in inspect.getmembers(chassis_id) - if k in chassis_id_values]) - tlv_chassis_id_str = '%s(%s)' % (lldp.ChassisID.__name__, _ch_id_str) - - # PortID string - port_id_values = {'subtype': port_id.subtype, - 'port_id': port_id.port_id, - 'len': port_id.len, - 'typelen': port_id.typelen} - _port_id_str = ','.join(['%s=%s' % (k, repr(port_id_values[k])) - for k, v in inspect.getmembers(port_id) - if k in port_id_values]) - tlv_port_id_str = '%s(%s)' % (lldp.PortID.__name__, _port_id_str) - - # TTL string - ttl_values = {'ttl': ttl.ttl, - 'len': ttl.len, - 'typelen': ttl.typelen} - _ttl_str = ','.join(['%s=%s' % (k, repr(ttl_values[k])) - for k, v in inspect.getmembers(ttl) - if k in ttl_values]) - tlv_ttl_str = '%s(%s)' % (lldp.TTL.__name__, _ttl_str) - - # PortDescription string - port_desc_values = {'tlv_info': port_desc.tlv_info, - 'len': port_desc.len, - 'typelen': port_desc.typelen} - _port_desc_str = ','.join(['%s=%s' % (k, repr(port_desc_values[k])) - for k, v in inspect.getmembers(port_desc) - if k in port_desc_values]) - tlv_port_desc_str = '%s(%s)' % (lldp.PortDescription.__name__, - _port_desc_str) - - # SystemName string - sys_name_values = {'tlv_info': sys_name.tlv_info, - 'len': sys_name.len, - 'typelen': sys_name.typelen} - _system_name_str = ','.join(['%s=%s' % (k, repr(sys_name_values[k])) - for k, v in inspect.getmembers(sys_name) - if k in sys_name_values]) - tlv_system_name_str = '%s(%s)' % (lldp.SystemName.__name__, - _system_name_str) - - # SystemDescription string - sys_desc_values = {'tlv_info': sys_desc.tlv_info, - 'len': sys_desc.len, - 'typelen': sys_desc.typelen} - _sys_desc_str = ','.join(['%s=%s' % (k, repr(sys_desc_values[k])) - for k, v in inspect.getmembers(sys_desc) - if k in sys_desc_values]) - tlv_sys_desc_str = '%s(%s)' % (lldp.SystemDescription.__name__, - _sys_desc_str) - - # SystemCapabilities string - sys_cap_values = {'subtype': lldp.ChassisID.SUB_CHASSIS_COMPONENT, - 'system_cap': 0x14, - 'enabled_cap': 0x14, - 'len': sys_cap.len, - 'typelen': sys_cap.typelen} - _sys_cap_str = ','.join(['%s=%s' % (k, repr(sys_cap_values[k])) - for k, v in inspect.getmembers(sys_cap) - if k in sys_cap_values]) - tlv_sys_cap_str = '%s(%s)' % (lldp.SystemCapabilities.__name__, - _sys_cap_str) - - # ManagementAddress string - man_addr_values = {'addr_subtype': 0x06, - 'addr': b'\x00\x01\x30\xf9\xad\xa0', - 'addr_len': man_addr.addr_len, - 'intf_subtype': 0x02, - 'intf_num': 1001, - 'oid': '', - 'oid_len': man_addr.oid_len, - 'len': man_addr.len, - 'typelen': man_addr.typelen} - _man_addr_str = ','.join(['%s=%s' % (k, repr(man_addr_values[k])) - for k, v in inspect.getmembers(man_addr) - if k in man_addr_values]) - tlv_man_addr_str = '%s(%s)' % (lldp.ManagementAddress.__name__, - _man_addr_str) - - # OrganizationallySpecific string - org_spec_values = {'oui': b'\x00\x12\x0f', - 'subtype': 0x02, - 'info': b'\x07\x01\x00', - 'len': org_spec.len, - 'typelen': org_spec.typelen} - _org_spec_str = ','.join(['%s=%s' % (k, repr(org_spec_values[k])) - for k, v in inspect.getmembers(org_spec) - if k in org_spec_values]) - tlv_org_spec_str = '%s(%s)' % (lldp.OrganizationallySpecific.__name__, - _org_spec_str) - - # End string - end_values = {'len': end.len, - 'typelen': end.typelen} - _end_str = ','.join(['%s=%s' % (k, repr(end_values[k])) - for k, v in inspect.getmembers(end) - if k in end_values]) - tlv_end_str = '%s(%s)' % (lldp.End.__name__, _end_str) - - # tlvs string - _tlvs_str = '(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)' - tlvs_str = _tlvs_str % (tlv_chassis_id_str, - tlv_port_id_str, - tlv_ttl_str, - tlv_port_desc_str, - tlv_system_name_str, - tlv_sys_desc_str, - tlv_sys_cap_str, - tlv_man_addr_str, - tlv_org_spec_str, - tlv_end_str) - - # lldp string - _lldp_str = '%s(tlvs=%s)' - lldp_str = _lldp_str % (lldp.lldp.__name__, - tlvs_str) - - eq_(str(lldp_pkt), lldp_str) - eq_(repr(lldp_pkt), lldp_str) - - def test_json(self): - chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, - chassis_id=b'\x00\x01\x30\xf9\xad\xa0') - port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, - port_id=b'1/1') - ttl = lldp.TTL(ttl=120) - port_desc = lldp.PortDescription( - port_description=b'Summit300-48-Port 1001\x00') - sys_name = lldp.SystemName(system_name=b'Summit300-48\x00') - sys_desc = lldp.SystemDescription( - system_description=b'Summit300-48 - Version 7.4e.1 (Build 5) ' - + b'by Release_Master 05/27/05 04:53:11\x00') - sys_cap = lldp.SystemCapabilities( - subtype=lldp.ChassisID.SUB_CHASSIS_COMPONENT, - system_cap=0x14, - enabled_cap=0x14) - man_addr = lldp.ManagementAddress( - addr_subtype=0x06, addr=b'\x00\x01\x30\xf9\xad\xa0', - intf_subtype=0x02, intf_num=1001, - oid='') - org_spec = lldp.OrganizationallySpecific( - oui=b'\x00\x12\x0f', subtype=0x02, info=b'\x07\x01\x00') - end = lldp.End() - tlvs = (chassis_id, port_id, ttl, port_desc, sys_name, - sys_desc, sys_cap, man_addr, org_spec, end) - lldp1 = lldp.lldp(tlvs) - jsondict = lldp1.to_jsondict() - lldp2 = lldp.lldp.from_jsondict(jsondict['lldp']) - eq_(str(lldp1), str(lldp2)) diff --git a/ryu/tests/unit/packet/test_mpls.py b/ryu/tests/unit/packet/test_mpls.py deleted file mode 100644 index e3f9bccf..00000000 --- a/ryu/tests/unit/packet/test_mpls.py +++ /dev/null @@ -1,92 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import unittest -import logging -import inspect - -from nose.tools import eq_ -from ryu.lib.packet import mpls - - -LOG = logging.getLogger(__name__) - - -class Test_mpls(unittest.TestCase): - - label = 29 - exp = 6 - bsb = 1 - ttl = 64 - mp = mpls.mpls(label, exp, bsb, ttl) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_to_string(self): - mpls_values = {'label': self.label, - 'exp': self.exp, - 'bsb': self.bsb, - 'ttl': self.ttl} - _mpls_str = ','.join(['%s=%s' % (k, repr(mpls_values[k])) - for k, v in inspect.getmembers(self.mp) - if k in mpls_values]) - mpls_str = '%s(%s)' % (mpls.mpls.__name__, _mpls_str) - - eq_(str(self.mp), mpls_str) - eq_(repr(self.mp), mpls_str) - - def test_json(self): - jsondict = self.mp.to_jsondict() - mp = mpls.mpls.from_jsondict(jsondict['mpls']) - eq_(str(self.mp), str(mp)) - - def test_label_from_bin_true(self): - mpls_label = 0xfffff - is_bos = True - buf = b'\xff\xff\xf1' - mpls_label_out, is_bos_out = mpls.label_from_bin(buf) - - eq_(mpls_label, mpls_label_out) - eq_(is_bos, is_bos_out) - - def test_label_from_bin_false(self): - mpls_label = 0xfffff - is_bos = False - buf = b'\xff\xff\xf0' - mpls_label_out, is_bos_out = mpls.label_from_bin(buf) - - eq_(mpls_label, mpls_label_out) - eq_(is_bos, is_bos_out) - - def test_label_to_bin_true(self): - mpls_label = 0xfffff - is_bos = True - label = b'\xff\xff\xf1' - label_out = mpls.label_to_bin(mpls_label, is_bos) - - eq_(label, label_out) - - def test_label_to_bin_false(self): - mpls_label = 0xfffff - is_bos = False - label = b'\xff\xff\xf0' - label_out = mpls.label_to_bin(mpls_label, is_bos) - - eq_(label, label_out) diff --git a/ryu/tests/unit/packet/test_openflow.py b/ryu/tests/unit/packet/test_openflow.py deleted file mode 100644 index b0dca25f..00000000 --- a/ryu/tests/unit/packet/test_openflow.py +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright (C) 2017 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import logging -import os -import sys - -import unittest -from nose.tools import eq_ -from nose.tools import ok_ - -from ryu.lib import pcaplib -from ryu.lib.packet import openflow -from ryu.lib.packet import packet -from ryu.utils import binary_str - - -LOG = logging.getLogger(__name__) - -OPENFLOW_DATA_DIR = os.path.join( - os.path.dirname(sys.modules[__name__].__file__), - '../../packet_data/pcap/') - - -class Test_openflow(unittest.TestCase): - """ - Test case for ryu.lib.packet.openflow. - """ - - def test_pcap(self): - files = [ - 'openflow_flowmod', - 'openflow_flowstats_req', - 'openflow_invalid_version', - ] - - for f in files: - # print('*** testing %s ...' % f) - for _, buf in pcaplib.Reader( - open(OPENFLOW_DATA_DIR + f + '.pcap', 'rb')): - # Checks if message can be parsed as expected. - pkt = packet.Packet(buf) - openflow_pkt = pkt.get_protocol(openflow.openflow) - ok_(isinstance(openflow_pkt, openflow.openflow), - 'Failed to parse OpenFlow message: %s' % pkt) - - # Checks if message can be serialized as expected. - pkt.serialize() - eq_(buf, pkt.data, - "b'%s' != b'%s'" % (binary_str(buf), binary_str(pkt.data))) diff --git a/ryu/tests/unit/packet/test_ospf.py b/ryu/tests/unit/packet/test_ospf.py deleted file mode 100644 index df57b8de..00000000 --- a/ryu/tests/unit/packet/test_ospf.py +++ /dev/null @@ -1,120 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -from nose.tools import eq_ -from nose.tools import ok_ - -from ryu.lib.packet import ospf - - -class Test_ospf(unittest.TestCase): - """ Test case for ryu.lib.packet.ospf - """ - def setUp(self): - pass - - def tearDown(self): - pass - - def test_router_lsa(self): - link1 = ospf.RouterLSA.Link(id_='10.0.0.1', data='255.255.255.0', - type_=ospf.LSA_LINK_TYPE_STUB, metric=10) - msg = ospf.RouterLSA(id_='192.168.0.1', adv_router='192.168.0.2', - links=[link1]) - binmsg = msg.serialize() - msg2, cls, rest = ospf.LSA.parser(binmsg) - eq_(msg.header.checksum, msg2.header.checksum) - eq_(str(msg), str(msg2)) - eq_(rest, b'') - - def test_network_lsa(self): - msg = ospf.NetworkLSA(id_='192.168.0.1', adv_router='192.168.0.2', - mask='255.255.255.0', routers=['192.168.0.2']) - binmsg = msg.serialize() - msg2, cls, rest = ospf.LSA.parser(binmsg) - eq_(msg.header.checksum, msg2.header.checksum) - eq_(str(msg), str(msg2)) - eq_(rest, b'') - - def test_as_external_lsa(self): - extnw1 = ospf.ASExternalLSA.ExternalNetwork(mask='255.255.255.0', - metric=20, - fwd_addr='10.0.0.1') - msg = ospf.ASExternalLSA(id_='192.168.0.1', adv_router='192.168.0.2', - extnws=[extnw1]) - binmsg = msg.serialize() - msg2, cls, rest = ospf.LSA.parser(binmsg) - eq_(msg.header.checksum, msg2.header.checksum) - eq_(str(msg), str(msg2)) - eq_(rest, b'') - - def test_hello(self): - msg = ospf.OSPFHello(router_id='192.168.0.1', - neighbors=['192.168.0.2']) - binmsg = msg.serialize() - msg2, cls, rest = ospf.OSPFMessage.parser(binmsg) - eq_(msg.checksum, msg2.checksum) - eq_(str(msg), str(msg2)) - eq_(rest, b'') - - def test_dbdesc(self): - link1 = ospf.RouterLSA.Link(id_='10.0.0.1', data='255.255.255.0', - type_=ospf.LSA_LINK_TYPE_STUB, metric=10) - lsa1 = ospf.RouterLSA(id_='192.168.0.1', adv_router='192.168.0.2', - links=[link1]) - msg = ospf.OSPFDBDesc(router_id='192.168.0.1', - lsa_headers=[lsa1.header]) - binmsg = msg.serialize() - msg2, cls, rest = ospf.OSPFMessage.parser(binmsg) - eq_(msg.checksum, msg2.checksum) - eq_(str(msg), str(msg2)) - eq_(rest, b'') - - def test_lsreq(self): - req = ospf.OSPFLSReq.Request(type_=ospf.OSPF_ROUTER_LSA, - id_='192.168.0.1', - adv_router='192.168.0.2') - msg = ospf.OSPFLSReq(router_id='192.168.0.1', lsa_requests=[req]) - binmsg = msg.serialize() - msg2, cls, rest = ospf.OSPFMessage.parser(binmsg) - eq_(msg.checksum, msg2.checksum) - eq_(str(msg), str(msg2)) - eq_(rest, b'') - - def test_lsupd(self): - link1 = ospf.RouterLSA.Link(id_='10.0.0.1', data='255.255.255.0', - type_=ospf.LSA_LINK_TYPE_STUB, metric=10) - lsa1 = ospf.RouterLSA(id_='192.168.0.1', adv_router='192.168.0.2', - links=[link1]) - msg = ospf.OSPFLSUpd(router_id='192.168.0.1', lsas=[lsa1]) - binmsg = msg.serialize() - msg2, cls, rest = ospf.OSPFMessage.parser(binmsg) - eq_(msg.checksum, msg2.checksum) - eq_(str(msg), str(msg2)) - eq_(rest, b'') - - def test_lsack(self): - link1 = ospf.RouterLSA.Link(id_='10.0.0.1', data='255.255.255.0', - type_=ospf.LSA_LINK_TYPE_STUB, metric=10) - lsa1 = ospf.RouterLSA(id_='192.168.0.1', adv_router='192.168.0.2', - links=[link1]) - msg = ospf.OSPFLSAck(router_id='192.168.0.1', - lsa_headers=[lsa1.header]) - binmsg = msg.serialize() - msg2, cls, rest = ospf.OSPFMessage.parser(binmsg) - eq_(msg.checksum, msg2.checksum) - eq_(str(msg), str(msg2)) - eq_(rest, b'') diff --git a/ryu/tests/unit/packet/test_packet.py b/ryu/tests/unit/packet/test_packet.py deleted file mode 100644 index 1b4c704b..00000000 --- a/ryu/tests/unit/packet/test_packet.py +++ /dev/null @@ -1,1553 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import struct -import inspect -from nose.tools import ok_, eq_ -import six -from ryu.ofproto import ether, inet -from ryu.lib.packet import arp -from ryu.lib.packet import bpdu -from ryu.lib.packet import ethernet -from ryu.lib.packet import icmp, icmpv6 -from ryu.lib.packet import ipv4, ipv6 -from ryu.lib.packet import llc -from ryu.lib.packet import packet, packet_utils -from ryu.lib.packet import sctp -from ryu.lib.packet import tcp, udp -from ryu.lib.packet import vlan -from ryu.lib import addrconv - - -LOG = logging.getLogger('test_packet') - - -class TestPacket(unittest.TestCase): - """ Test case for packet - """ - - dst_mac = 'aa:aa:aa:aa:aa:aa' - src_mac = 'bb:bb:bb:bb:bb:bb' - dst_mac_bin = addrconv.mac.text_to_bin(dst_mac) - src_mac_bin = addrconv.mac.text_to_bin(src_mac) - dst_ip = '192.168.128.10' - src_ip = '192.168.122.20' - dst_ip_bin = addrconv.ipv4.text_to_bin(dst_ip) - src_port = 50001 - dst_port = 50002 - src_ip_bin = addrconv.ipv4.text_to_bin(src_ip) - payload = b'\x06\x06\x47\x50\x00\x00\x00\x00' \ - + b'\xcd\xc5\x00\x00\x00\x00\x00\x00' \ - + b'\x10\x11\x12\x13\x14\x15\x16\x17' \ - + b'\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' - - def get_protocols(self, pkt): - protocols = {} - for p in pkt: - if hasattr(p, 'protocol_name'): - protocols[p.protocol_name] = p - else: - protocols['payload'] = p - return protocols - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_arp(self): - # buid packet - e = ethernet.ethernet(self.dst_mac, self.src_mac, - ether.ETH_TYPE_ARP) - a = arp.arp(1, ether.ETH_TYPE_IP, 6, 4, 2, - self.src_mac, self.src_ip, self.dst_mac, - self.dst_ip) - p = packet.Packet() - p.add_protocol(e) - p.add_protocol(a) - p.serialize() - - # ethernet !6s6sH - e_buf = self.dst_mac_bin \ - + self.src_mac_bin \ - + b'\x08\x06' - - # arp !HHBBH6sI6sI - a_buf = b'\x00\x01' \ - + b'\x08\x00' \ - + b'\x06' \ - + b'\x04' \ - + b'\x00\x02' \ - + self.src_mac_bin \ - + self.src_ip_bin \ - + self.dst_mac_bin \ - + self.dst_ip_bin - - buf = e_buf + a_buf - - # Append padding if ethernet frame is less than 60 bytes length - pad_len = 60 - len(buf) - if pad_len > 0: - buf += b'\x00' * pad_len - eq_(buf, p.data) - - # parse - pkt = packet.Packet(p.data) - protocols = self.get_protocols(pkt) - p_eth = protocols['ethernet'] - p_arp = protocols['arp'] - - # ethernet - ok_(p_eth) - eq_(self.dst_mac, p_eth.dst) - eq_(self.src_mac, p_eth.src) - eq_(ether.ETH_TYPE_ARP, p_eth.ethertype) - - # arp - ok_(p_arp) - eq_(1, p_arp.hwtype) - eq_(ether.ETH_TYPE_IP, p_arp.proto) - eq_(6, p_arp.hlen) - eq_(4, p_arp.plen) - eq_(2, p_arp.opcode) - eq_(self.src_mac, p_arp.src_mac) - eq_(self.src_ip, p_arp.src_ip) - eq_(self.dst_mac, p_arp.dst_mac) - eq_(self.dst_ip, p_arp.dst_ip) - - # to string - eth_values = {'dst': self.dst_mac, - 'src': self.src_mac, - 'ethertype': ether.ETH_TYPE_ARP} - _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) - for k, v in inspect.getmembers(p_eth) - if k in eth_values]) - eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) - - arp_values = {'hwtype': 1, - 'proto': ether.ETH_TYPE_IP, - 'hlen': 6, - 'plen': 4, - 'opcode': 2, - 'src_mac': self.src_mac, - 'dst_mac': self.dst_mac, - 'src_ip': self.src_ip, - 'dst_ip': self.dst_ip} - _arp_str = ','.join(['%s=%s' % (k, repr(arp_values[k])) - for k, v in inspect.getmembers(p_arp) - if k in arp_values]) - arp_str = '%s(%s)' % (arp.arp.__name__, _arp_str) - - pkt_str = '%s, %s' % (eth_str, arp_str) - - eq_(eth_str, str(p_eth)) - eq_(eth_str, repr(p_eth)) - - eq_(arp_str, str(p_arp)) - eq_(arp_str, repr(p_arp)) - - eq_(pkt_str, str(pkt)) - eq_(pkt_str, repr(pkt)) - - def test_vlan_arp(self): - # buid packet - e = ethernet.ethernet(self.dst_mac, self.src_mac, - ether.ETH_TYPE_8021Q) - v = vlan.vlan(0b111, 0b1, 3, ether.ETH_TYPE_ARP) - a = arp.arp(1, ether.ETH_TYPE_IP, 6, 4, 2, - self.src_mac, self.src_ip, self.dst_mac, - self.dst_ip) - p = packet.Packet() - p.add_protocol(e) - p.add_protocol(v) - p.add_protocol(a) - p.serialize() - - # ethernet !6s6sH - e_buf = self.dst_mac_bin \ - + self.src_mac_bin \ - + b'\x81\x00' - - # vlan !HH - v_buf = b'\xF0\x03' \ - + b'\x08\x06' - - # arp !HHBBH6sI6sI - a_buf = b'\x00\x01' \ - + b'\x08\x00' \ - + b'\x06' \ - + b'\x04' \ - + b'\x00\x02' \ - + self.src_mac_bin \ - + self.src_ip_bin \ - + self.dst_mac_bin \ - + self.dst_ip_bin - - buf = e_buf + v_buf + a_buf - - # Append padding if ethernet frame is less than 60 bytes length - pad_len = 60 - len(buf) - if pad_len > 0: - buf += b'\x00' * pad_len - eq_(buf, p.data) - - # parse - pkt = packet.Packet(p.data) - protocols = self.get_protocols(pkt) - p_eth = protocols['ethernet'] - p_vlan = protocols['vlan'] - p_arp = protocols['arp'] - - # ethernet - ok_(p_eth) - eq_(self.dst_mac, p_eth.dst) - eq_(self.src_mac, p_eth.src) - eq_(ether.ETH_TYPE_8021Q, p_eth.ethertype) - - # vlan - ok_(p_vlan) - eq_(0b111, p_vlan.pcp) - eq_(0b1, p_vlan.cfi) - eq_(3, p_vlan.vid) - eq_(ether.ETH_TYPE_ARP, p_vlan.ethertype) - - # arp - ok_(p_arp) - eq_(1, p_arp.hwtype) - eq_(ether.ETH_TYPE_IP, p_arp.proto) - eq_(6, p_arp.hlen) - eq_(4, p_arp.plen) - eq_(2, p_arp.opcode) - eq_(self.src_mac, p_arp.src_mac) - eq_(self.src_ip, p_arp.src_ip) - eq_(self.dst_mac, p_arp.dst_mac) - eq_(self.dst_ip, p_arp.dst_ip) - - # to string - eth_values = {'dst': self.dst_mac, - 'src': self.src_mac, - 'ethertype': ether.ETH_TYPE_8021Q} - _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) - for k, v in inspect.getmembers(p_eth) - if k in eth_values]) - eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) - - vlan_values = {'pcp': 0b111, - 'cfi': 0b1, - 'vid': 3, - 'ethertype': ether.ETH_TYPE_ARP} - _vlan_str = ','.join(['%s=%s' % (k, repr(vlan_values[k])) - for k, v in inspect.getmembers(p_vlan) - if k in vlan_values]) - vlan_str = '%s(%s)' % (vlan.vlan.__name__, _vlan_str) - - arp_values = {'hwtype': 1, - 'proto': ether.ETH_TYPE_IP, - 'hlen': 6, - 'plen': 4, - 'opcode': 2, - 'src_mac': self.src_mac, - 'dst_mac': self.dst_mac, - 'src_ip': self.src_ip, - 'dst_ip': self.dst_ip} - _arp_str = ','.join(['%s=%s' % (k, repr(arp_values[k])) - for k, v in inspect.getmembers(p_arp) - if k in arp_values]) - arp_str = '%s(%s)' % (arp.arp.__name__, _arp_str) - - pkt_str = '%s, %s, %s' % (eth_str, vlan_str, arp_str) - - eq_(eth_str, str(p_eth)) - eq_(eth_str, repr(p_eth)) - - eq_(vlan_str, str(p_vlan)) - eq_(vlan_str, repr(p_vlan)) - - eq_(arp_str, str(p_arp)) - eq_(arp_str, repr(p_arp)) - - eq_(pkt_str, str(pkt)) - eq_(pkt_str, repr(pkt)) - - def test_ipv4_udp(self): - # buid packet - e = ethernet.ethernet(self.dst_mac, self.src_mac, - ether.ETH_TYPE_IP) - ip = ipv4.ipv4(4, 5, 1, 0, 3, 1, 4, 64, inet.IPPROTO_UDP, 0, - self.src_ip, self.dst_ip) - u = udp.udp(0x190F, 0x1F90, 0, 0) - - p = packet.Packet() - p.add_protocol(e) - p.add_protocol(ip) - p.add_protocol(u) - p.add_protocol(self.payload) - p.serialize() - - # ethernet !6s6sH - e_buf = self.dst_mac_bin \ - + self.src_mac_bin \ - + b'\x08\x00' - - # ipv4 !BBHHHBBHII - ip_buf = b'\x45' \ - + b'\x01' \ - + b'\x00\x3C' \ - + b'\x00\x03' \ - + b'\x20\x04' \ - + b'\x40' \ - + b'\x11' \ - + b'\x00\x00' \ - + self.src_ip_bin \ - + self.dst_ip_bin - - # udp !HHHH - u_buf = b'\x19\x0F' \ - + b'\x1F\x90' \ - + b'\x00\x28' \ - + b'\x00\x00' - - buf = e_buf + ip_buf + u_buf + self.payload - - # parse - pkt = packet.Packet(p.data) - protocols = self.get_protocols(pkt) - p_eth = protocols['ethernet'] - p_ipv4 = protocols['ipv4'] - p_udp = protocols['udp'] - - # ethernet - ok_(p_eth) - eq_(self.dst_mac, p_eth.dst) - eq_(self.src_mac, p_eth.src) - eq_(ether.ETH_TYPE_IP, p_eth.ethertype) - - # ipv4 - ok_(p_ipv4) - eq_(4, p_ipv4.version) - eq_(5, p_ipv4.header_length) - eq_(1, p_ipv4.tos) - l = len(ip_buf) + len(u_buf) + len(self.payload) - eq_(l, p_ipv4.total_length) - eq_(3, p_ipv4.identification) - eq_(1, p_ipv4.flags) - eq_(64, p_ipv4.ttl) - eq_(inet.IPPROTO_UDP, p_ipv4.proto) - eq_(self.src_ip, p_ipv4.src) - eq_(self.dst_ip, p_ipv4.dst) - t = bytearray(ip_buf) - struct.pack_into('!H', t, 10, p_ipv4.csum) - eq_(packet_utils.checksum(t), 0) - - # udp - ok_(p_udp) - eq_(0x190f, p_udp.src_port) - eq_(0x1F90, p_udp.dst_port) - eq_(len(u_buf) + len(self.payload), p_udp.total_length) - eq_(0x77b2, p_udp.csum) - t = bytearray(u_buf) - struct.pack_into('!H', t, 6, p_udp.csum) - ph = struct.pack('!4s4sBBH', self.src_ip_bin, self.dst_ip_bin, 0, - 17, len(u_buf) + len(self.payload)) - t = ph + t + self.payload - eq_(packet_utils.checksum(t), 0) - - # payload - ok_('payload' in protocols) - eq_(self.payload, protocols['payload']) - - # to string - eth_values = {'dst': self.dst_mac, - 'src': self.src_mac, - 'ethertype': ether.ETH_TYPE_IP} - _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) - for k, v in inspect.getmembers(p_eth) - if k in eth_values]) - eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) - - ipv4_values = {'version': 4, - 'header_length': 5, - 'tos': 1, - 'total_length': l, - 'identification': 3, - 'flags': 1, - 'offset': p_ipv4.offset, - 'ttl': 64, - 'proto': inet.IPPROTO_UDP, - 'csum': p_ipv4.csum, - 'src': self.src_ip, - 'dst': self.dst_ip, - 'option': None} - _ipv4_str = ','.join(['%s=%s' % (k, repr(ipv4_values[k])) - for k, v in inspect.getmembers(p_ipv4) - if k in ipv4_values]) - ipv4_str = '%s(%s)' % (ipv4.ipv4.__name__, _ipv4_str) - - udp_values = {'src_port': 0x190f, - 'dst_port': 0x1F90, - 'total_length': len(u_buf) + len(self.payload), - 'csum': 0x77b2} - _udp_str = ','.join(['%s=%s' % (k, repr(udp_values[k])) - for k, v in inspect.getmembers(p_udp) - if k in udp_values]) - udp_str = '%s(%s)' % (udp.udp.__name__, _udp_str) - - pkt_str = '%s, %s, %s, %s' % (eth_str, ipv4_str, udp_str, - repr(protocols['payload'])) - - eq_(eth_str, str(p_eth)) - eq_(eth_str, repr(p_eth)) - - eq_(ipv4_str, str(p_ipv4)) - eq_(ipv4_str, repr(p_ipv4)) - - eq_(udp_str, str(p_udp)) - eq_(udp_str, repr(p_udp)) - - eq_(pkt_str, str(pkt)) - eq_(pkt_str, repr(pkt)) - - def test_ipv4_tcp(self): - # buid packet - e = ethernet.ethernet(self.dst_mac, self.src_mac, - ether.ETH_TYPE_IP) - ip = ipv4.ipv4(4, 5, 0, 0, 0, 0, 0, 64, inet.IPPROTO_TCP, 0, - self.src_ip, self.dst_ip) - t = tcp.tcp(0x190F, 0x1F90, 0x123, 1, 6, 0b101010, 2048, 0, 0x6f, - b'\x01\x02') - - p = packet.Packet() - p.add_protocol(e) - p.add_protocol(ip) - p.add_protocol(t) - p.add_protocol(self.payload) - p.serialize() - - # ethernet !6s6sH - e_buf = self.dst_mac_bin \ - + self.src_mac_bin \ - + b'\x08\x00' - - # ipv4 !BBHHHBBHII - ip_buf = b'\x45' \ - + b'\x00' \ - + b'\x00\x4C' \ - + b'\x00\x00' \ - + b'\x00\x00' \ - + b'\x40' \ - + b'\x06' \ - + b'\x00\x00' \ - + self.src_ip_bin \ - + self.dst_ip_bin - - # tcp !HHIIBBHHH + option - t_buf = b'\x19\x0F' \ - + b'\x1F\x90' \ - + b'\x00\x00\x01\x23' \ - + b'\x00\x00\x00\x01' \ - + b'\x60' \ - + b'\x2A' \ - + b'\x08\x00' \ - + b'\x00\x00' \ - + b'\x00\x6F' \ - + b'\x01\x02\x00\x00' - - buf = e_buf + ip_buf + t_buf + self.payload - - # parse - pkt = packet.Packet(p.data) - protocols = self.get_protocols(pkt) - p_eth = protocols['ethernet'] - p_ipv4 = protocols['ipv4'] - p_tcp = protocols['tcp'] - - # ethernet - ok_(p_eth) - eq_(self.dst_mac, p_eth.dst) - eq_(self.src_mac, p_eth.src) - eq_(ether.ETH_TYPE_IP, p_eth.ethertype) - - # ipv4 - ok_(p_ipv4) - eq_(4, p_ipv4.version) - eq_(5, p_ipv4.header_length) - eq_(0, p_ipv4.tos) - l = len(ip_buf) + len(t_buf) + len(self.payload) - eq_(l, p_ipv4.total_length) - eq_(0, p_ipv4.identification) - eq_(0, p_ipv4.flags) - eq_(64, p_ipv4.ttl) - eq_(inet.IPPROTO_TCP, p_ipv4.proto) - eq_(self.src_ip, p_ipv4.src) - eq_(self.dst_ip, p_ipv4.dst) - t = bytearray(ip_buf) - struct.pack_into('!H', t, 10, p_ipv4.csum) - eq_(packet_utils.checksum(t), 0) - - # tcp - ok_(p_tcp) - eq_(0x190f, p_tcp.src_port) - eq_(0x1F90, p_tcp.dst_port) - eq_(0x123, p_tcp.seq) - eq_(1, p_tcp.ack) - eq_(6, p_tcp.offset) - eq_(0b101010, p_tcp.bits) - eq_(2048, p_tcp.window_size) - eq_(0x6f, p_tcp.urgent) - eq_(len(t_buf), len(p_tcp)) - t = bytearray(t_buf) - struct.pack_into('!H', t, 16, p_tcp.csum) - ph = struct.pack('!4s4sBBH', self.src_ip_bin, self.dst_ip_bin, 0, - 6, len(t_buf) + len(self.payload)) - t = ph + t + self.payload - eq_(packet_utils.checksum(t), 0) - - # payload - ok_('payload' in protocols) - eq_(self.payload, protocols['payload']) - - # to string - eth_values = {'dst': self.dst_mac, - 'src': self.src_mac, - 'ethertype': ether.ETH_TYPE_IP} - _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) - for k, v in inspect.getmembers(p_eth) - if k in eth_values]) - eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) - - ipv4_values = {'version': 4, - 'header_length': 5, - 'tos': 0, - 'total_length': l, - 'identification': 0, - 'flags': 0, - 'offset': p_ipv4.offset, - 'ttl': 64, - 'proto': inet.IPPROTO_TCP, - 'csum': p_ipv4.csum, - 'src': self.src_ip, - 'dst': self.dst_ip, - 'option': None} - _ipv4_str = ','.join(['%s=%s' % (k, repr(ipv4_values[k])) - for k, v in inspect.getmembers(p_ipv4) - if k in ipv4_values]) - ipv4_str = '%s(%s)' % (ipv4.ipv4.__name__, _ipv4_str) - - tcp_values = {'src_port': 0x190f, - 'dst_port': 0x1F90, - 'seq': 0x123, - 'ack': 1, - 'offset': 6, - 'bits': 0b101010, - 'window_size': 2048, - 'csum': p_tcp.csum, - 'urgent': 0x6f, - 'option': p_tcp.option} - _tcp_str = ','.join(['%s=%s' % (k, repr(tcp_values[k])) - for k, v in inspect.getmembers(p_tcp) - if k in tcp_values]) - tcp_str = '%s(%s)' % (tcp.tcp.__name__, _tcp_str) - - pkt_str = '%s, %s, %s, %s' % (eth_str, ipv4_str, tcp_str, - repr(protocols['payload'])) - - eq_(eth_str, str(p_eth)) - eq_(eth_str, repr(p_eth)) - - eq_(ipv4_str, str(p_ipv4)) - eq_(ipv4_str, repr(p_ipv4)) - - eq_(tcp_str, str(p_tcp)) - eq_(tcp_str, repr(p_tcp)) - - eq_(pkt_str, str(pkt)) - eq_(pkt_str, repr(pkt)) - - def test_ipv4_sctp(self): - # build packet - e = ethernet.ethernet() - ip = ipv4.ipv4(proto=inet.IPPROTO_SCTP) - s = sctp.sctp(chunks=[sctp.chunk_data(payload_data=self.payload)]) - - p = e / ip / s - p.serialize() - - ipaddr = addrconv.ipv4.text_to_bin('0.0.0.0') - - # ethernet !6s6sH - e_buf = b'\xff\xff\xff\xff\xff\xff' \ - + b'\x00\x00\x00\x00\x00\x00' \ - + b'\x08\x00' - - # ipv4 !BBHHHBBHII - ip_buf = b'\x45' \ - + b'\x00' \ - + b'\x00\x50' \ - + b'\x00\x00' \ - + b'\x00\x00' \ - + b'\xff' \ - + b'\x84' \ - + b'\x00\x00' \ - + ipaddr \ - + ipaddr - - # sctp !HHII + chunk_data !BBHIHHI + payload - s_buf = b'\x00\x00' \ - + b'\x00\x00' \ - + b'\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00' \ - + b'\x00' \ - + b'\x00' \ - + b'\x00\x00' \ - + b'\x00\x00\x00\x00' \ - + b'\x00\x00' \ - + b'\x00\x00' \ - + b'\x00\x00\x00\x00' \ - + self.payload - - buf = e_buf + ip_buf + s_buf - - # parse - pkt = packet.Packet(p.data) - protocols = self.get_protocols(pkt) - p_eth = protocols['ethernet'] - p_ipv4 = protocols['ipv4'] - p_sctp = protocols['sctp'] - - # ethernet - ok_(p_eth) - eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) - eq_('00:00:00:00:00:00', p_eth.src) - eq_(ether.ETH_TYPE_IP, p_eth.ethertype) - - # ipv4 - ok_(p_ipv4) - eq_(4, p_ipv4.version) - eq_(5, p_ipv4.header_length) - eq_(0, p_ipv4.tos) - l = len(ip_buf) + len(s_buf) - eq_(l, p_ipv4.total_length) - eq_(0, p_ipv4.identification) - eq_(0, p_ipv4.flags) - eq_(255, p_ipv4.ttl) - eq_(inet.IPPROTO_SCTP, p_ipv4.proto) - eq_('10.0.0.1', p_ipv4.src) - eq_('10.0.0.2', p_ipv4.dst) - t = bytearray(ip_buf) - struct.pack_into('!H', t, 10, p_ipv4.csum) - eq_(packet_utils.checksum(t), 0x1403) - - # sctp - ok_(p_sctp) - eq_(1, p_sctp.src_port) - eq_(1, p_sctp.dst_port) - eq_(0, p_sctp.vtag) - assert isinstance(p_sctp.chunks[0], sctp.chunk_data) - eq_(0, p_sctp.chunks[0]._type) - eq_(0, p_sctp.chunks[0].unordered) - eq_(0, p_sctp.chunks[0].begin) - eq_(0, p_sctp.chunks[0].end) - eq_(16 + len(self.payload), p_sctp.chunks[0].length) - eq_(0, p_sctp.chunks[0].tsn) - eq_(0, p_sctp.chunks[0].sid) - eq_(0, p_sctp.chunks[0].seq) - eq_(0, p_sctp.chunks[0].payload_id) - eq_(self.payload, p_sctp.chunks[0].payload_data) - eq_(len(s_buf), len(p_sctp)) - - # to string - eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', - 'src': '00:00:00:00:00:00', - 'ethertype': ether.ETH_TYPE_IP} - _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) - for k, v in inspect.getmembers(p_eth) - if k in eth_values]) - eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) - - ipv4_values = {'version': 4, - 'header_length': 5, - 'tos': 0, - 'total_length': l, - 'identification': 0, - 'flags': 0, - 'offset': 0, - 'ttl': 255, - 'proto': inet.IPPROTO_SCTP, - 'csum': p_ipv4.csum, - 'src': '10.0.0.1', - 'dst': '10.0.0.2', - 'option': None} - _ipv4_str = ','.join(['%s=%s' % (k, repr(ipv4_values[k])) - for k, v in inspect.getmembers(p_ipv4) - if k in ipv4_values]) - ipv4_str = '%s(%s)' % (ipv4.ipv4.__name__, _ipv4_str) - - data_values = {'unordered': 0, - 'begin': 0, - 'end': 0, - 'length': 16 + len(self.payload), - 'tsn': 0, - 'sid': 0, - 'seq': 0, - 'payload_id': 0, - 'payload_data': self.payload} - _data_str = ','.join(['%s=%s' % (k, repr(data_values[k])) - for k in sorted(data_values.keys())]) - data_str = '[%s(%s)]' % (sctp.chunk_data.__name__, _data_str) - - sctp_values = {'src_port': 1, - 'dst_port': 1, - 'vtag': 0, - 'csum': repr(p_sctp.csum), - 'chunks': data_str} - _sctp_str = ','.join(['%s=%s' % (k, sctp_values[k]) - for k, _ in inspect.getmembers(p_sctp) - if k in sctp_values]) - sctp_str = '%s(%s)' % (sctp.sctp.__name__, _sctp_str) - - pkt_str = '%s, %s, %s' % (eth_str, ipv4_str, sctp_str) - - eq_(eth_str, str(p_eth)) - eq_(eth_str, repr(p_eth)) - - eq_(ipv4_str, str(p_ipv4)) - eq_(ipv4_str, repr(p_ipv4)) - - eq_(sctp_str, str(p_sctp)) - eq_(sctp_str, repr(p_sctp)) - - eq_(pkt_str, str(pkt)) - eq_(pkt_str, repr(pkt)) - - def test_ipv4_icmp(self): - # buid packet - e = ethernet.ethernet() - ip = ipv4.ipv4(proto=inet.IPPROTO_ICMP) - ic = icmp.icmp() - - p = e / ip / ic - p.serialize() - - ipaddr = addrconv.ipv4.text_to_bin('0.0.0.0') - - # ethernet !6s6sH - e_buf = b'\xff\xff\xff\xff\xff\xff' \ - + b'\x00\x00\x00\x00\x00\x00' \ - + b'\x08\x00' - - # ipv4 !BBHHHBBHII - ip_buf = b'\x45' \ - + b'\x00' \ - + b'\x00\x1c' \ - + b'\x00\x00' \ - + b'\x00\x00' \ - + b'\xff' \ - + b'\x01' \ - + b'\x00\x00' \ - + ipaddr \ - + ipaddr - - # icmp !BBH + echo !HH - ic_buf = b'\x08' \ - + b'\x00' \ - + b'\x00\x00' \ - + b'\x00\x00' \ - + b'\x00\x00' - - buf = e_buf + ip_buf + ic_buf - - # parse - pkt = packet.Packet(p.data) - protocols = self.get_protocols(pkt) - p_eth = protocols['ethernet'] - p_ipv4 = protocols['ipv4'] - p_icmp = protocols['icmp'] - - # ethernet - ok_(p_eth) - eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) - eq_('00:00:00:00:00:00', p_eth.src) - eq_(ether.ETH_TYPE_IP, p_eth.ethertype) - - # ipv4 - ok_(p_ipv4) - eq_(4, p_ipv4.version) - eq_(5, p_ipv4.header_length) - eq_(0, p_ipv4.tos) - l = len(ip_buf) + len(ic_buf) - eq_(l, p_ipv4.total_length) - eq_(0, p_ipv4.identification) - eq_(0, p_ipv4.flags) - eq_(255, p_ipv4.ttl) - eq_(inet.IPPROTO_ICMP, p_ipv4.proto) - eq_('10.0.0.1', p_ipv4.src) - eq_('10.0.0.2', p_ipv4.dst) - t = bytearray(ip_buf) - struct.pack_into('!H', t, 10, p_ipv4.csum) - eq_(packet_utils.checksum(t), 0x1403) - - # icmp - ok_(p_icmp) - eq_(8, p_icmp.type) - eq_(0, p_icmp.code) - eq_(0, p_icmp.data.id) - eq_(0, p_icmp.data.seq) - eq_(len(ic_buf), len(p_icmp)) - t = bytearray(ic_buf) - struct.pack_into('!H', t, 2, p_icmp.csum) - eq_(packet_utils.checksum(t), 0) - - # to string - eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', - 'src': '00:00:00:00:00:00', - 'ethertype': ether.ETH_TYPE_IP} - _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) - for k, _ in inspect.getmembers(p_eth) - if k in eth_values]) - eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) - - ipv4_values = {'version': 4, - 'header_length': 5, - 'tos': 0, - 'total_length': l, - 'identification': 0, - 'flags': 0, - 'offset': p_ipv4.offset, - 'ttl': 255, - 'proto': inet.IPPROTO_ICMP, - 'csum': p_ipv4.csum, - 'src': '10.0.0.1', - 'dst': '10.0.0.2', - 'option': None} - _ipv4_str = ','.join(['%s=%s' % (k, repr(ipv4_values[k])) - for k, _ in inspect.getmembers(p_ipv4) - if k in ipv4_values]) - ipv4_str = '%s(%s)' % (ipv4.ipv4.__name__, _ipv4_str) - - echo_values = {'id': 0, - 'seq': 0, - 'data': None} - _echo_str = ','.join(['%s=%s' % (k, repr(echo_values[k])) - for k in sorted(echo_values.keys())]) - echo_str = '%s(%s)' % (icmp.echo.__name__, _echo_str) - icmp_values = {'type': 8, - 'code': 0, - 'csum': p_icmp.csum, - 'data': echo_str} - _icmp_str = ','.join(['%s=%s' % (k, icmp_values[k]) - for k, _ in inspect.getmembers(p_icmp) - if k in icmp_values]) - icmp_str = '%s(%s)' % (icmp.icmp.__name__, _icmp_str) - - pkt_str = '%s, %s, %s' % (eth_str, ipv4_str, icmp_str) - - eq_(eth_str, str(p_eth)) - eq_(eth_str, repr(p_eth)) - - eq_(ipv4_str, str(p_ipv4)) - eq_(ipv4_str, repr(p_ipv4)) - - eq_(icmp_str, str(p_icmp)) - eq_(icmp_str, repr(p_icmp)) - - eq_(pkt_str, str(pkt)) - eq_(pkt_str, repr(pkt)) - - def test_ipv6_udp(self): - # build packet - e = ethernet.ethernet(ethertype=ether.ETH_TYPE_IPV6) - ip = ipv6.ipv6(nxt=inet.IPPROTO_UDP) - u = udp.udp() - - p = e / ip / u / self.payload - p.serialize() - - ipaddr = addrconv.ipv6.text_to_bin('::') - - # ethernet !6s6sH - e_buf = b'\xff\xff\xff\xff\xff\xff' \ - + b'\x00\x00\x00\x00\x00\x00' \ - + b'\x86\xdd' - - # ipv6 !IHBB16s16s' - ip_buf = b'\x60\x00\x00\x00' \ - + b'\x00\x00' \ - + b'\x11' \ - + b'\xff' \ - + b'\x00\x00' \ - + ipaddr \ - + ipaddr - - # udp !HHHH - u_buf = b'\x00\x00' \ - + b'\x00\x00' \ - + b'\x00\x28' \ - + b'\x00\x00' - - buf = e_buf + ip_buf + u_buf + self.payload - - # parse - pkt = packet.Packet(p.data) - protocols = self.get_protocols(pkt) - p_eth = protocols['ethernet'] - p_ipv6 = protocols['ipv6'] - p_udp = protocols['udp'] - - # ethernet - ok_(p_eth) - eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) - eq_('00:00:00:00:00:00', p_eth.src) - eq_(ether.ETH_TYPE_IPV6, p_eth.ethertype) - - # ipv6 - ok_(p_ipv6) - eq_(6, p_ipv6.version) - eq_(0, p_ipv6.traffic_class) - eq_(0, p_ipv6.flow_label) - eq_(len(u_buf) + len(self.payload), p_ipv6.payload_length) - eq_(inet.IPPROTO_UDP, p_ipv6.nxt) - eq_(255, p_ipv6.hop_limit) - eq_('10::10', p_ipv6.src) - eq_('20::20', p_ipv6.dst) - - # udp - ok_(p_udp) - eq_(1, p_udp.src_port) - eq_(1, p_udp.dst_port) - eq_(len(u_buf) + len(self.payload), p_udp.total_length) - eq_(0x2B60, p_udp.csum) - t = bytearray(u_buf) - struct.pack_into('!H', t, 6, p_udp.csum) - ph = struct.pack('!16s16sI3xB', ipaddr, ipaddr, - len(u_buf) + len(self.payload), 17) - t = ph + t + self.payload - eq_(packet_utils.checksum(t), 0x62) - - # payload - ok_('payload' in protocols) - eq_(self.payload, protocols['payload']) - - # to string - eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', - 'src': '00:00:00:00:00:00', - 'ethertype': ether.ETH_TYPE_IPV6} - _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) - for k, v in inspect.getmembers(p_eth) - if k in eth_values]) - eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) - - ipv6_values = {'version': 6, - 'traffic_class': 0, - 'flow_label': 0, - 'payload_length': len(u_buf) + len(self.payload), - 'nxt': inet.IPPROTO_UDP, - 'hop_limit': 255, - 'src': '10::10', - 'dst': '20::20', - 'ext_hdrs': []} - _ipv6_str = ','.join(['%s=%s' % (k, repr(ipv6_values[k])) - for k, v in inspect.getmembers(p_ipv6) - if k in ipv6_values]) - ipv6_str = '%s(%s)' % (ipv6.ipv6.__name__, _ipv6_str) - - udp_values = {'src_port': 1, - 'dst_port': 1, - 'total_length': len(u_buf) + len(self.payload), - 'csum': 0x2B60} - _udp_str = ','.join(['%s=%s' % (k, repr(udp_values[k])) - for k, v in inspect.getmembers(p_udp) - if k in udp_values]) - udp_str = '%s(%s)' % (udp.udp.__name__, _udp_str) - - pkt_str = '%s, %s, %s, %s' % (eth_str, ipv6_str, udp_str, - repr(protocols['payload'])) - - eq_(eth_str, str(p_eth)) - eq_(eth_str, repr(p_eth)) - - eq_(ipv6_str, str(p_ipv6)) - eq_(ipv6_str, repr(p_ipv6)) - - eq_(udp_str, str(p_udp)) - eq_(udp_str, repr(p_udp)) - - eq_(pkt_str, str(pkt)) - eq_(pkt_str, repr(pkt)) - - def test_ipv6_tcp(self): - # build packet - e = ethernet.ethernet(ethertype=ether.ETH_TYPE_IPV6) - ip = ipv6.ipv6() - t = tcp.tcp(option=b'\x01\x02') - - p = e / ip / t / self.payload - p.serialize() - - ipaddr = addrconv.ipv6.text_to_bin('::') - - # ethernet !6s6sH - e_buf = b'\xff\xff\xff\xff\xff\xff' \ - + b'\x00\x00\x00\x00\x00\x00' \ - + b'\x86\xdd' - - # ipv6 !IHBB16s16s' - ip_buf = b'\x60\x00\x00\x00' \ - + b'\x00\x00' \ - + b'\x06' \ - + b'\xff' \ - + b'\x00\x00' \ - + ipaddr \ - + ipaddr - - # tcp !HHIIBBHHH + option - t_buf = b'\x00\x00' \ - + b'\x00\x00' \ - + b'\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00' \ - + b'\x60' \ - + b'\x00' \ - + b'\x00\x00' \ - + b'\x00\x00' \ - + b'\x00\x00' \ - + b'\x01\x02\x00\x00' - - buf = e_buf + ip_buf + t_buf + self.payload - - # parse - pkt = packet.Packet(p.data) - protocols = self.get_protocols(pkt) - p_eth = protocols['ethernet'] - p_ipv6 = protocols['ipv6'] - p_tcp = protocols['tcp'] - - # ethernet - ok_(p_eth) - eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) - eq_('00:00:00:00:00:00', p_eth.src) - eq_(ether.ETH_TYPE_IPV6, p_eth.ethertype) - - # ipv6 - ok_(p_ipv6) - eq_(6, p_ipv6.version) - eq_(0, p_ipv6.traffic_class) - eq_(0, p_ipv6.flow_label) - eq_(len(t_buf) + len(self.payload), p_ipv6.payload_length) - eq_(inet.IPPROTO_TCP, p_ipv6.nxt) - eq_(255, p_ipv6.hop_limit) - eq_('10::10', p_ipv6.src) - eq_('20::20', p_ipv6.dst) - - # tcp - ok_(p_tcp) - eq_(1, p_tcp.src_port) - eq_(1, p_tcp.dst_port) - eq_(0, p_tcp.seq) - eq_(0, p_tcp.ack) - eq_(6, p_tcp.offset) - eq_(0, p_tcp.bits) - eq_(0, p_tcp.window_size) - eq_(0, p_tcp.urgent) - eq_(len(t_buf), len(p_tcp)) - t = bytearray(t_buf) - struct.pack_into('!H', t, 16, p_tcp.csum) - ph = struct.pack('!16s16sI3xB', ipaddr, ipaddr, - len(t_buf) + len(self.payload), 6) - t = ph + t + self.payload - eq_(packet_utils.checksum(t), 0x62) - - # payload - ok_('payload' in protocols) - eq_(self.payload, protocols['payload']) - - # to string - eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', - 'src': '00:00:00:00:00:00', - 'ethertype': ether.ETH_TYPE_IPV6} - _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) - for k, v in inspect.getmembers(p_eth) - if k in eth_values]) - eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) - - ipv6_values = {'version': 6, - 'traffic_class': 0, - 'flow_label': 0, - 'payload_length': len(t_buf) + len(self.payload), - 'nxt': inet.IPPROTO_TCP, - 'hop_limit': 255, - 'src': '10::10', - 'dst': '20::20', - 'ext_hdrs': []} - _ipv6_str = ','.join(['%s=%s' % (k, repr(ipv6_values[k])) - for k, v in inspect.getmembers(p_ipv6) - if k in ipv6_values]) - ipv6_str = '%s(%s)' % (ipv6.ipv6.__name__, _ipv6_str) - - tcp_values = {'src_port': 1, - 'dst_port': 1, - 'seq': 0, - 'ack': 0, - 'offset': 6, - 'bits': 0, - 'window_size': 0, - 'csum': p_tcp.csum, - 'urgent': 0, - 'option': p_tcp.option} - _tcp_str = ','.join(['%s=%s' % (k, repr(tcp_values[k])) - for k, v in inspect.getmembers(p_tcp) - if k in tcp_values]) - tcp_str = '%s(%s)' % (tcp.tcp.__name__, _tcp_str) - - pkt_str = '%s, %s, %s, %s' % (eth_str, ipv6_str, tcp_str, - repr(protocols['payload'])) - - eq_(eth_str, str(p_eth)) - eq_(eth_str, repr(p_eth)) - - eq_(ipv6_str, str(p_ipv6)) - eq_(ipv6_str, repr(p_ipv6)) - - eq_(tcp_str, str(p_tcp)) - eq_(tcp_str, repr(p_tcp)) - - eq_(pkt_str, str(pkt)) - eq_(pkt_str, repr(pkt)) - - def test_ipv6_sctp(self): - # build packet - e = ethernet.ethernet(ethertype=ether.ETH_TYPE_IPV6) - ip = ipv6.ipv6(nxt=inet.IPPROTO_SCTP) - s = sctp.sctp(chunks=[sctp.chunk_data(payload_data=self.payload)]) - - p = e / ip / s - p.serialize() - - ipaddr = addrconv.ipv6.text_to_bin('::') - - # ethernet !6s6sH - e_buf = b'\xff\xff\xff\xff\xff\xff' \ - + b'\x00\x00\x00\x00\x00\x00' \ - + b'\x86\xdd' - - # ipv6 !IHBB16s16s' - ip_buf = b'\x60\x00\x00\x00' \ - + b'\x00\x00' \ - + b'\x84' \ - + b'\xff' \ - + b'\x00\x00' \ - + ipaddr \ - + ipaddr - - # sctp !HHII + chunk_data !BBHIHHI + payload - s_buf = b'\x00\x00' \ - + b'\x00\x00' \ - + b'\x00\x00\x00\x00' \ - + b'\x00\x00\x00\x00' \ - + b'\x00' \ - + b'\x00' \ - + b'\x00\x00' \ - + b'\x00\x00\x00\x00' \ - + b'\x00\x00' \ - + b'\x00\x00' \ - + b'\x00\x00\x00\x00' \ - + self.payload - - buf = e_buf + ip_buf + s_buf - - # parse - pkt = packet.Packet(p.data) - protocols = self.get_protocols(pkt) - p_eth = protocols['ethernet'] - p_ipv6 = protocols['ipv6'] - p_sctp = protocols['sctp'] - - # ethernet - ok_(p_eth) - eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) - eq_('00:00:00:00:00:00', p_eth.src) - eq_(ether.ETH_TYPE_IPV6, p_eth.ethertype) - - # ipv6 - ok_(p_ipv6) - eq_(6, p_ipv6.version) - eq_(0, p_ipv6.traffic_class) - eq_(0, p_ipv6.flow_label) - eq_(len(s_buf), p_ipv6.payload_length) - eq_(inet.IPPROTO_SCTP, p_ipv6.nxt) - eq_(255, p_ipv6.hop_limit) - eq_('10::10', p_ipv6.src) - eq_('20::20', p_ipv6.dst) - - # sctp - ok_(p_sctp) - eq_(1, p_sctp.src_port) - eq_(1, p_sctp.dst_port) - eq_(0, p_sctp.vtag) - assert isinstance(p_sctp.chunks[0], sctp.chunk_data) - eq_(0, p_sctp.chunks[0]._type) - eq_(0, p_sctp.chunks[0].unordered) - eq_(0, p_sctp.chunks[0].begin) - eq_(0, p_sctp.chunks[0].end) - eq_(16 + len(self.payload), p_sctp.chunks[0].length) - eq_(0, p_sctp.chunks[0].tsn) - eq_(0, p_sctp.chunks[0].sid) - eq_(0, p_sctp.chunks[0].seq) - eq_(0, p_sctp.chunks[0].payload_id) - eq_(self.payload, p_sctp.chunks[0].payload_data) - eq_(len(s_buf), len(p_sctp)) - - # to string - eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', - 'src': '00:00:00:00:00:00', - 'ethertype': ether.ETH_TYPE_IPV6} - _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) - for k, v in inspect.getmembers(p_eth) - if k in eth_values]) - eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) - - ipv6_values = {'version': 6, - 'traffic_class': 0, - 'flow_label': 0, - 'payload_length': len(s_buf), - 'nxt': inet.IPPROTO_SCTP, - 'hop_limit': 255, - 'src': '10::10', - 'dst': '20::20', - 'ext_hdrs': []} - _ipv6_str = ','.join(['%s=%s' % (k, repr(ipv6_values[k])) - for k, v in inspect.getmembers(p_ipv6) - if k in ipv6_values]) - ipv6_str = '%s(%s)' % (ipv6.ipv6.__name__, _ipv6_str) - - data_values = {'unordered': 0, - 'begin': 0, - 'end': 0, - 'length': 16 + len(self.payload), - 'tsn': 0, - 'sid': 0, - 'seq': 0, - 'payload_id': 0, - 'payload_data': self.payload} - _data_str = ','.join(['%s=%s' % (k, repr(data_values[k])) - for k in sorted(data_values.keys())]) - data_str = '[%s(%s)]' % (sctp.chunk_data.__name__, _data_str) - - sctp_values = {'src_port': 1, - 'dst_port': 1, - 'vtag': 0, - 'csum': repr(p_sctp.csum), - 'chunks': data_str} - _sctp_str = ','.join(['%s=%s' % (k, sctp_values[k]) - for k, _ in inspect.getmembers(p_sctp) - if k in sctp_values]) - sctp_str = '%s(%s)' % (sctp.sctp.__name__, _sctp_str) - - pkt_str = '%s, %s, %s' % (eth_str, ipv6_str, sctp_str) - - eq_(eth_str, str(p_eth)) - eq_(eth_str, repr(p_eth)) - - eq_(ipv6_str, str(p_ipv6)) - eq_(ipv6_str, repr(p_ipv6)) - - eq_(sctp_str, str(p_sctp)) - eq_(sctp_str, repr(p_sctp)) - - eq_(pkt_str, str(pkt)) - eq_(pkt_str, repr(pkt)) - - def test_ipv6_icmpv6(self): - # build packet - e = ethernet.ethernet(ethertype=ether.ETH_TYPE_IPV6) - ip = ipv6.ipv6(nxt=inet.IPPROTO_ICMPV6) - ic = icmpv6.icmpv6() - - p = e / ip / ic - p.serialize() - - ipaddr = addrconv.ipv6.text_to_bin('::') - - # ethernet !6s6sH - e_buf = b'\xff\xff\xff\xff\xff\xff' \ - + b'\x00\x00\x00\x00\x00\x00' \ - + b'\x86\xdd' - - # ipv6 !IHBB16s16s' - ip_buf = b'\x60\x00\x00\x00' \ - + b'\x00\x00' \ - + b'\x3a' \ - + b'\xff' \ - + b'\x00\x00' \ - + ipaddr \ - + ipaddr - - # icmpv6 !BBH - ic_buf = b'\x00' \ - + b'\x00' \ - + b'\x00\x00' - - buf = e_buf + ip_buf + ic_buf - - # parse - pkt = packet.Packet(p.data) - protocols = self.get_protocols(pkt) - p_eth = protocols['ethernet'] - p_ipv6 = protocols['ipv6'] - p_icmpv6 = protocols['icmpv6'] - - # ethernet - ok_(p_eth) - eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) - eq_('00:00:00:00:00:00', p_eth.src) - eq_(ether.ETH_TYPE_IPV6, p_eth.ethertype) - - # ipv6 - ok_(p_ipv6) - eq_(6, p_ipv6.version) - eq_(0, p_ipv6.traffic_class) - eq_(0, p_ipv6.flow_label) - eq_(len(ic_buf), p_ipv6.payload_length) - eq_(inet.IPPROTO_ICMPV6, p_ipv6.nxt) - eq_(255, p_ipv6.hop_limit) - eq_('10::10', p_ipv6.src) - eq_('20::20', p_ipv6.dst) - - # icmpv6 - ok_(p_icmpv6) - eq_(0, p_icmpv6.type_) - eq_(0, p_icmpv6.code) - eq_(len(ic_buf), len(p_icmpv6)) - t = bytearray(ic_buf) - struct.pack_into('!H', t, 2, p_icmpv6.csum) - ph = struct.pack('!16s16sI3xB', ipaddr, ipaddr, len(ic_buf), 58) - t = ph + t - eq_(packet_utils.checksum(t), 0x60) - - # to string - eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', - 'src': '00:00:00:00:00:00', - 'ethertype': ether.ETH_TYPE_IPV6} - _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) - for k, _ in inspect.getmembers(p_eth) - if k in eth_values]) - eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) - - ipv6_values = {'version': 6, - 'traffic_class': 0, - 'flow_label': 0, - 'payload_length': len(ic_buf), - 'nxt': inet.IPPROTO_ICMPV6, - 'hop_limit': 255, - 'src': '10::10', - 'dst': '20::20', - 'ext_hdrs': []} - _ipv6_str = ','.join(['%s=%s' % (k, repr(ipv6_values[k])) - for k, _ in inspect.getmembers(p_ipv6) - if k in ipv6_values]) - ipv6_str = '%s(%s)' % (ipv6.ipv6.__name__, _ipv6_str) - - icmpv6_values = {'type_': 0, - 'code': 0, - 'csum': p_icmpv6.csum, - 'data': None} - _icmpv6_str = ','.join(['%s=%s' % (k, repr(icmpv6_values[k])) - for k, _ in inspect.getmembers(p_icmpv6) - if k in icmpv6_values]) - icmpv6_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _icmpv6_str) - - pkt_str = '%s, %s, %s' % (eth_str, ipv6_str, icmpv6_str) - - eq_(eth_str, str(p_eth)) - eq_(eth_str, repr(p_eth)) - - eq_(ipv6_str, str(p_ipv6)) - eq_(ipv6_str, repr(p_ipv6)) - - eq_(icmpv6_str, str(p_icmpv6)) - eq_(icmpv6_str, repr(p_icmpv6)) - - eq_(pkt_str, str(pkt)) - eq_(pkt_str, repr(pkt)) - - def test_llc_bpdu(self): - # buid packet - e = ethernet.ethernet(self.dst_mac, self.src_mac, - ether.ETH_TYPE_IEEE802_3) - llc_control = llc.ControlFormatU(0, 0, 0) - l = llc.llc(llc.SAP_BPDU, llc.SAP_BPDU, llc_control) - b = bpdu.ConfigurationBPDUs(flags=0, - root_priority=32768, - root_system_id_extension=0, - root_mac_address=self.src_mac, - root_path_cost=0, - bridge_priority=32768, - bridge_system_id_extension=0, - bridge_mac_address=self.dst_mac, - port_priority=128, - port_number=4, - message_age=1, - max_age=20, - hello_time=2, - forward_delay=15) - - p = packet.Packet() - p.add_protocol(e) - p.add_protocol(l) - p.add_protocol(b) - p.serialize() - - # ethernet !6s6sH - e_buf = self.dst_mac_bin + self.src_mac_bin + b'\x05\xdc' - - # llc !BBB - l_buf = (b'\x42' - b'\x42' - b'\x03') - - # bpdu !HBBBQIQHHHHH - b_buf = (b'\x00\x00' - b'\x00' - b'\x00' - b'\x00' - b'\x80\x00\xbb\xbb\xbb\xbb\xbb\xbb' - b'\x00\x00\x00\x00' - b'\x80\x00\xaa\xaa\xaa\xaa\xaa\xaa' - b'\x80\x04' - b'\x01\x00' - b'\x14\x00' - b'\x02\x00' - b'\x0f\x00') - - buf = e_buf + l_buf + b_buf - - # Append padding if ethernet frame is less than 60 bytes length - pad_len = 60 - len(buf) - if pad_len > 0: - buf += b'\x00' * pad_len - eq_(buf, p.data) - - # parse - pkt = packet.Packet(p.data) - protocols = self.get_protocols(pkt) - p_eth = protocols['ethernet'] - p_llc = protocols['llc'] - p_bpdu = protocols['ConfigurationBPDUs'] - - # ethernet - ok_(p_eth) - eq_(self.dst_mac, p_eth.dst) - eq_(self.src_mac, p_eth.src) - eq_(ether.ETH_TYPE_IEEE802_3, p_eth.ethertype) - - # llc - ok_(p_llc) - eq_(llc.SAP_BPDU, p_llc.dsap_addr) - eq_(llc.SAP_BPDU, p_llc.ssap_addr) - eq_(0, p_llc.control.modifier_function1) - eq_(0, p_llc.control.pf_bit) - eq_(0, p_llc.control.modifier_function2) - - # bpdu - ok_(p_bpdu) - eq_(bpdu.PROTOCOL_IDENTIFIER, p_bpdu._protocol_id) - eq_(bpdu.PROTOCOLVERSION_ID_BPDU, p_bpdu._version_id) - eq_(bpdu.TYPE_CONFIG_BPDU, p_bpdu._bpdu_type) - eq_(0, p_bpdu.flags) - eq_(32768, p_bpdu.root_priority) - eq_(0, p_bpdu.root_system_id_extension) - eq_(self.src_mac, p_bpdu.root_mac_address) - eq_(0, p_bpdu.root_path_cost) - eq_(32768, p_bpdu.bridge_priority) - eq_(0, p_bpdu.bridge_system_id_extension) - eq_(self.dst_mac, p_bpdu.bridge_mac_address) - eq_(128, p_bpdu.port_priority) - eq_(4, p_bpdu.port_number) - eq_(1, p_bpdu.message_age) - eq_(20, p_bpdu.max_age) - eq_(2, p_bpdu.hello_time) - eq_(15, p_bpdu.forward_delay) - - # to string - eth_values = {'dst': self.dst_mac, - 'src': self.src_mac, - 'ethertype': ether.ETH_TYPE_IEEE802_3} - _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) - for k, v in inspect.getmembers(p_eth) - if k in eth_values]) - eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) - - ctrl_values = {'modifier_function1': 0, - 'pf_bit': 0, - 'modifier_function2': 0} - _ctrl_str = ','.join(['%s=%s' % (k, repr(ctrl_values[k])) - for k, v in inspect.getmembers(p_llc.control) - if k in ctrl_values]) - ctrl_str = '%s(%s)' % (llc.ControlFormatU.__name__, _ctrl_str) - - llc_values = {'dsap_addr': repr(llc.SAP_BPDU), - 'ssap_addr': repr(llc.SAP_BPDU), - 'control': ctrl_str} - _llc_str = ','.join(['%s=%s' % (k, llc_values[k]) - for k, v in inspect.getmembers(p_llc) - if k in llc_values]) - llc_str = '%s(%s)' % (llc.llc.__name__, _llc_str) - - _long = int if six.PY3 else long - bpdu_values = {'flags': 0, - 'root_priority': _long(32768), - 'root_system_id_extension': _long(0), - 'root_mac_address': self.src_mac, - 'root_path_cost': 0, - 'bridge_priority': _long(32768), - 'bridge_system_id_extension': _long(0), - 'bridge_mac_address': self.dst_mac, - 'port_priority': 128, - 'port_number': 4, - 'message_age': float(1), - 'max_age': float(20), - 'hello_time': float(2), - 'forward_delay': float(15)} - _bpdu_str = ','.join(['%s=%s' % (k, repr(bpdu_values[k])) - for k, v in inspect.getmembers(p_bpdu) - if k in bpdu_values]) - bpdu_str = '%s(%s)' % (bpdu.ConfigurationBPDUs.__name__, _bpdu_str) - - pkt_str = '%s, %s, %s' % (eth_str, llc_str, bpdu_str) - - eq_(eth_str, str(p_eth)) - eq_(eth_str, repr(p_eth)) - - eq_(llc_str, str(p_llc)) - eq_(llc_str, repr(p_llc)) - - eq_(bpdu_str, str(p_bpdu)) - eq_(bpdu_str, repr(p_bpdu)) - - eq_(pkt_str, str(pkt)) - eq_(pkt_str, repr(pkt)) - - def test_div_api(self): - e = ethernet.ethernet(self.dst_mac, self.src_mac, ether.ETH_TYPE_IP) - i = ipv4.ipv4() - u = udp.udp(self.src_port, self.dst_port) - pkt = e / i / u - ok_(isinstance(pkt, packet.Packet)) - ok_(isinstance(pkt.protocols[0], ethernet.ethernet)) - ok_(isinstance(pkt.protocols[1], ipv4.ipv4)) - ok_(isinstance(pkt.protocols[2], udp.udp)) diff --git a/ryu/tests/unit/packet/test_pbb.py b/ryu/tests/unit/packet/test_pbb.py deleted file mode 100644 index dd7778cd..00000000 --- a/ryu/tests/unit/packet/test_pbb.py +++ /dev/null @@ -1,172 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import struct -import unittest - -from nose.tools import eq_ -from nose.tools import ok_ -from nose.tools import raises -from ryu.ofproto import ether -from ryu.ofproto import inet -from ryu.lib.packet import ethernet -from ryu.lib.packet import packet -from ryu.lib.packet import ipv4 -from ryu.lib.packet import vlan -from ryu.lib.packet import pbb - - -LOG = logging.getLogger(__name__) - - -class Test_itag(unittest.TestCase): - - pcp = 3 - dei = 0 - uca = 1 - sid = 16770000 - data = pcp << 29 | dei << 28 | uca << 27 | sid - buf = struct.pack(pbb.itag._PACK_STR, data) - it = pbb.itag(pcp, dei, uca, sid) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.pcp, self.it.pcp) - eq_(self.dei, self.it.dei) - eq_(self.uca, self.it.uca) - eq_(self.sid, self.it.sid) - - def test_parser(self): - _res = pbb.itag.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - eq_(res.pcp, self.pcp) - eq_(res.dei, self.dei) - eq_(res.uca, self.uca) - eq_(res.sid, self.sid) - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.it.serialize(data, prev) - res = struct.unpack(pbb.itag._PACK_STR, buf) - eq_(res[0], self.data) - - def _build_itag(self): - b_src_mac = '00:07:0d:af:f4:54' - b_dst_mac = '00:00:00:00:00:00' - b_ethertype = ether.ETH_TYPE_8021AD - e1 = ethernet.ethernet(b_dst_mac, b_src_mac, b_ethertype) - - b_pcp = 0 - b_cfi = 0 - b_vid = 32 - b_ethertype = ether.ETH_TYPE_8021Q - bt = vlan.svlan(b_pcp, b_cfi, b_vid, b_ethertype) - - c_src_mac = '11:11:11:11:11:11' - c_dst_mac = 'aa:aa:aa:aa:aa:aa' - c_ethertype = ether.ETH_TYPE_8021AD - e2 = ethernet.ethernet(c_dst_mac, c_src_mac, c_ethertype) - - s_pcp = 0 - s_cfi = 0 - s_vid = 32 - s_ethertype = ether.ETH_TYPE_8021Q - st = vlan.svlan(s_pcp, s_cfi, s_vid, s_ethertype) - - c_pcp = 0 - c_cfi = 0 - c_vid = 32 - c_ethertype = ether.ETH_TYPE_IP - ct = vlan.vlan(c_pcp, c_cfi, c_vid, c_ethertype) - - version = 4 - header_length = 20 - tos = 0 - total_length = 24 - identification = 0x8a5d - flags = 0 - offset = 1480 - ttl = 64 - proto = inet.IPPROTO_ICMP - csum = 0xa7f2 - src = '131.151.32.21' - dst = '131.151.32.129' - option = b'TEST' - ip = ipv4.ipv4(version, header_length, tos, total_length, - identification, flags, offset, ttl, proto, csum, - src, dst, option) - - p = packet.Packet() - - p.add_protocol(e1) - p.add_protocol(bt) - p.add_protocol(self.it) - p.add_protocol(e2) - p.add_protocol(st) - p.add_protocol(ct) - p.add_protocol(ip) - p.serialize() - - return p - - def test_build_itag(self): - p = self._build_itag() - - e = p.get_protocols(ethernet.ethernet) - ok_(e) - ok_(isinstance(e, list)) - eq_(e[0].ethertype, ether.ETH_TYPE_8021AD) - eq_(e[1].ethertype, ether.ETH_TYPE_8021AD) - - sv = p.get_protocols(vlan.svlan) - ok_(sv) - ok_(isinstance(sv, list)) - eq_(sv[0].ethertype, ether.ETH_TYPE_8021Q) - eq_(sv[1].ethertype, ether.ETH_TYPE_8021Q) - - it = p.get_protocol(pbb.itag) - ok_(it) - - v = p.get_protocol(vlan.vlan) - ok_(v) - eq_(v.ethertype, ether.ETH_TYPE_IP) - - ip = p.get_protocol(ipv4.ipv4) - ok_(ip) - - eq_(it.pcp, self.pcp) - eq_(it.dei, self.dei) - eq_(it.uca, self.uca) - eq_(it.sid, self.sid) - - @raises(Exception) - def test_malformed_itag(self): - m_short_buf = self.buf[1:pbb.itag._MIN_LEN] - pbb.itag.parser(m_short_buf) - - def test_json(self): - jsondict = self.it.to_jsondict() - it = pbb.itag.from_jsondict(jsondict['itag']) - eq_(str(self.it), str(it)) diff --git a/ryu/tests/unit/packet/test_sctp.py b/ryu/tests/unit/packet/test_sctp.py deleted file mode 100644 index d7afb7cc..00000000 --- a/ryu/tests/unit/packet/test_sctp.py +++ /dev/null @@ -1,1454 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import inspect -import logging -import six -import struct -import unittest - -from nose.tools import eq_ -from nose.tools import ok_ -from ryu.lib import addrconv -from ryu.lib.packet import packet -from ryu.lib.packet import ethernet -from ryu.lib.packet import ipv4 -from ryu.lib.packet import sctp -from ryu.ofproto import ether -from ryu.ofproto import inet - - -LOG = logging.getLogger(__name__) - - -class Test_sctp(unittest.TestCase): - - def setUp(self): - self.chunks = [] - self.csum = 0 - self.dst_port = 1234 - self.src_port = 5678 - self.vtag = 98765432 - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf = b'\x16\x2e\x04\xd2\x05\xe3\x0a\x78\x00\x00\x00\x00' - - def setUp_with_data(self): - self.unordered = 1 - self.begin = 1 - self.end = 1 - self.length = 16 + 10 - self.tsn = 12345 - self.sid = 1 - self.seq = 0 - self.payload_id = 0 - self.payload_data = b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a' - - self.data = sctp.chunk_data( - unordered=self.unordered, begin=self.begin, end=self.end, - tsn=self.tsn, sid=self.sid, payload_data=self.payload_data) - - self.chunks = [self.data] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x00\x07\x00\x1a\x00\x00\x30\x39\x00\x01\x00\x00' + \ - b'\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a' - - def setUp_with_init(self): - self.flags = 0 - self.length = 20 + 8 + 20 + 8 + 4 + 16 + 16 - self.init_tag = 123456 - self.a_rwnd = 9876 - self.os = 3 - self.mis = 3 - self.i_tsn = 123456 - - self.p_ipv4 = sctp.param_ipv4('192.168.1.1') - self.p_ipv6 = sctp.param_ipv6('fe80::647e:1aff:fec4:8284') - self.p_cookie_preserve = sctp.param_cookie_preserve(5000) - self.p_ecn = sctp.param_ecn() - self.p_host_addr = sctp.param_host_addr(b'test host\x00') - self.p_support_type = sctp.param_supported_addr( - [sctp.PTYPE_IPV4, sctp.PTYPE_IPV6, sctp.PTYPE_COOKIE_PRESERVE, - sctp.PTYPE_ECN, sctp.PTYPE_HOST_ADDR]) - self.params = [ - self.p_ipv4, self.p_ipv6, self.p_cookie_preserve, - self.p_ecn, self.p_host_addr, self.p_support_type] - - self.init = sctp.chunk_init( - init_tag=self.init_tag, a_rwnd=self.a_rwnd, os=self.os, - mis=self.mis, i_tsn=self.i_tsn, params=self.params) - - self.chunks = [self.init] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x01\x00\x00\x5c\x00\x01\xe2\x40\x00\x00\x26\x94' + \ - b'\x00\x03\x00\x03\x00\x01\xe2\x40' + \ - b'\x00\x05\x00\x08\xc0\xa8\x01\x01' + \ - b'\x00\x06\x00\x14' + \ - b'\xfe\x80\x00\x00\x00\x00\x00\x00' + \ - b'\x64\x7e\x1a\xff\xfe\xc4\x82\x84' + \ - b'\x00\x09\x00\x08\x00\x00\x13\x88' + \ - b'\x80\x00\x00\x04' + \ - b'\x00\x0b\x00\x0e' + \ - b'\x74\x65\x73\x74\x20\x68\x6f\x73\x74\x00\x00\x00' + \ - b'\x00\x0c\x00\x0e\x00\x05\x00\x06\x00\x09\x80\x00' + \ - b'\x00\x0b\x00\x00' - - def setUp_with_init_ack(self): - self.flags = 0 - self.length = 20 + 8 + 8 + 20 + 8 + 4 + 16 - self.init_tag = 123456 - self.a_rwnd = 9876 - self.os = 3 - self.mis = 3 - self.i_tsn = 123456 - - self.p_state_cookie = sctp.param_state_cookie(b'\x01\x02\x03') - self.p_ipv4 = sctp.param_ipv4('192.168.1.1') - self.p_ipv6 = sctp.param_ipv6('fe80::647e:1aff:fec4:8284') - self.p_unrecognized_param = sctp.param_unrecognized_param( - b'\xff\xff\x00\x04') - self.p_ecn = sctp.param_ecn() - self.p_host_addr = sctp.param_host_addr(b'test host\x00') - self.params = [ - self.p_state_cookie, self.p_ipv4, self.p_ipv6, - self.p_unrecognized_param, self.p_ecn, self.p_host_addr] - - self.init_ack = sctp.chunk_init_ack( - init_tag=self.init_tag, a_rwnd=self.a_rwnd, os=self.os, - mis=self.mis, i_tsn=self.i_tsn, params=self.params) - - self.chunks = [self.init_ack] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x02\x00\x00\x54\x00\x01\xe2\x40\x00\x00\x26\x94' + \ - b'\x00\x03\x00\x03\x00\x01\xe2\x40' + \ - b'\x00\x07\x00\x07\x01\x02\x03\x00' + \ - b'\x00\x05\x00\x08\xc0\xa8\x01\x01' + \ - b'\x00\x06\x00\x14' + \ - b'\xfe\x80\x00\x00\x00\x00\x00\x00' + \ - b'\x64\x7e\x1a\xff\xfe\xc4\x82\x84' + \ - b'\x00\x08\x00\x08\xff\xff\x00\x04' + \ - b'\x80\x00\x00\x04' + \ - b'\x00\x0b\x00\x0e' + \ - b'\x74\x65\x73\x74\x20\x68\x6f\x73\x74\x00\x00\x00' - - def setUp_with_sack(self): - self.flags = 0 - self.length = 16 + 2 * 2 * 5 + 4 * 5 - self.tsn_ack = 123456 - self.a_rwnd = 9876 - self.gapack_num = 5 - self.duptsn_num = 5 - self.gapacks = [[2, 3], [10, 12], [20, 24], [51, 52], [62, 63]] - self.duptsns = [123458, 123466, 123476, 123507, 123518] - - self.sack = sctp.chunk_sack( - tsn_ack=self.tsn_ack, a_rwnd=self.a_rwnd, - gapack_num=self.gapack_num, duptsn_num=self.duptsn_num, - gapacks=self.gapacks, duptsns=self.duptsns) - - self.chunks = [self.sack] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x03\x00\x00\x38\x00\x01\xe2\x40' + \ - b'\x00\x00\x26\x94\x00\x05\x00\x05' + \ - b'\x00\x02\x00\x03\x00\x0a\x00\x0c\x00\x14\x00\x18' + \ - b'\x00\x33\x00\x34\x00\x3e\x00\x3f' + \ - b'\x00\x01\xe2\x42\x00\x01\xe2\x4a\x00\x01\xe2\x54' + \ - b'\x00\x01\xe2\x73\x00\x01\xe2\x7e' - - def setUp_with_heartbeat(self): - self.flags = 0 - self.length = 4 + 8 - - self.p_heartbeat = sctp.param_heartbeat(b'\x01\x02\x03\x04') - - self.heartbeat = sctp.chunk_heartbeat(info=self.p_heartbeat) - - self.chunks = [self.heartbeat] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x04\x00\x00\x0c' + \ - b'\x00\x01\x00\x08' + \ - b'\x01\x02\x03\x04' - - def setUp_with_heartbeat_ack(self): - self.flags = 0 - self.length = 4 + 12 - - self.p_heartbeat = sctp.param_heartbeat( - b'\xff\xee\xdd\xcc\xbb\xaa\x99\x88') - - self.heartbeat_ack = sctp.chunk_heartbeat_ack(info=self.p_heartbeat) - - self.chunks = [self.heartbeat_ack] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x05\x00\x00\x10' + \ - b'\x00\x01\x00\x0c' + \ - b'\xff\xee\xdd\xcc\xbb\xaa\x99\x88' - - def setUp_with_abort(self): - self.tflag = 0 - self.length = 4 + 8 + 16 + 8 + 4 + 20 + 8 + 4 + 8 + 8 + 4 + 12 \ - + 20 + 20 - - self.c_invalid_stream_id = sctp.cause_invalid_stream_id(4096) - self.c_missing_param = sctp.cause_missing_param( - [sctp.PTYPE_IPV4, sctp.PTYPE_IPV6, - sctp.PTYPE_COOKIE_PRESERVE, sctp.PTYPE_HOST_ADDR]) - self.c_stale_cookie = sctp.cause_stale_cookie(b'\x00\x00\x13\x88') - self.c_out_of_resource = sctp.cause_out_of_resource() - self.c_unresolvable_addr = sctp.cause_unresolvable_addr( - sctp.param_host_addr(b'test host\x00')) - self.c_unrecognized_chunk = sctp.cause_unrecognized_chunk( - b'\xff\x00\x00\x04') - self.c_invalid_param = sctp.cause_invalid_param() - self.c_unrecognized_param = sctp.cause_unrecognized_param( - b'\xff\xff\x00\x04') - self.c_no_userdata = sctp.cause_no_userdata(b'\x00\x01\xe2\x40') - self.c_cookie_while_shutdown = sctp.cause_cookie_while_shutdown() - self.c_restart_with_new_addr = sctp.cause_restart_with_new_addr( - sctp.param_ipv4('192.168.1.1')) - self.c_user_initiated_abort = sctp.cause_user_initiated_abort( - b'Key Interrupt.\x00') - self.c_protocol_violation = sctp.cause_protocol_violation( - b'Unknown reason.\x00') - - self.causes = [ - self.c_invalid_stream_id, self.c_missing_param, - self.c_stale_cookie, self.c_out_of_resource, - self.c_unresolvable_addr, self.c_unrecognized_chunk, - self.c_invalid_param, self.c_unrecognized_param, - self.c_no_userdata, self.c_cookie_while_shutdown, - self.c_restart_with_new_addr, self.c_user_initiated_abort, - self.c_protocol_violation] - - self.abort = sctp.chunk_abort(causes=self.causes) - - self.chunks = [self.abort] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x06\x00\x00\x90' + \ - b'\x00\x01\x00\x08\x10\x00\x00\x00' + \ - b'\x00\x02\x00\x10\x00\x00\x00\x04' + \ - b'\x00\x05\x00\x06\x00\x09\x00\x0b' + \ - b'\x00\x03\x00\x08\x00\x00\x13\x88' + \ - b'\x00\x04\x00\x04' + \ - b'\x00\x05\x00\x14' + \ - b'\x00\x0b\x00\x0e' + \ - b'\x74\x65\x73\x74\x20\x68\x6f\x73\x74\x00\x00\x00' + \ - b'\x00\x06\x00\x08\xff\x00\x00\x04' + \ - b'\x00\x07\x00\x04' + \ - b'\x00\x08\x00\x08\xff\xff\x00\x04' + \ - b'\x00\x09\x00\x08\x00\x01\xe2\x40' + \ - b'\x00\x0a\x00\x04' + \ - b'\x00\x0b\x00\x0c' + \ - b'\x00\x05\x00\x08\xc0\xa8\x01\x01' + \ - b'\x00\x0c\x00\x13' + \ - b'\x4b\x65\x79\x20\x49\x6e\x74\x65' + \ - b'\x72\x72\x75\x70\x74\x2e\x00\x00' + \ - b'\x00\x0d\x00\x14' + \ - b'\x55\x6e\x6b\x6e\x6f\x77\x6e\x20' + \ - b'\x72\x65\x61\x73\x6f\x6e\x2e\x00' - - def setUp_with_shutdown(self): - self.flags = 0 - self.length = 8 - self.tsn_ack = 123456 - - self.shutdown = sctp.chunk_shutdown(tsn_ack=self.tsn_ack) - - self.chunks = [self.shutdown] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x07\x00\x00\x08\x00\x01\xe2\x40' - - def setUp_with_shutdown_ack(self): - self.flags = 0 - self.length = 4 - - self.shutdown_ack = sctp.chunk_shutdown_ack() - - self.chunks = [self.shutdown_ack] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x08\x00\x00\x04' - - def setUp_with_error(self): - self.flags = 0 - self.length = 4 + 8 + 16 + 8 + 4 + 20 + 8 + 4 + 8 + 8 + 4 + 12 \ - + 20 + 20 - - self.c_invalid_stream_id = sctp.cause_invalid_stream_id(4096) - self.c_missing_param = sctp.cause_missing_param( - [sctp.PTYPE_IPV4, sctp.PTYPE_IPV6, - sctp.PTYPE_COOKIE_PRESERVE, sctp.PTYPE_HOST_ADDR]) - self.c_stale_cookie = sctp.cause_stale_cookie(b'\x00\x00\x13\x88') - self.c_out_of_resource = sctp.cause_out_of_resource() - self.c_unresolvable_addr = sctp.cause_unresolvable_addr( - sctp.param_host_addr(b'test host\x00')) - self.c_unrecognized_chunk = sctp.cause_unrecognized_chunk( - b'\xff\x00\x00\x04') - self.c_invalid_param = sctp.cause_invalid_param() - self.c_unrecognized_param = sctp.cause_unrecognized_param( - b'\xff\xff\x00\x04') - self.c_no_userdata = sctp.cause_no_userdata(b'\x00\x01\xe2\x40') - self.c_cookie_while_shutdown = sctp.cause_cookie_while_shutdown() - self.c_restart_with_new_addr = sctp.cause_restart_with_new_addr( - sctp.param_ipv4('192.168.1.1')) - self.c_user_initiated_abort = sctp.cause_user_initiated_abort( - b'Key Interrupt.\x00') - self.c_protocol_violation = sctp.cause_protocol_violation( - b'Unknown reason.\x00') - - self.causes = [ - self.c_invalid_stream_id, self.c_missing_param, - self.c_stale_cookie, self.c_out_of_resource, - self.c_unresolvable_addr, self.c_unrecognized_chunk, - self.c_invalid_param, self.c_unrecognized_param, - self.c_no_userdata, self.c_cookie_while_shutdown, - self.c_restart_with_new_addr, self.c_user_initiated_abort, - self.c_protocol_violation] - - self.error = sctp.chunk_error(causes=self.causes) - - self.chunks = [self.error] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x09\x00\x00\x90' + \ - b'\x00\x01\x00\x08\x10\x00\x00\x00' + \ - b'\x00\x02\x00\x10\x00\x00\x00\x04' + \ - b'\x00\x05\x00\x06\x00\x09\x00\x0b' + \ - b'\x00\x03\x00\x08\x00\x00\x13\x88' + \ - b'\x00\x04\x00\x04' + \ - b'\x00\x05\x00\x14' + \ - b'\x00\x0b\x00\x0e' + \ - b'\x74\x65\x73\x74\x20\x68\x6f\x73\x74\x00\x00\x00' + \ - b'\x00\x06\x00\x08\xff\x00\x00\x04' + \ - b'\x00\x07\x00\x04' + \ - b'\x00\x08\x00\x08\xff\xff\x00\x04' + \ - b'\x00\x09\x00\x08\x00\x01\xe2\x40' + \ - b'\x00\x0a\x00\x04' + \ - b'\x00\x0b\x00\x0c' + \ - b'\x00\x05\x00\x08\xc0\xa8\x01\x01' + \ - b'\x00\x0c\x00\x13' + \ - b'\x4b\x65\x79\x20\x49\x6e\x74\x65' + \ - b'\x72\x72\x75\x70\x74\x2e\x00\x00' + \ - b'\x00\x0d\x00\x14' + \ - b'\x55\x6e\x6b\x6e\x6f\x77\x6e\x20' + \ - b'\x72\x65\x61\x73\x6f\x6e\x2e\x00' - - def setUp_with_cookie_echo(self): - self.flags = 0 - self.length = 8 - self.cookie = b'\x12\x34\x56\x78' - - self.cookie_echo = sctp.chunk_cookie_echo(cookie=self.cookie) - - self.chunks = [self.cookie_echo] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x0a\x00\x00\x08\x12\x34\x56\x78' - - def setUp_with_cookie_ack(self): - self.flags = 0 - self.length = 4 - - self.cookie_ack = sctp.chunk_cookie_ack() - - self.chunks = [self.cookie_ack] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x0b\x00\x00\x04' - - def setUp_with_ecn_echo(self): - self.flags = 0 - self.length = 8 - self.low_tsn = 123456 - - self.ecn_echo = sctp.chunk_ecn_echo(low_tsn=self.low_tsn) - - self.chunks = [self.ecn_echo] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x0c\x00\x00\x08\x00\x01\xe2\x40' - - def setUp_with_cwr(self): - self.flags = 0 - self.length = 8 - self.low_tsn = 123456 - - self.cwr = sctp.chunk_cwr(low_tsn=self.low_tsn) - - self.chunks = [self.cwr] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x0d\x00\x00\x08\x00\x01\xe2\x40' - - def setUp_with_shutdown_complete(self): - self.tflag = 0 - self.length = 4 - - self.shutdown_complete = sctp.chunk_shutdown_complete() - - self.chunks = [self.shutdown_complete] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x0e\x00\x00\x04' - - def setUp_with_multi_chunks(self): - self.s_flags = 0 - self.s_length = 16 - self.s_tsn_ack = 123456 - self.s_a_rwnd = 9876 - self.s_gapack_num = 0 - self.s_duptsn_num = 0 - self.s_gapacks = None - self.s_duptsns = None - - self.sack = sctp.chunk_sack( - tsn_ack=self.s_tsn_ack, a_rwnd=self.s_a_rwnd) - - self.d1_unordered = 0 - self.d1_begin = 1 - self.d1_end = 0 - self.d1_length = 16 + 10 - self.d1_tsn = 12345 - self.d1_sid = 1 - self.d1_seq = 0 - self.d1_payload_id = 0 - self.d1_payload_data = b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a' - - self.data1 = sctp.chunk_data( - begin=self.d1_begin, tsn=self.d1_tsn, sid=self.d1_sid, - payload_data=self.d1_payload_data) - - self.d2_unordered = 0 - self.d2_begin = 0 - self.d2_end = 1 - self.d2_length = 16 + 10 - self.d2_tsn = 12346 - self.d2_sid = 1 - self.d2_seq = 1 - self.d2_payload_id = 0 - self.d2_payload_data = b'\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a' - - self.data2 = sctp.chunk_data( - end=self.d2_end, tsn=self.d2_tsn, sid=self.d2_sid, - seq=self.d2_seq, payload_data=self.d2_payload_data) - - self.chunks = [self.sack, self.data1, self.data2] - - self.sc = sctp.sctp( - self.src_port, self.dst_port, self.vtag, self.csum, - self.chunks) - - self.buf += b'\x03\x00\x00\x10\x00\x01\xe2\x40' + \ - b'\x00\x00\x26\x94\x00\x00\x00\x00' + \ - b'\x00\x02\x00\x1a\x00\x00\x30\x39\x00\x01\x00\x00' + \ - b'\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a' + \ - b'\x00\x01\x00\x1a\x00\x00\x30\x3a\x00\x01\x00\x01' + \ - b'\x00\x00\x00\x00\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a' - - def tearDown(self): - pass - - def test_init(self): - eq_(self.src_port, self.sc.src_port) - eq_(self.dst_port, self.sc.dst_port) - eq_(self.vtag, self.sc.vtag) - eq_(self.csum, self.sc.csum) - eq_(self.chunks, self.sc.chunks) - - def test_init_with_data(self): - self.setUp_with_data() - self.test_init() - - def test_init_with_init(self): - self.setUp_with_init() - self.test_init() - - def test_init_with_init_ack(self): - self.setUp_with_init_ack() - self.test_init() - - def test_init_with_sack(self): - self.setUp_with_sack() - self.test_init() - - def test_init_with_heartbeat(self): - self.setUp_with_heartbeat() - self.test_init() - - def test_init_with_heartbeat_ack(self): - self.setUp_with_heartbeat_ack() - self.test_init() - - def test_init_with_abort(self): - self.setUp_with_abort() - self.test_init() - - def test_init_with_shutdown(self): - self.setUp_with_shutdown() - self.test_init() - - def test_init_with_shutdown_ack(self): - self.setUp_with_shutdown_ack() - self.test_init() - - def test_init_with_error(self): - self.setUp_with_error() - self.test_init() - - def test_init_with_cookie_echo(self): - self.setUp_with_cookie_echo() - self.test_init() - - def test_init_with_cookie_ack(self): - self.setUp_with_cookie_ack() - self.test_init() - - def test_init_with_ecn_echo(self): - self.setUp_with_ecn_echo() - self.test_init() - - def test_init_with_cwr(self): - self.setUp_with_cwr() - self.test_init() - - def test_init_with_shutdown_complete(self): - self.setUp_with_shutdown_complete() - self.test_init() - - def test_init_with_multi_chunks(self): - self.setUp_with_multi_chunks() - self.test_init() - - def test_parser(self): - _res = self.sc.parser(six.binary_type(self.buf)) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - # to calculate the lengths of parameters. - self.sc.serialize(None, None) - - eq_(self.src_port, res.src_port) - eq_(self.dst_port, res.dst_port) - eq_(self.vtag, res.vtag) - eq_(self.csum, res.csum) - eq_(str(self.chunks), str(res.chunks)) - - def test_parser_with_data(self): - self.setUp_with_data() - self.test_parser() - - def test_parser_with_init(self): - self.setUp_with_init() - self.test_parser() - - def test_parser_with_init_ack(self): - self.setUp_with_init_ack() - self.test_parser() - - def test_parser_with_sack(self): - self.setUp_with_sack() - self.test_parser() - - def test_parser_with_heartbeat(self): - self.setUp_with_heartbeat() - self.test_parser() - - def test_parser_with_heartbeat_ack(self): - self.setUp_with_heartbeat_ack() - self.test_parser() - - def test_parser_with_abort(self): - self.setUp_with_abort() - self.test_parser() - - def test_parser_with_shutdown(self): - self.setUp_with_shutdown() - self.test_parser() - - def test_parser_with_shutdown_ack(self): - self.setUp_with_shutdown_ack() - self.test_parser() - - def test_parser_with_error(self): - self.setUp_with_error() - self.test_parser() - - def test_parser_with_cookie_echo(self): - self.setUp_with_cookie_echo() - self.test_parser() - - def test_parser_with_cookie_ack(self): - self.setUp_with_cookie_ack() - self.test_parser() - - def test_parser_with_ecn_echo(self): - self.setUp_with_ecn_echo() - self.test_parser() - - def test_parser_with_cwr(self): - self.setUp_with_cwr() - self.test_parser() - - def test_parser_with_shutdown_complete(self): - self.setUp_with_shutdown_complete() - self.test_parser() - - def test_parser_with_multi_chunks(self): - self.setUp_with_multi_chunks() - self.test_parser() - - def _test_serialize(self): - buf = self.sc.serialize(bytearray(), None) - res = struct.unpack_from(sctp.sctp._PACK_STR, buf) - eq_(self.src_port, res[0]) - eq_(self.dst_port, res[1]) - eq_(self.vtag, res[2]) - # skip compare checksum - # eq_(self.csum, res[3]) - - return buf[sctp.sctp._MIN_LEN:] - - def test_serialize(self): - self._test_serialize() - - def test_serialize_with_data(self): - self.setUp_with_data() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_data._PACK_STR, buf) - eq_(sctp.chunk_data.chunk_type(), res[0]) - flags = ( - (self.unordered << 2) | - (self.begin << 1) | - (self.end << 0)) - eq_(flags, res[1]) - eq_(self.length, res[2]) - eq_(self.tsn, res[3]) - eq_(self.sid, res[4]) - eq_(self.seq, res[5]) - eq_(self.payload_id, res[6]) - eq_(self.payload_data, buf[sctp.chunk_data._MIN_LEN:]) - - def test_serialize_with_init(self): - self.setUp_with_init() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_init._PACK_STR, buf) - eq_(sctp.chunk_init.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - eq_(self.init_tag, res[3]) - eq_(self.a_rwnd, res[4]) - eq_(self.os, res[5]) - eq_(self.mis, res[6]) - eq_(self.i_tsn, res[7]) - - buf = buf[sctp.chunk_init._MIN_LEN:] - res1 = struct.unpack_from(sctp.param_ipv4._PACK_STR, buf) - eq_(sctp.param_ipv4.param_type(), res1[0]) - eq_(8, res1[1]) - eq_('192.168.1.1', addrconv.ipv4.bin_to_text( - buf[sctp.param_ipv4._MIN_LEN:sctp.param_ipv4._MIN_LEN + 4])) - - buf = buf[8:] - res2 = struct.unpack_from(sctp.param_ipv6._PACK_STR, buf) - eq_(sctp.param_ipv6.param_type(), res2[0]) - eq_(20, res2[1]) - eq_('fe80::647e:1aff:fec4:8284', addrconv.ipv6.bin_to_text( - buf[sctp.param_ipv6._MIN_LEN:sctp.param_ipv6._MIN_LEN + 16])) - - buf = buf[20:] - res3 = struct.unpack_from(sctp.param_cookie_preserve._PACK_STR, - buf) - eq_(sctp.param_cookie_preserve.param_type(), res3[0]) - eq_(8, res3[1]) - eq_(5000, res3[2]) - - buf = buf[8:] - res4 = struct.unpack_from(sctp.param_ecn._PACK_STR, buf) - eq_(sctp.param_ecn.param_type(), res4[0]) - eq_(4, res4[1]) - - buf = buf[4:] - res5 = struct.unpack_from(sctp.param_host_addr._PACK_STR, buf) - eq_(sctp.param_host_addr.param_type(), res5[0]) - eq_(14, res5[1]) - eq_(b'test host\x00', - buf[sctp.param_host_addr._MIN_LEN: - sctp.param_host_addr._MIN_LEN + 10]) - - buf = buf[16:] - res6 = struct.unpack_from(sctp.param_supported_addr._PACK_STR, buf) - res6 = list(res6) - eq_(sctp.param_supported_addr.param_type(), res6[0]) - eq_(14, res6[1]) - buf = buf[sctp.param_supported_addr._MIN_LEN:] - offset = 0 - tmplist = [] - while offset < len(buf): - (tmp, ) = struct.unpack_from('!H', buf, offset) - tmplist.append(tmp) - offset += struct.calcsize('!H') - res6.extend(tmplist) - eq_(sctp.PTYPE_IPV4, res6[2]) - eq_(sctp.PTYPE_IPV6, res6[3]) - eq_(sctp.PTYPE_COOKIE_PRESERVE, res6[4]) - eq_(sctp.PTYPE_ECN, res6[5]) - eq_(sctp.PTYPE_HOST_ADDR, res6[6]) - - def test_serialize_with_init_ack(self): - self.setUp_with_init_ack() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_init_ack._PACK_STR, buf) - eq_(sctp.chunk_init_ack.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - eq_(self.init_tag, res[3]) - eq_(self.a_rwnd, res[4]) - eq_(self.os, res[5]) - eq_(self.mis, res[6]) - eq_(self.i_tsn, res[7]) - - buf = buf[sctp.chunk_init_ack._MIN_LEN:] - res1 = struct.unpack_from(sctp.param_state_cookie._PACK_STR, buf) - eq_(sctp.param_state_cookie.param_type(), res1[0]) - eq_(7, res1[1]) - eq_(b'\x01\x02\x03', - buf[sctp.param_state_cookie._MIN_LEN: - sctp.param_state_cookie._MIN_LEN + 3]) - - buf = buf[8:] - res2 = struct.unpack_from(sctp.param_ipv4._PACK_STR, buf) - eq_(sctp.param_ipv4.param_type(), res2[0]) - eq_(8, res2[1]) - eq_('192.168.1.1', addrconv.ipv4.bin_to_text( - buf[sctp.param_ipv4._MIN_LEN:sctp.param_ipv4._MIN_LEN + 4])) - - buf = buf[8:] - res3 = struct.unpack_from(sctp.param_ipv6._PACK_STR, buf) - eq_(sctp.param_ipv6.param_type(), res3[0]) - eq_(20, res3[1]) - eq_('fe80::647e:1aff:fec4:8284', addrconv.ipv6.bin_to_text( - buf[sctp.param_ipv6._MIN_LEN:sctp.param_ipv6._MIN_LEN + 16])) - - buf = buf[20:] - res4 = struct.unpack_from( - sctp.param_unrecognized_param._PACK_STR, buf) - eq_(sctp.param_unrecognized_param.param_type(), res4[0]) - eq_(8, res4[1]) - eq_(b'\xff\xff\x00\x04', - buf[sctp.param_unrecognized_param._MIN_LEN: - sctp.param_unrecognized_param._MIN_LEN + 4]) - - buf = buf[8:] - res5 = struct.unpack_from(sctp.param_ecn._PACK_STR, buf) - eq_(sctp.param_ecn.param_type(), res5[0]) - eq_(4, res5[1]) - - buf = buf[4:] - res6 = struct.unpack_from(sctp.param_host_addr._PACK_STR, buf) - eq_(sctp.param_host_addr.param_type(), res6[0]) - eq_(14, res6[1]) - eq_(b'test host\x00', - buf[sctp.param_host_addr._MIN_LEN: - sctp.param_host_addr._MIN_LEN + 10]) - - def test_serialize_with_sack(self): - self.setUp_with_sack() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_sack._PACK_STR, buf) - eq_(sctp.chunk_sack.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - eq_(self.tsn_ack, res[3]) - eq_(self.a_rwnd, res[4]) - eq_(self.gapack_num, res[5]) - eq_(self.duptsn_num, res[6]) - - buf = buf[sctp.chunk_sack._MIN_LEN:] - gapacks = [] - for _ in range(self.gapack_num): - (gap_s, gap_e) = struct.unpack_from( - sctp.chunk_sack._GAPACK_STR, buf) - one = [gap_s, gap_e] - gapacks.append(one) - buf = buf[sctp.chunk_sack._GAPACK_LEN:] - duptsns = [] - for _ in range(self.duptsn_num): - (duptsn, ) = struct.unpack_from( - sctp.chunk_sack._DUPTSN_STR, buf) - duptsns.append(duptsn) - buf = buf[sctp.chunk_sack._DUPTSN_LEN:] - eq_(self.gapacks, gapacks) - eq_(self.duptsns, duptsns) - - def test_serialize_with_heartbeat(self): - self.setUp_with_heartbeat() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_heartbeat._PACK_STR, buf) - eq_(sctp.chunk_heartbeat.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - - buf = buf[sctp.chunk_heartbeat._MIN_LEN:] - res1 = struct.unpack_from(sctp.param_heartbeat._PACK_STR, buf) - eq_(sctp.param_heartbeat.param_type(), res1[0]) - eq_(8, res1[1]) - eq_(b'\x01\x02\x03\x04', - buf[sctp.param_heartbeat._MIN_LEN: - sctp.param_heartbeat._MIN_LEN + 4]) - - def test_serialize_with_heartbeat_ack(self): - self.setUp_with_heartbeat_ack() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_heartbeat_ack._PACK_STR, buf) - eq_(sctp.chunk_heartbeat_ack.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - - buf = buf[sctp.chunk_heartbeat_ack._MIN_LEN:] - res1 = struct.unpack_from(sctp.param_heartbeat._PACK_STR, buf) - eq_(sctp.param_heartbeat.param_type(), res1[0]) - eq_(12, res1[1]) - eq_(b'\xff\xee\xdd\xcc\xbb\xaa\x99\x88', - buf[sctp.param_heartbeat._MIN_LEN: - sctp.param_heartbeat._MIN_LEN + 8]) - - def test_serialize_with_abort(self): - self.setUp_with_abort() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_abort._PACK_STR, buf) - eq_(sctp.chunk_abort.chunk_type(), res[0]) - flags = self.tflag << 0 - eq_(flags, res[1]) - eq_(self.length, res[2]) - - buf = buf[sctp.chunk_abort._MIN_LEN:] - res1 = struct.unpack_from(sctp.cause_invalid_stream_id._PACK_STR, buf) - eq_(sctp.cause_invalid_stream_id.cause_code(), res1[0]) - eq_(8, res1[1]) - eq_(4096, res1[2]) - - buf = buf[8:] - res2 = struct.unpack_from(sctp.cause_missing_param._PACK_STR, buf) - eq_(sctp.cause_missing_param.cause_code(), res2[0]) - eq_(16, res2[1]) - eq_(4, res2[2]) - types = [] - for count in range(4): - (tmp, ) = struct.unpack_from( - '!H', buf, sctp.cause_missing_param._MIN_LEN + 2 * count) - types.append(tmp) - eq_(str([sctp.PTYPE_IPV4, sctp.PTYPE_IPV6, - sctp.PTYPE_COOKIE_PRESERVE, sctp.PTYPE_HOST_ADDR]), - str(types)) - - buf = buf[16:] - res3 = struct.unpack_from(sctp.cause_stale_cookie._PACK_STR, buf) - eq_(sctp.cause_stale_cookie.cause_code(), res3[0]) - eq_(8, res3[1]) - eq_(b'\x00\x00\x13\x88', - buf[sctp.cause_stale_cookie._MIN_LEN: - sctp.cause_stale_cookie._MIN_LEN + 4]) - - buf = buf[8:] - res4 = struct.unpack_from(sctp.cause_out_of_resource._PACK_STR, buf) - eq_(sctp.cause_out_of_resource.cause_code(), res4[0]) - eq_(4, res4[1]) - - buf = buf[4:] - res5 = struct.unpack_from( - sctp.cause_unresolvable_addr._PACK_STR, buf) - eq_(sctp.cause_unresolvable_addr.cause_code(), res5[0]) - eq_(20, res5[1]) - eq_(b'\x00\x0b\x00\x0e\x74\x65\x73\x74' + - b'\x20\x68\x6f\x73\x74\x00\x00\x00', - buf[sctp.cause_unresolvable_addr._MIN_LEN: - sctp.cause_unresolvable_addr._MIN_LEN + 16]) - - buf = buf[20:] - res6 = struct.unpack_from( - sctp.cause_unrecognized_chunk._PACK_STR, buf) - eq_(sctp.cause_unrecognized_chunk.cause_code(), res6[0]) - eq_(8, res6[1]) - eq_(b'\xff\x00\x00\x04', - buf[sctp.cause_unrecognized_chunk._MIN_LEN: - sctp.cause_unrecognized_chunk._MIN_LEN + 4]) - - buf = buf[8:] - res7 = struct.unpack_from(sctp.cause_invalid_param._PACK_STR, buf) - eq_(sctp.cause_invalid_param.cause_code(), res7[0]) - eq_(4, res7[1]) - - buf = buf[4:] - res8 = struct.unpack_from( - sctp.cause_unrecognized_param._PACK_STR, buf) - eq_(sctp.cause_unrecognized_param.cause_code(), res8[0]) - eq_(8, res8[1]) - eq_(b'\xff\xff\x00\x04', - buf[sctp.cause_unrecognized_param._MIN_LEN: - sctp.cause_unrecognized_param._MIN_LEN + 4]) - - buf = buf[8:] - res9 = struct.unpack_from(sctp.cause_no_userdata._PACK_STR, buf) - eq_(sctp.cause_no_userdata.cause_code(), res9[0]) - eq_(8, res9[1]) - eq_(b'\x00\x01\xe2\x40', - buf[sctp.cause_no_userdata._MIN_LEN: - sctp.cause_no_userdata._MIN_LEN + 4]) - - buf = buf[8:] - res10 = struct.unpack_from( - sctp.cause_cookie_while_shutdown._PACK_STR, buf) - eq_(sctp.cause_cookie_while_shutdown.cause_code(), res10[0]) - eq_(4, res10[1]) - - buf = buf[4:] - res11 = struct.unpack_from( - sctp.cause_restart_with_new_addr._PACK_STR, buf) - eq_(sctp.cause_restart_with_new_addr.cause_code(), res11[0]) - eq_(12, res11[1]) - eq_(b'\x00\x05\x00\x08\xc0\xa8\x01\x01', - buf[sctp.cause_restart_with_new_addr._MIN_LEN: - sctp.cause_restart_with_new_addr._MIN_LEN + 8]) - - buf = buf[12:] - res12 = struct.unpack_from( - sctp.cause_user_initiated_abort._PACK_STR, buf) - eq_(sctp.cause_user_initiated_abort.cause_code(), res12[0]) - eq_(19, res12[1]) - eq_(b'Key Interrupt.\x00', - buf[sctp.cause_user_initiated_abort._MIN_LEN: - sctp.cause_user_initiated_abort._MIN_LEN + 15]) - - buf = buf[20:] - res13 = struct.unpack_from( - sctp.cause_protocol_violation._PACK_STR, buf) - eq_(sctp.cause_protocol_violation.cause_code(), res13[0]) - eq_(20, res13[1]) - eq_(b'Unknown reason.\x00', - buf[sctp.cause_protocol_violation._MIN_LEN: - sctp.cause_protocol_violation._MIN_LEN + 16]) - - def test_serialize_with_shutdown(self): - self.setUp_with_shutdown() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_shutdown._PACK_STR, buf) - eq_(sctp.chunk_shutdown.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - eq_(self.tsn_ack, res[3]) - - def test_serialize_with_shutdown_ack(self): - self.setUp_with_shutdown_ack() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_shutdown_ack._PACK_STR, buf) - eq_(sctp.chunk_shutdown_ack.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - - def test_serialize_with_error(self): - self.setUp_with_error() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_error._PACK_STR, buf) - eq_(sctp.chunk_error.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - - buf = buf[sctp.chunk_error._MIN_LEN:] - res1 = struct.unpack_from(sctp.cause_invalid_stream_id._PACK_STR, buf) - eq_(sctp.cause_invalid_stream_id.cause_code(), res1[0]) - eq_(8, res1[1]) - eq_(4096, res1[2]) - - buf = buf[8:] - res2 = struct.unpack_from(sctp.cause_missing_param._PACK_STR, buf) - eq_(sctp.cause_missing_param.cause_code(), res2[0]) - eq_(16, res2[1]) - eq_(4, res2[2]) - types = [] - for count in range(4): - (tmp, ) = struct.unpack_from( - '!H', buf, sctp.cause_missing_param._MIN_LEN + 2 * count) - types.append(tmp) - eq_(str([sctp.PTYPE_IPV4, sctp.PTYPE_IPV6, - sctp.PTYPE_COOKIE_PRESERVE, sctp.PTYPE_HOST_ADDR]), - str(types)) - - buf = buf[16:] - res3 = struct.unpack_from(sctp.cause_stale_cookie._PACK_STR, buf) - eq_(sctp.cause_stale_cookie.cause_code(), res3[0]) - eq_(8, res3[1]) - eq_(b'\x00\x00\x13\x88', - buf[sctp.cause_stale_cookie._MIN_LEN: - sctp.cause_stale_cookie._MIN_LEN + 4]) - - buf = buf[8:] - res4 = struct.unpack_from(sctp.cause_out_of_resource._PACK_STR, buf) - eq_(sctp.cause_out_of_resource.cause_code(), res4[0]) - eq_(4, res4[1]) - - buf = buf[4:] - res5 = struct.unpack_from( - sctp.cause_unresolvable_addr._PACK_STR, buf) - eq_(sctp.cause_unresolvable_addr.cause_code(), res5[0]) - eq_(20, res5[1]) - eq_(b'\x00\x0b\x00\x0e\x74\x65\x73\x74' + - b'\x20\x68\x6f\x73\x74\x00\x00\x00', - buf[sctp.cause_unresolvable_addr._MIN_LEN: - sctp.cause_unresolvable_addr._MIN_LEN + 16]) - - buf = buf[20:] - res6 = struct.unpack_from( - sctp.cause_unrecognized_chunk._PACK_STR, buf) - eq_(sctp.cause_unrecognized_chunk.cause_code(), res6[0]) - eq_(8, res6[1]) - eq_(b'\xff\x00\x00\x04', - buf[sctp.cause_unrecognized_chunk._MIN_LEN: - sctp.cause_unrecognized_chunk._MIN_LEN + 4]) - - buf = buf[8:] - res7 = struct.unpack_from(sctp.cause_invalid_param._PACK_STR, buf) - eq_(sctp.cause_invalid_param.cause_code(), res7[0]) - eq_(4, res7[1]) - - buf = buf[4:] - res8 = struct.unpack_from( - sctp.cause_unrecognized_param._PACK_STR, buf) - eq_(sctp.cause_unrecognized_param.cause_code(), res8[0]) - eq_(8, res8[1]) - eq_(b'\xff\xff\x00\x04', - buf[sctp.cause_unrecognized_param._MIN_LEN: - sctp.cause_unrecognized_param._MIN_LEN + 4]) - - buf = buf[8:] - res9 = struct.unpack_from(sctp.cause_no_userdata._PACK_STR, buf) - eq_(sctp.cause_no_userdata.cause_code(), res9[0]) - eq_(8, res9[1]) - eq_(b'\x00\x01\xe2\x40', - buf[sctp.cause_no_userdata._MIN_LEN: - sctp.cause_no_userdata._MIN_LEN + 4]) - - buf = buf[8:] - res10 = struct.unpack_from( - sctp.cause_cookie_while_shutdown._PACK_STR, buf) - eq_(sctp.cause_cookie_while_shutdown.cause_code(), res10[0]) - eq_(4, res10[1]) - - buf = buf[4:] - res11 = struct.unpack_from( - sctp.cause_restart_with_new_addr._PACK_STR, buf) - eq_(sctp.cause_restart_with_new_addr.cause_code(), res11[0]) - eq_(12, res11[1]) - eq_(b'\x00\x05\x00\x08\xc0\xa8\x01\x01', - buf[sctp.cause_restart_with_new_addr._MIN_LEN: - sctp.cause_restart_with_new_addr._MIN_LEN + 8]) - - buf = buf[12:] - res12 = struct.unpack_from( - sctp.cause_user_initiated_abort._PACK_STR, buf) - eq_(sctp.cause_user_initiated_abort.cause_code(), res12[0]) - eq_(19, res12[1]) - eq_(b'Key Interrupt.\x00', - buf[sctp.cause_user_initiated_abort._MIN_LEN: - sctp.cause_user_initiated_abort._MIN_LEN + 15]) - - buf = buf[20:] - res13 = struct.unpack_from( - sctp.cause_protocol_violation._PACK_STR, buf) - eq_(sctp.cause_protocol_violation.cause_code(), res13[0]) - eq_(20, res13[1]) - eq_(b'Unknown reason.\x00', - buf[sctp.cause_protocol_violation._MIN_LEN: - sctp.cause_protocol_violation._MIN_LEN + 16]) - - def test_serialize_with_cookie_echo(self): - self.setUp_with_cookie_echo() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_cookie_echo._PACK_STR, buf) - eq_(sctp.chunk_cookie_echo.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - eq_(self.cookie, - buf[sctp.chunk_cookie_echo._MIN_LEN: - sctp.chunk_cookie_echo._MIN_LEN + 4]) - - def test_serialize_with_cookie_ack(self): - self.setUp_with_cookie_ack() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_cookie_ack._PACK_STR, buf) - eq_(sctp.chunk_cookie_ack.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - - def test_serialize_with_ecn_echo(self): - self.setUp_with_ecn_echo() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_ecn_echo._PACK_STR, buf) - eq_(sctp.chunk_ecn_echo.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - eq_(self.low_tsn, res[3]) - - def test_serialize_with_cwr(self): - self.setUp_with_cwr() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_cwr._PACK_STR, buf) - eq_(sctp.chunk_cwr.chunk_type(), res[0]) - eq_(self.flags, res[1]) - eq_(self.length, res[2]) - eq_(self.low_tsn, res[3]) - - def test_serialize_with_shutdown_complete(self): - self.setUp_with_shutdown_complete() - buf = self._test_serialize() - res = struct.unpack_from( - sctp.chunk_shutdown_complete._PACK_STR, buf) - eq_(sctp.chunk_shutdown_complete.chunk_type(), res[0]) - flags = self.tflag << 0 - eq_(flags, res[1]) - eq_(self.length, res[2]) - - def test_serialize_with_multi_chunks(self): - self.setUp_with_multi_chunks() - buf = self._test_serialize() - res = struct.unpack_from(sctp.chunk_sack._PACK_STR, buf) - eq_(sctp.chunk_sack.chunk_type(), res[0]) - eq_(self.s_flags, res[1]) - eq_(self.s_length, res[2]) - eq_(self.s_tsn_ack, res[3]) - eq_(self.s_a_rwnd, res[4]) - eq_(self.s_gapack_num, res[5]) - eq_(self.s_duptsn_num, res[6]) - - buf = buf[self.s_length:] - res = struct.unpack_from(sctp.chunk_data._PACK_STR, buf) - eq_(sctp.chunk_data.chunk_type(), res[0]) - d1_flags = ( - (self.d1_unordered << 2) | - (self.d1_begin << 1) | - (self.d1_end << 0)) - eq_(d1_flags, res[1]) - eq_(self.d1_length, res[2]) - eq_(self.d1_tsn, res[3]) - eq_(self.d1_sid, res[4]) - eq_(self.d1_seq, res[5]) - eq_(self.d1_payload_id, res[6]) - eq_(self.d1_payload_data, - buf[sctp.chunk_data._MIN_LEN: - sctp.chunk_data._MIN_LEN + 10]) - - buf = buf[self.d1_length:] - res = struct.unpack_from(sctp.chunk_data._PACK_STR, buf) - eq_(sctp.chunk_data.chunk_type(), res[0]) - d2_flags = ( - (self.d2_unordered << 2) | - (self.d2_begin << 1) | - (self.d2_end << 0)) - eq_(d2_flags, res[1]) - eq_(self.d2_length, res[2]) - eq_(self.d2_tsn, res[3]) - eq_(self.d2_sid, res[4]) - eq_(self.d2_seq, res[5]) - eq_(self.d2_payload_id, res[6]) - eq_(self.d2_payload_data, - buf[sctp.chunk_data._MIN_LEN: - sctp.chunk_data._MIN_LEN + 10]) - - def test_build_sctp(self): - eth = ethernet.ethernet('00:aa:aa:aa:aa:aa', '00:bb:bb:bb:bb:bb', - ether.ETH_TYPE_IP) - ip4 = ipv4.ipv4(4, 5, 16, 0, 0, 2, 0, 64, inet.IPPROTO_SCTP, 0, - '192.168.1.1', '10.144.1.1') - pkt = eth / ip4 / self.sc - - eth = pkt.get_protocol(ethernet.ethernet) - ok_(eth) - eq_(eth.ethertype, ether.ETH_TYPE_IP) - - ip4 = pkt.get_protocol(ipv4.ipv4) - ok_(ip4) - eq_(ip4.proto, inet.IPPROTO_SCTP) - - sc = pkt.get_protocol(sctp.sctp) - ok_(sc) - eq_(sc, self.sc) - - def test_build_sctp_with_data(self): - self.setUp_with_data() - self.test_build_sctp() - - def test_build_sctp_with_init(self): - self.setUp_with_init() - self.test_build_sctp() - - def test_build_sctp_with_init_ack(self): - self.setUp_with_init_ack() - self.test_build_sctp() - - def test_build_sctp_with_sack(self): - self.setUp_with_sack() - self.test_build_sctp() - - def test_build_sctp_with_heartbeat(self): - self.setUp_with_heartbeat() - self.test_build_sctp() - - def test_build_sctp_with_heartbeat_ack(self): - self.setUp_with_heartbeat_ack() - self.test_build_sctp() - - def test_build_sctp_with_abort(self): - self.setUp_with_abort() - self.test_build_sctp() - - def test_build_sctp_with_shutdown(self): - self.setUp_with_shutdown() - self.test_build_sctp() - - def test_build_sctp_with_shutdown_ack(self): - self.setUp_with_shutdown_ack() - self.test_build_sctp() - - def test_build_sctp_with_error(self): - self.setUp_with_error() - self.test_build_sctp() - - def test_build_sctp_with_cookie_echo(self): - self.setUp_with_cookie_echo() - self.test_build_sctp() - - def test_build_sctp_with_cookie_ack(self): - self.setUp_with_cookie_ack() - self.test_build_sctp() - - def test_build_sctp_with_ecn_echo(self): - self.setUp_with_ecn_echo() - self.test_build_sctp() - - def test_build_sctp_with_cwr(self): - self.setUp_with_cwr() - self.test_build_sctp() - - def test_build_sctp_with_shutdown_complete(self): - self.setUp_with_shutdown_complete() - self.test_build_sctp() - - def tset_build_sctp_with_multi_chunks(self): - self.setUp_with_multi_chunks() - self.test_build_sctp() - - def test_to_string(self): - sctp_values = {'src_port': self.src_port, - 'dst_port': self.dst_port, - 'vtag': self.vtag, - 'csum': self.csum, - 'chunks': self.chunks} - _sctp_str = ','.join(['%s=%s' % (k, sctp_values[k]) - for k, _ in inspect.getmembers(self.sc) - if k in sctp_values]) - sctp_str = '%s(%s)' % (sctp.sctp.__name__, _sctp_str) - - eq_(str(self.sc), sctp_str) - eq_(repr(self.sc), sctp_str) - - def test_to_string_with_data(self): - self.setUp_with_data() - self.test_to_string() - - def test_to_string_with_init(self): - self.setUp_with_init() - self.test_to_string() - - def test_to_string_with_init_ack(self): - self.setUp_with_init_ack() - self.test_to_string() - - def test_to_string_with_sack(self): - self.setUp_with_sack() - self.test_to_string() - - def test_to_string_with_heartbeat(self): - self.setUp_with_heartbeat() - self.test_to_string() - - def test_to_string_with_heartbeat_ack(self): - self.setUp_with_heartbeat_ack() - self.test_to_string() - - def test_to_string_with_abort(self): - self.setUp_with_abort() - self.test_to_string() - - def test_to_string_with_shutdown(self): - self.setUp_with_shutdown() - self.test_to_string() - - def test_to_string_with_shutdown_ack(self): - self.setUp_with_shutdown_ack() - self.test_to_string() - - def test_to_string_with_error(self): - self.setUp_with_error() - self.test_to_string() - - def test_to_string_with_cookie_echo(self): - self.setUp_with_cookie_echo() - self.test_to_string() - - def test_to_string_with_cookie_ack(self): - self.setUp_with_cookie_ack() - self.test_to_string() - - def test_to_string_with_ecn_echo(self): - self.setUp_with_ecn_echo() - self.test_to_string() - - def test_to_string_with_cwr(self): - self.setUp_with_cwr() - self.test_to_string() - - def test_to_string_with_shutdown_complete(self): - self.setUp_with_shutdown_complete() - self.test_to_string() - - def test_to_string_with_multi_chunks(self): - self.setUp_with_multi_chunks() - self.test_to_string() - - def test_json(self): - jsondict = self.sc.to_jsondict() - sc = sctp.sctp.from_jsondict(jsondict['sctp']) - eq_(str(self.sc), str(sc)) - - def test_json_with_data(self): - self.setUp_with_data() - self.test_json() - - def test_json_with_init(self): - self.setUp_with_init() - self.test_json() - - def test_json_with_init_ack(self): - self.setUp_with_init_ack() - self.test_json() - - def test_json_with_sack(self): - self.setUp_with_sack() - self.test_json() - - def test_json_with_heartbeat(self): - self.setUp_with_heartbeat() - self.test_json() - - def test_json_with_heartbeat_ack(self): - self.setUp_with_heartbeat_ack() - self.test_json() - - def test_json_with_abort(self): - self.setUp_with_abort() - self.test_json() - - def test_json_with_shutdown(self): - self.setUp_with_shutdown() - self.test_json() - - def test_json_with_shutdown_ack(self): - self.setUp_with_shutdown_ack() - self.test_json() - - def test_json_with_error(self): - self.setUp_with_error() - self.test_json() - - def test_json_with_cookie_echo(self): - self.setUp_with_cookie_echo() - self.test_json() - - def test_json_with_cookie_ack(self): - self.setUp_with_cookie_ack() - self.test_json() - - def test_json_with_ecn_echo(self): - self.setUp_with_ecn_echo() - self.test_json() - - def test_json_with_cwr(self): - self.setUp_with_cwr() - self.test_json() - - def test_json_with_shutdown_complete(self): - self.setUp_with_shutdown_complete() - self.test_json() - - def test_json_with_multi_chunks(self): - self.setUp_with_multi_chunks() - self.test_json() diff --git a/ryu/tests/unit/packet/test_slow.py b/ryu/tests/unit/packet/test_slow.py deleted file mode 100644 index 9e077fd2..00000000 --- a/ryu/tests/unit/packet/test_slow.py +++ /dev/null @@ -1,1104 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import copy -import logging -from struct import pack, unpack_from -import unittest - -from nose.tools import ok_, eq_, raises -from ryu.ofproto import ether -from ryu.lib.packet.ethernet import ethernet -from ryu.lib.packet.packet import Packet -from ryu.lib import addrconv -from ryu.lib.packet.slow import slow, lacp -from ryu.lib.packet.slow import SLOW_PROTOCOL_MULTICAST -from ryu.lib.packet.slow import SLOW_SUBTYPE_LACP -from ryu.lib.packet.slow import SLOW_SUBTYPE_MARKER - -LOG = logging.getLogger(__name__) - - -class Test_slow(unittest.TestCase): - """ Test case for Slow Protocol - """ - def setUp(self): - self.subtype = SLOW_SUBTYPE_LACP - self.version = lacp.LACP_VERSION_NUMBER - self.actor_tag = lacp.LACP_TLV_TYPE_ACTOR - self.actor_length = 20 - self.actor_system_priority = 65534 - self.actor_system = '00:07:0d:af:f4:54' - self.actor_key = 1 - self.actor_port_priority = 65535 - self.actor_port = 1 - self.actor_state_activity = lacp.LACP_STATE_ACTIVE - self.actor_state_timeout = lacp.LACP_STATE_LONG_TIMEOUT - self.actor_state_aggregation = lacp.LACP_STATE_AGGREGATEABLE - self.actor_state_synchronization = lacp.LACP_STATE_IN_SYNC - self.actor_state_collecting = lacp.LACP_STATE_COLLECTING_ENABLED - self.actor_state_distributing = lacp.LACP_STATE_DISTRIBUTING_ENABLED - self.actor_state_defaulted = lacp.LACP_STATE_OPERATIONAL_PARTNER - self.actor_state_expired = lacp.LACP_STATE_EXPIRED - self.actor_state = ( - (self.actor_state_activity << 0) | - (self.actor_state_timeout << 1) | - (self.actor_state_aggregation << 2) | - (self.actor_state_synchronization << 3) | - (self.actor_state_collecting << 4) | - (self.actor_state_distributing << 5) | - (self.actor_state_defaulted << 6) | - (self.actor_state_expired << 7)) - self.partner_tag = lacp.LACP_TLV_TYPE_PARTNER - self.partner_length = 20 - self.partner_system_priority = 0 - self.partner_system = '00:00:00:00:00:00' - self.partner_key = 0 - self.partner_port_priority = 0 - self.partner_port = 0 - self.partner_state_activity = 0 - self.partner_state_timeout = lacp.LACP_STATE_SHORT_TIMEOUT - self.partner_state_aggregation = 0 - self.partner_state_synchronization = 0 - self.partner_state_collecting = 0 - self.partner_state_distributing = 0 - self.partner_state_defaulted = 0 - self.partner_state_expired = 0 - self.partner_state = ( - (self.partner_state_activity << 0) | - (self.partner_state_timeout << 1) | - (self.partner_state_aggregation << 2) | - (self.partner_state_synchronization << 3) | - (self.partner_state_collecting << 4) | - (self.partner_state_distributing << 5) | - (self.partner_state_defaulted << 6) | - (self.partner_state_expired << 7)) - self.collector_tag = lacp.LACP_TLV_TYPE_COLLECTOR - self.collector_length = 16 - self.collector_max_delay = 0 - self.terminator_tag = lacp.LACP_TLV_TYPE_TERMINATOR - self.terminator_length = 0 - - self.head_fmt = lacp._HLEN_PACK_STR - self.head_len = lacp._HLEN_PACK_LEN - self.act_fmt = lacp._ACTPRT_INFO_PACK_STR - self.act_len = lacp._ACTPRT_INFO_PACK_LEN - self.prt_fmt = lacp._ACTPRT_INFO_PACK_STR - self.prt_len = lacp._ACTPRT_INFO_PACK_LEN - self.col_fmt = lacp._COL_INFO_PACK_STR - self.col_len = lacp._COL_INFO_PACK_LEN - self.trm_fmt = lacp._TRM_PACK_STR - self.trm_len = lacp._TRM_PACK_LEN - self.length = lacp._ALL_PACK_LEN - - self.head_buf = pack(self.head_fmt, - self.subtype, - self.version) - self.act_buf = pack(self.act_fmt, - self.actor_tag, - self.actor_length, - self.actor_system_priority, - addrconv.mac.text_to_bin(self.actor_system), - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state) - self.prt_buf = pack(self.prt_fmt, - self.partner_tag, - self.partner_length, - self.partner_system_priority, - addrconv.mac.text_to_bin(self.partner_system), - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state) - self.col_buf = pack(self.col_fmt, - self.collector_tag, - self.collector_length, - self.collector_max_delay) - self.trm_buf = pack(self.trm_fmt, - self.terminator_tag, - self.terminator_length) - - self.buf = self.head_buf + self.act_buf + self.prt_buf + \ - self.col_buf + self.trm_buf - - def tearDown(self): - pass - - def test_parser(self): - slow.parser(self.buf) - - def test_not_implemented_subtype(self): - not_implemented_buf = pack( - slow._PACK_STR, SLOW_SUBTYPE_MARKER) + self.buf[1:] - (instance, nexttype, last) = slow.parser(not_implemented_buf) - assert None == instance - assert None == nexttype - assert None != last - - def test_invalid_subtype(self): - invalid_buf = b'\xff' + self.buf[1:] - (instance, nexttype, last) = slow.parser(invalid_buf) - assert None == instance - assert None == nexttype - assert None != last - - -class Test_lacp(unittest.TestCase): - """ Test case for lacp - """ - - def setUp(self): - self.subtype = SLOW_SUBTYPE_LACP - self.version = lacp.LACP_VERSION_NUMBER - self.actor_tag = lacp.LACP_TLV_TYPE_ACTOR - self.actor_length = 20 - self.actor_system_priority = 65534 - self.actor_system = '00:07:0d:af:f4:54' - self.actor_key = 1 - self.actor_port_priority = 65535 - self.actor_port = 1 - self.actor_state_activity = lacp.LACP_STATE_ACTIVE - self.actor_state_timeout = lacp.LACP_STATE_LONG_TIMEOUT - self.actor_state_aggregation = lacp.LACP_STATE_AGGREGATEABLE - self.actor_state_synchronization = lacp.LACP_STATE_IN_SYNC - self.actor_state_collecting = lacp.LACP_STATE_COLLECTING_ENABLED - self.actor_state_distributing = lacp.LACP_STATE_DISTRIBUTING_ENABLED - self.actor_state_defaulted = lacp.LACP_STATE_OPERATIONAL_PARTNER - self.actor_state_expired = lacp.LACP_STATE_EXPIRED - self.actor_state = ( - (self.actor_state_activity << 0) | - (self.actor_state_timeout << 1) | - (self.actor_state_aggregation << 2) | - (self.actor_state_synchronization << 3) | - (self.actor_state_collecting << 4) | - (self.actor_state_distributing << 5) | - (self.actor_state_defaulted << 6) | - (self.actor_state_expired << 7)) - self.partner_tag = lacp.LACP_TLV_TYPE_PARTNER - self.partner_length = 20 - self.partner_system_priority = 0 - self.partner_system = '00:00:00:00:00:00' - self.partner_key = 0 - self.partner_port_priority = 0 - self.partner_port = 0 - self.partner_state_activity = 0 - self.partner_state_timeout = lacp.LACP_STATE_SHORT_TIMEOUT - self.partner_state_aggregation = 0 - self.partner_state_synchronization = 0 - self.partner_state_collecting = 0 - self.partner_state_distributing = 0 - self.partner_state_defaulted = 0 - self.partner_state_expired = 0 - self.partner_state = ( - (self.partner_state_activity << 0) | - (self.partner_state_timeout << 1) | - (self.partner_state_aggregation << 2) | - (self.partner_state_synchronization << 3) | - (self.partner_state_collecting << 4) | - (self.partner_state_distributing << 5) | - (self.partner_state_defaulted << 6) | - (self.partner_state_expired << 7)) - self.collector_tag = lacp.LACP_TLV_TYPE_COLLECTOR - self.collector_length = 16 - self.collector_max_delay = 0 - self.terminator_tag = lacp.LACP_TLV_TYPE_TERMINATOR - self.terminator_length = 0 - - self.head_fmt = lacp._HLEN_PACK_STR - self.head_len = lacp._HLEN_PACK_LEN - self.act_fmt = lacp._ACTPRT_INFO_PACK_STR - self.act_len = lacp._ACTPRT_INFO_PACK_LEN - self.prt_fmt = lacp._ACTPRT_INFO_PACK_STR - self.prt_len = lacp._ACTPRT_INFO_PACK_LEN - self.col_fmt = lacp._COL_INFO_PACK_STR - self.col_len = lacp._COL_INFO_PACK_LEN - self.trm_fmt = lacp._TRM_PACK_STR - self.trm_len = lacp._TRM_PACK_LEN - self.length = lacp._ALL_PACK_LEN - - self.head_buf = pack(self.head_fmt, - self.subtype, - self.version) - self.act_buf = pack(self.act_fmt, - self.actor_tag, - self.actor_length, - self.actor_system_priority, - addrconv.mac.text_to_bin(self.actor_system), - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state) - self.prt_buf = pack(self.prt_fmt, - self.partner_tag, - self.partner_length, - self.partner_system_priority, - addrconv.mac.text_to_bin(self.partner_system), - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state) - self.col_buf = pack(self.col_fmt, - self.collector_tag, - self.collector_length, - self.collector_max_delay) - self.trm_buf = pack(self.trm_fmt, - self.terminator_tag, - self.terminator_length) - - self.buf = self.head_buf + self.act_buf + self.prt_buf + \ - self.col_buf + self.trm_buf - - self.l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - - def tearDown(self): - pass - - def find_protocol(self, pkt, name): - for p in pkt.protocols: - if p.protocol_name == name: - return p - - def test_init(self): - eq_(self.subtype, self.l._subtype) - eq_(self.version, self.l.version) - eq_(self.actor_tag, self.l._actor_tag) - eq_(self.actor_length, self.l._actor_length) - eq_(self.actor_system_priority, self.l.actor_system_priority) - eq_(self.actor_system, self.l.actor_system) - eq_(self.actor_key, self.l.actor_key) - eq_(self.actor_port_priority, self.l.actor_port_priority) - eq_(self.actor_port, self.l.actor_port) - eq_(self.actor_state_activity, self.l.actor_state_activity) - eq_(self.actor_state_timeout, self.l.actor_state_timeout) - eq_(self.actor_state_aggregation, - self.l.actor_state_aggregation) - eq_(self.actor_state_synchronization, - self.l.actor_state_synchronization) - eq_(self.actor_state_collecting, - self.l.actor_state_collecting) - eq_(self.actor_state_distributing, - self.l.actor_state_distributing) - eq_(self.actor_state_defaulted, self.l.actor_state_defaulted) - eq_(self.actor_state_expired, self.l.actor_state_expired) - eq_(self.actor_state, self.l._actor_state) - eq_(self.partner_tag, self.l._partner_tag) - eq_(self.partner_length, self.l._partner_length) - eq_(self.partner_system_priority, - self.l.partner_system_priority) - eq_(self.partner_system, self.l.partner_system) - eq_(self.partner_key, self.l.partner_key) - eq_(self.partner_port_priority, self.l.partner_port_priority) - eq_(self.partner_port, self.l.partner_port) - eq_(self.partner_state_activity, self.l.partner_state_activity) - eq_(self.partner_state_timeout, self.l.partner_state_timeout) - eq_(self.partner_state_aggregation, - self.l.partner_state_aggregation) - eq_(self.partner_state_synchronization, - self.l.partner_state_synchronization) - eq_(self.partner_state_collecting, - self.l.partner_state_collecting) - eq_(self.partner_state_distributing, - self.l.partner_state_distributing) - eq_(self.partner_state_defaulted, - self.l.partner_state_defaulted) - eq_(self.partner_state_expired, self.l.partner_state_expired) - eq_(self.partner_state, self.l._partner_state) - eq_(self.collector_tag, self.l._collector_tag) - eq_(self.collector_length, self.l._collector_length) - eq_(self.collector_max_delay, self.l.collector_max_delay) - eq_(self.terminator_tag, self.l._terminator_tag) - eq_(self.terminator_length, self.l._terminator_length) - - def test_parser(self): - _res = self.l.parser(self.buf) - if type(_res) is tuple: - res = _res[0] - else: - res = _res - - eq_(res._subtype, self.subtype) - eq_(res.version, self.version) - eq_(res._actor_tag, self.actor_tag) - eq_(res._actor_length, self.actor_length) - eq_(res.actor_system_priority, self.actor_system_priority) - eq_(res.actor_system, self.actor_system) - eq_(res.actor_key, self.actor_key) - eq_(res.actor_port_priority, self.actor_port_priority) - eq_(res.actor_port, self.actor_port) - eq_(res.actor_state_activity, self.actor_state_activity) - eq_(res.actor_state_timeout, self.actor_state_timeout) - eq_(res.actor_state_aggregation, self.actor_state_aggregation) - eq_(res.actor_state_synchronization, - self.actor_state_synchronization) - eq_(res.actor_state_collecting, self.actor_state_collecting) - eq_(res.actor_state_distributing, self.actor_state_distributing) - eq_(res.actor_state_defaulted, self.actor_state_defaulted) - eq_(res.actor_state_expired, self.actor_state_expired) - eq_(res._actor_state, self.actor_state) - eq_(res._partner_tag, self.partner_tag) - eq_(res._partner_length, self.partner_length) - eq_(res.partner_system_priority, self.partner_system_priority) - eq_(res.partner_system, self.partner_system) - eq_(res.partner_key, self.partner_key) - eq_(res.partner_port_priority, self.partner_port_priority) - eq_(res.partner_port, self.partner_port) - eq_(res.partner_state_activity, self.partner_state_activity) - eq_(res.partner_state_timeout, self.partner_state_timeout) - eq_(res.partner_state_aggregation, - self.partner_state_aggregation) - eq_(res.partner_state_synchronization, - self.partner_state_synchronization) - eq_(res.partner_state_collecting, self.partner_state_collecting) - eq_(res.partner_state_distributing, - self.partner_state_distributing) - eq_(res.partner_state_defaulted, self.partner_state_defaulted) - eq_(res.partner_state_expired, self.partner_state_expired) - eq_(res._partner_state, self.partner_state) - eq_(res._collector_tag, self.collector_tag) - eq_(res._collector_length, self.collector_length) - eq_(res.collector_max_delay, self.collector_max_delay) - eq_(res._terminator_tag, self.terminator_tag) - eq_(res._terminator_length, self.terminator_length) - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.l.serialize(data, prev) - - offset = 0 - head_res = unpack_from(self.head_fmt, buf, offset) - offset += self.head_len - act_res = unpack_from(self.act_fmt, buf, offset) - offset += self.act_len - prt_res = unpack_from(self.prt_fmt, buf, offset) - offset += self.prt_len - col_res = unpack_from(self.col_fmt, buf, offset) - offset += self.col_len - trm_res = unpack_from(self.trm_fmt, buf, offset) - - eq_(head_res[0], self.subtype) - eq_(head_res[1], self.version) - - eq_(act_res[0], self.actor_tag) - eq_(act_res[1], self.actor_length) - eq_(act_res[2], self.actor_system_priority) - eq_(act_res[3], addrconv.mac.text_to_bin(self.actor_system)) - eq_(act_res[4], self.actor_key) - eq_(act_res[5], self.actor_port_priority) - eq_(act_res[6], self.actor_port) - eq_(act_res[7], self.actor_state) - - eq_(prt_res[0], self.partner_tag) - eq_(prt_res[1], self.partner_length) - eq_(prt_res[2], self.partner_system_priority) - eq_(prt_res[3], addrconv.mac.text_to_bin(self.partner_system)) - eq_(prt_res[4], self.partner_key) - eq_(prt_res[5], self.partner_port_priority) - eq_(prt_res[6], self.partner_port) - eq_(prt_res[7], self.partner_state) - - eq_(col_res[0], self.collector_tag) - eq_(col_res[1], self.collector_length) - eq_(col_res[2], self.collector_max_delay) - - eq_(trm_res[0], self.terminator_tag) - eq_(trm_res[1], self.terminator_length) - - def _build_lacp(self): - ethertype = ether.ETH_TYPE_SLOW - dst = SLOW_PROTOCOL_MULTICAST - e = ethernet(dst, self.actor_system, ethertype) - p = Packet() - - p.add_protocol(e) - p.add_protocol(self.l) - p.serialize() - return p - - def test_build_lacp(self): - p = self._build_lacp() - - e = self.find_protocol(p, "ethernet") - ok_(e) - eq_(e.ethertype, ether.ETH_TYPE_SLOW) - - l = self.find_protocol(p, "lacp") - ok_(l) - - eq_(l._subtype, self.subtype) - eq_(l.version, self.version) - eq_(l._actor_tag, self.actor_tag) - eq_(l._actor_length, self.actor_length) - eq_(l.actor_system_priority, self.actor_system_priority) - eq_(l.actor_system, self.actor_system) - eq_(l.actor_key, self.actor_key) - eq_(l.actor_port_priority, self.actor_port_priority) - eq_(l.actor_port, self.actor_port) - eq_(l.actor_state_activity, self.actor_state_activity) - eq_(l.actor_state_timeout, self.actor_state_timeout) - eq_(l.actor_state_aggregation, self.actor_state_aggregation) - eq_(l.actor_state_synchronization, - self.actor_state_synchronization) - eq_(l.actor_state_collecting, self.actor_state_collecting) - eq_(l.actor_state_distributing, self.actor_state_distributing) - eq_(l.actor_state_defaulted, self.actor_state_defaulted) - eq_(l.actor_state_expired, self.actor_state_expired) - eq_(l._actor_state, self.actor_state) - eq_(l._partner_tag, self.partner_tag) - eq_(l._partner_length, self.partner_length) - eq_(l.partner_system_priority, self.partner_system_priority) - eq_(l.partner_system, self.partner_system) - eq_(l.partner_key, self.partner_key) - eq_(l.partner_port_priority, self.partner_port_priority) - eq_(l.partner_port, self.partner_port) - eq_(l.partner_state_activity, self.partner_state_activity) - eq_(l.partner_state_timeout, self.partner_state_timeout) - eq_(l.partner_state_aggregation, self.partner_state_aggregation) - eq_(l.partner_state_synchronization, - self.partner_state_synchronization) - eq_(l.partner_state_collecting, self.partner_state_collecting) - eq_(l.partner_state_distributing, - self.partner_state_distributing) - eq_(l.partner_state_defaulted, self.partner_state_defaulted) - eq_(l.partner_state_expired, self.partner_state_expired) - eq_(l._partner_state, self.partner_state) - eq_(l._collector_tag, self.collector_tag) - eq_(l._collector_length, self.collector_length) - eq_(l.collector_max_delay, self.collector_max_delay) - eq_(l._terminator_tag, self.terminator_tag) - eq_(l._terminator_length, self.terminator_length) - - @raises(Exception) - def test_malformed_lacp(self): - m_short_buf = self.buf[1:self.length] - slow.parser(m_short_buf) - - @raises(Exception) - def test_invalid_subtype(self): - invalid_lacv = copy.deepcopy(self.l) - invalid_lacv.subtype = 0xff - invalid_buf = invalid_lacv.serialize() - slow.parser(invalid_buf) - - @raises(Exception) - def test_invalid_version(self): - invalid_lacv = copy.deepcopy(self.l) - invalid_lacv.version = 0xff - invalid_buf = invalid_lacv.serialize() - slow.parser(invalid_buf) - - @raises(Exception) - def test_invalid_actor_tag(self): - invalid_lacv = copy.deepcopy(self.l) - invalid_lacv.actor_tag = 0x04 - invalid_buf = invalid_lacv.serialize() - slow.parser(invalid_buf) - - @raises(Exception) - def test_invalid_actor_length(self): - invalid_lacv = copy.deepcopy(self.l) - invalid_lacv.actor_length = 50 - invalid_buf = invalid_lacv.serialize() - slow.parser(invalid_buf) - - @raises(Exception) - def test_invalid_partner_tag(self): - invalid_lacv = copy.deepcopy(self.l) - invalid_lacv.partner_tag = 0x01 - invalid_buf = invalid_lacv.serialize() - slow.parser(invalid_buf) - - @raises(Exception) - def test_invalid_partner_length(self): - invalid_lacv = copy.deepcopy(self.l) - invalid_lacv.partner_length = 0 - invalid_buf = invalid_lacv.serialize() - slow.parser(invalid_buf) - - @raises(Exception) - def test_invalid_collector_tag(self): - invalid_lacv = copy.deepcopy(self.l) - invalid_lacv.collector_tag = 0x00 - invalid_buf = invalid_lacv.serialize() - slow.parser(invalid_buf) - - @raises(Exception) - def test_invalid_collector_length(self): - invalid_lacv = copy.deepcopy(self.l) - invalid_lacv.collector_length = 20 - invalid_buf = invalid_lacv.serialize() - slow.parser(invalid_buf) - - @raises(Exception) - def test_invalid_terminator_tag(self): - invalid_lacv = copy.deepcopy(self.l) - invalid_lacv.terminator_tag = 0x04 - invalid_buf = invalid_lacv.serialize() - slow.parser(invalid_buf) - - @raises(Exception) - def test_invalid_terminator_length(self): - invalid_lacv = copy.deepcopy(self.l) - invalid_lacv.terminator_length = self.trm_len - invalid_buf = invalid_lacv.serialize() - slow.parser(invalid_buf) - - @raises(Exception) - def test_invalid_actor_state_activity(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - 2, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_actor_state_timeout(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - 2, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_actor_state_aggregation(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - 2, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_actor_state_synchronization(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - 2, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_actor_state_collecting(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - 2, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_actor_state_distributing(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - 2, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_actor_state_defaulted(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - 2, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_actor_state_expired(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - 2, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_partner_state_activity(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - -1, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_partner_state_timeout(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - -1, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_partner_state_aggregation(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - -1, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_partner_state_synchronization(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - -1, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_partner_state_collecting(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - -1, - self.partner_state_distributing, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_partner_state_distributing(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - -1, - self.partner_state_defaulted, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_partner_state_defaulted(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - -1, - self.partner_state_expired, - self.collector_max_delay) - l.serialize() - - @raises(Exception) - def test_invalid_partner_state_expired(self): - l = lacp(self.version, - self.actor_system_priority, - self.actor_system, - self.actor_key, - self.actor_port_priority, - self.actor_port, - self.actor_state_activity, - self.actor_state_timeout, - self.actor_state_aggregation, - self.actor_state_synchronization, - self.actor_state_collecting, - self.actor_state_distributing, - self.actor_state_defaulted, - self.actor_state_expired, - self.partner_system_priority, - self.partner_system, - self.partner_key, - self.partner_port_priority, - self.partner_port, - self.partner_state_activity, - self.partner_state_timeout, - self.partner_state_aggregation, - self.partner_state_synchronization, - self.partner_state_collecting, - self.partner_state_distributing, - self.partner_state_defaulted, - -1, - self.collector_max_delay) - l.serialize() - - def test_json(self): - jsondict = self.l.to_jsondict() - l = lacp.from_jsondict(jsondict['lacp']) - eq_(str(self.l), str(l)) diff --git a/ryu/tests/unit/packet/test_tcp.py b/ryu/tests/unit/packet/test_tcp.py deleted file mode 100644 index 7224df0e..00000000 --- a/ryu/tests/unit/packet/test_tcp.py +++ /dev/null @@ -1,267 +0,0 @@ -# Copyright (C) 2012-2015 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import six -import struct -from struct import * -from nose.tools import * -from ryu.ofproto import inet -from ryu.lib.packet import tcp -from ryu.lib.packet.ipv4 import ipv4 -from ryu.lib.packet import packet_utils -from ryu.lib import addrconv - - -LOG = logging.getLogger('test_tcp') - - -class Test_tcp(unittest.TestCase): - """ Test case for tcp - """ - src_port = 6431 - dst_port = 8080 - seq = 5 - ack = 1 - offset = 6 - bits = 0b101010 - window_size = 2048 - csum = 12345 - urgent = 128 - option = b'\x01\x02\x03\x04' - - t = tcp.tcp(src_port, dst_port, seq, ack, offset, bits, - window_size, csum, urgent, option) - - buf = pack(tcp.tcp._PACK_STR, src_port, dst_port, seq, ack, - offset << 4, bits, window_size, csum, urgent) - buf += option - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.src_port, self.t.src_port) - eq_(self.dst_port, self.t.dst_port) - eq_(self.seq, self.t.seq) - eq_(self.ack, self.t.ack) - eq_(self.offset, self.t.offset) - eq_(self.bits, self.t.bits) - eq_(self.window_size, self.t.window_size) - eq_(self.csum, self.t.csum) - eq_(self.urgent, self.t.urgent) - eq_(self.option, self.t.option) - - def test_parser(self): - r1, r2, _ = self.t.parser(self.buf) - - eq_(self.src_port, r1.src_port) - eq_(self.dst_port, r1.dst_port) - eq_(self.seq, r1.seq) - eq_(self.ack, r1.ack) - eq_(self.offset, r1.offset) - eq_(self.bits, r1.bits) - eq_(self.window_size, r1.window_size) - eq_(self.csum, r1.csum) - eq_(self.urgent, r1.urgent) - eq_(self.option, r1.option) - eq_(None, r2) - - def test_serialize(self): - offset = 5 - csum = 0 - - src_ip = '192.168.10.1' - dst_ip = '192.168.100.1' - prev = ipv4(4, 5, 0, 0, 0, 0, 0, 64, - inet.IPPROTO_TCP, 0, src_ip, dst_ip) - - t = tcp.tcp(self.src_port, self.dst_port, self.seq, self.ack, - offset, self.bits, self.window_size, csum, self.urgent) - buf = t.serialize(bytearray(), prev) - res = struct.unpack(tcp.tcp._PACK_STR, six.binary_type(buf)) - - eq_(res[0], self.src_port) - eq_(res[1], self.dst_port) - eq_(res[2], self.seq) - eq_(res[3], self.ack) - eq_(res[4], offset << 4) - eq_(res[5], self.bits) - eq_(res[6], self.window_size) - eq_(res[8], self.urgent) - - # test __len__ - # offset indicates the number of 32 bit (= 4 bytes) - # words in the TCP Header. - # So, we compare len(tcp) with offset * 4, here. - eq_(offset * 4, len(t)) - - # checksum - ph = struct.pack('!4s4sBBH', - addrconv.ipv4.text_to_bin(src_ip), - addrconv.ipv4.text_to_bin(dst_ip), 0, 6, offset * 4) - d = ph + buf - s = packet_utils.checksum(d) - eq_(0, s) - - def test_serialize_option(self): - # prepare test data - offset = 0 - csum = 0 - option = [ - tcp.TCPOptionMaximumSegmentSize(max_seg_size=1460), - tcp.TCPOptionSACKPermitted(), - tcp.TCPOptionTimestamps(ts_val=287454020, ts_ecr=1432778632), - tcp.TCPOptionNoOperation(), - tcp.TCPOptionWindowScale(shift_cnt=9), - ] - option_buf = ( - b'\x02\x04\x05\xb4' - b'\x04\x02' - b'\x08\x0a\x11\x22\x33\x44\x55\x66\x77\x88' - b'\x01' - b'\x03\x03\x09' - ) - prev = ipv4(4, 5, 0, 0, 0, 0, 0, 64, - inet.IPPROTO_TCP, 0, '192.168.10.1', '192.168.100.1') - - # test serializer - t = tcp.tcp(self.src_port, self.dst_port, self.seq, self.ack, - offset, self.bits, self.window_size, csum, self.urgent, - option) - buf = t.serialize(bytearray(), prev) - r_option_buf = buf[tcp.tcp._MIN_LEN:tcp.tcp._MIN_LEN + len(option_buf)] - eq_(option_buf, r_option_buf) - - # test parser - (r_tcp, _, _) = tcp.tcp.parser(buf) - eq_(str(option), str(r_tcp.option)) - - @raises(Exception) - def test_malformed_tcp(self): - m_short_buf = self.buf[1:tcp.tcp._MIN_LEN] - tcp.tcp.parser(m_short_buf) - - def test_default_args(self): - prev = ipv4(proto=inet.IPPROTO_TCP) - t = tcp.tcp() - buf = t.serialize(bytearray(), prev) - res = struct.unpack(tcp.tcp._PACK_STR, buf) - - eq_(res[0], 1) - eq_(res[1], 1) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 5 << 4) - eq_(res[5], 0) - eq_(res[6], 0) - eq_(res[8], 0) - - # with option, without offset - t = tcp.tcp(option=[tcp.TCPOptionMaximumSegmentSize(1460)]) - buf = t.serialize(bytearray(), prev) - res = struct.unpack(tcp.tcp._PACK_STR + '4s', buf) - - eq_(res[0], 1) - eq_(res[1], 1) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 6 << 4) - eq_(res[5], 0) - eq_(res[6], 0) - eq_(res[8], 0) - eq_(res[9], b'\x02\x04\x05\xb4') - - # with option, with long offset - t = tcp.tcp(offset=7, option=[tcp.TCPOptionWindowScale(shift_cnt=9)]) - buf = t.serialize(bytearray(), prev) - res = struct.unpack(tcp.tcp._PACK_STR + '8s', buf) - - eq_(res[0], 1) - eq_(res[1], 1) - eq_(res[2], 0) - eq_(res[3], 0) - eq_(res[4], 7 << 4) - eq_(res[5], 0) - eq_(res[6], 0) - eq_(res[8], 0) - eq_(res[9], b'\x03\x03\x09\x00\x00\x00\x00\x00') - - def test_json(self): - jsondict = self.t.to_jsondict() - t = tcp.tcp.from_jsondict(jsondict['tcp']) - eq_(str(self.t), str(t)) - - -class Test_TCPOption(unittest.TestCase): - # prepare test data - input_options = [ - tcp.TCPOptionEndOfOptionList(), - tcp.TCPOptionNoOperation(), - tcp.TCPOptionMaximumSegmentSize(max_seg_size=1460), - tcp.TCPOptionWindowScale(shift_cnt=9), - tcp.TCPOptionSACKPermitted(), - tcp.TCPOptionSACK(blocks=[(1, 2), (3, 4)], length=18), - tcp.TCPOptionTimestamps(ts_val=287454020, ts_ecr=1432778632), - tcp.TCPOptionUserTimeout(granularity=1, user_timeout=564), - tcp.TCPOptionAuthentication( - key_id=1, r_next_key_id=2, - mac=b'abcdefghijkl', length=16), - tcp.TCPOptionUnknown(value=b'foobar', kind=255, length=8), - tcp.TCPOptionUnknown(value=b'', kind=255, length=2), - ] - input_buf = ( - b'\x00' # End of Option List - b'\x01' # No-Operation - b'\x02\x04\x05\xb4' # Maximum Segment Size - b'\x03\x03\x09' # Window Scale - b'\x04\x02' # SACK Permitted - b'\x05\x12' # SACK - b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04' - b'\x08\x0a' # Timestamps - b'\x11\x22\x33\x44\x55\x66\x77\x88' - b'\x1c\x04\x82\x34' # User Timeout Option - b'\x1d\x10\x01\x02' # TCP Authentication Option (TCP-AO) - b'abcdefghijkl' - b'\xff\x08' # Unknown with body - b'foobar' - b'\xff\x02' # Unknown - ) - - def test_serialize(self): - output_buf = bytearray() - for option in self.input_options: - output_buf += option.serialize() - eq_(self.input_buf, output_buf) - - def test_parser(self): - buf = self.input_buf - output_options = [] - while buf: - opt, buf = tcp.TCPOption.parser(buf) - output_options.append(opt) - eq_(str(self.input_options), str(output_options)) - - def test_json(self): - for option in self.input_options: - json_dict = option.to_jsondict()[option.__class__.__name__] - output_option = option.__class__.from_jsondict(json_dict) - eq_(str(option), str(output_option)) diff --git a/ryu/tests/unit/packet/test_udp.py b/ryu/tests/unit/packet/test_udp.py deleted file mode 100644 index 0d7d0aa9..00000000 --- a/ryu/tests/unit/packet/test_udp.py +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import struct -from struct import * -from nose.tools import * -from ryu.ofproto import ether, inet -from ryu.lib.packet.packet import Packet -from ryu.lib.packet.udp import udp -from ryu.lib.packet.ipv4 import ipv4 -from ryu.lib.packet import packet_utils -from ryu.lib import addrconv - - -LOG = logging.getLogger('test_udp') - - -class Test_udp(unittest.TestCase): - """ Test case for udp - """ - src_port = 6431 - dst_port = 8080 - total_length = 65507 - csum = 12345 - u = udp(src_port, dst_port, total_length, csum) - buf = pack(udp._PACK_STR, src_port, dst_port, total_length, csum) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.src_port, self.u.src_port) - eq_(self.dst_port, self.u.dst_port) - eq_(self.total_length, self.u.total_length) - eq_(self.csum, self.u.csum) - - def test_parser(self): - r1, r2, _ = self.u.parser(self.buf) - - eq_(self.src_port, r1.src_port) - eq_(self.dst_port, r1.dst_port) - eq_(self.total_length, r1.total_length) - eq_(self.csum, r1.csum) - eq_(None, r2) - - def test_serialize(self): - src_port = 6431 - dst_port = 8080 - total_length = 0 - csum = 0 - - src_ip = '192.168.10.1' - dst_ip = '192.168.100.1' - prev = ipv4(4, 5, 0, 0, 0, 0, 0, 64, - inet.IPPROTO_UDP, 0, src_ip, dst_ip) - - u = udp(src_port, dst_port, total_length, csum) - buf = u.serialize(bytearray(), prev) - res = struct.unpack(udp._PACK_STR, buf) - - eq_(res[0], src_port) - eq_(res[1], dst_port) - eq_(res[2], struct.calcsize(udp._PACK_STR)) - - # checksum - ph = struct.pack('!4s4sBBH', - addrconv.ipv4.text_to_bin(src_ip), - addrconv.ipv4.text_to_bin(dst_ip), 0, 17, res[2]) - d = ph + buf + bytearray() - s = packet_utils.checksum(d) - eq_(0, s) - - @raises(Exception) - def test_malformed_udp(self): - m_short_buf = self.buf[1:udp._MIN_LEN] - udp.parser(m_short_buf) - - def test_default_args(self): - prev = ipv4(proto=inet.IPPROTO_UDP) - u = udp() - buf = u.serialize(bytearray(), prev) - res = struct.unpack(udp._PACK_STR, buf) - - eq_(res[0], 1) - eq_(res[1], 1) - eq_(res[2], udp._MIN_LEN) - - def test_json(self): - jsondict = self.u.to_jsondict() - u = udp.from_jsondict(jsondict['udp']) - eq_(str(self.u), str(u)) diff --git a/ryu/tests/unit/packet/test_vlan.py b/ryu/tests/unit/packet/test_vlan.py deleted file mode 100644 index b8e3a048..00000000 --- a/ryu/tests/unit/packet/test_vlan.py +++ /dev/null @@ -1,265 +0,0 @@ -# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -import logging -import struct -from struct import * -from nose.tools import * -from ryu.ofproto import ether, inet -from ryu.lib.packet.ethernet import ethernet -from ryu.lib.packet.packet import Packet -from ryu.lib.packet.ipv4 import ipv4 -from ryu.lib.packet.vlan import vlan -from ryu.lib.packet.vlan import svlan - - -LOG = logging.getLogger('test_vlan') - - -class Test_vlan(unittest.TestCase): - """ Test case for vlan - """ - - pcp = 0 - cfi = 0 - vid = 32 - tci = pcp << 15 | cfi << 12 | vid - ethertype = ether.ETH_TYPE_IP - - buf = pack(vlan._PACK_STR, tci, ethertype) - - v = vlan(pcp, cfi, vid, ethertype) - - def setUp(self): - pass - - def tearDown(self): - pass - - def find_protocol(self, pkt, name): - for p in pkt.protocols: - if p.protocol_name == name: - return p - - def test_init(self): - eq_(self.pcp, self.v.pcp) - eq_(self.cfi, self.v.cfi) - eq_(self.vid, self.v.vid) - eq_(self.ethertype, self.v.ethertype) - - def test_parser(self): - res, ptype, _ = self.v.parser(self.buf) - - eq_(res.pcp, self.pcp) - eq_(res.cfi, self.cfi) - eq_(res.vid, self.vid) - eq_(res.ethertype, self.ethertype) - eq_(ptype, ipv4) - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.v.serialize(data, prev) - - fmt = vlan._PACK_STR - res = struct.unpack(fmt, buf) - - eq_(res[0], self.tci) - eq_(res[1], self.ethertype) - - def _build_vlan(self): - src_mac = '00:07:0d:af:f4:54' - dst_mac = '00:00:00:00:00:00' - ethertype = ether.ETH_TYPE_8021Q - e = ethernet(dst_mac, src_mac, ethertype) - - version = 4 - header_length = 20 - tos = 0 - total_length = 24 - identification = 0x8a5d - flags = 0 - offset = 1480 - ttl = 64 - proto = inet.IPPROTO_ICMP - csum = 0xa7f2 - src = '131.151.32.21' - dst = '131.151.32.129' - option = b'TEST' - ip = ipv4(version, header_length, tos, total_length, identification, - flags, offset, ttl, proto, csum, src, dst, option) - - p = Packet() - - p.add_protocol(e) - p.add_protocol(self.v) - p.add_protocol(ip) - p.serialize() - - return p - - def test_build_vlan(self): - p = self._build_vlan() - - e = self.find_protocol(p, "ethernet") - ok_(e) - eq_(e.ethertype, ether.ETH_TYPE_8021Q) - - v = self.find_protocol(p, "vlan") - ok_(v) - eq_(v.ethertype, ether.ETH_TYPE_IP) - - ip = self.find_protocol(p, "ipv4") - ok_(ip) - - eq_(v.pcp, self.pcp) - eq_(v.cfi, self.cfi) - eq_(v.vid, self.vid) - eq_(v.ethertype, self.ethertype) - - @raises(Exception) - def test_malformed_vlan(self): - m_short_buf = self.buf[1:vlan._MIN_LEN] - vlan.parser(m_short_buf) - - def test_json(self): - jsondict = self.v.to_jsondict() - v = vlan.from_jsondict(jsondict['vlan']) - eq_(str(self.v), str(v)) - - -class Test_svlan(unittest.TestCase): - - pcp = 0 - cfi = 0 - vid = 32 - tci = pcp << 15 | cfi << 12 | vid - ethertype = ether.ETH_TYPE_8021Q - - buf = pack(svlan._PACK_STR, tci, ethertype) - - sv = svlan(pcp, cfi, vid, ethertype) - - def setUp(self): - pass - - def tearDown(self): - pass - - def find_protocol(self, pkt, name): - for p in pkt.protocols: - if p.protocol_name == name: - return p - - def test_init(self): - eq_(self.pcp, self.sv.pcp) - eq_(self.cfi, self.sv.cfi) - eq_(self.vid, self.sv.vid) - eq_(self.ethertype, self.sv.ethertype) - - def test_parser(self): - res, ptype, _ = self.sv.parser(self.buf) - - eq_(res.pcp, self.pcp) - eq_(res.cfi, self.cfi) - eq_(res.vid, self.vid) - eq_(res.ethertype, self.ethertype) - eq_(ptype, vlan) - - def test_serialize(self): - data = bytearray() - prev = None - buf = self.sv.serialize(data, prev) - - fmt = svlan._PACK_STR - res = struct.unpack(fmt, buf) - - eq_(res[0], self.tci) - eq_(res[1], self.ethertype) - - def _build_svlan(self): - src_mac = '00:07:0d:af:f4:54' - dst_mac = '00:00:00:00:00:00' - ethertype = ether.ETH_TYPE_8021AD - e = ethernet(dst_mac, src_mac, ethertype) - - pcp = 0 - cfi = 0 - vid = 32 - tci = pcp << 15 | cfi << 12 | vid - ethertype = ether.ETH_TYPE_IP - v = vlan(pcp, cfi, vid, ethertype) - - version = 4 - header_length = 20 - tos = 0 - total_length = 24 - identification = 0x8a5d - flags = 0 - offset = 1480 - ttl = 64 - proto = inet.IPPROTO_ICMP - csum = 0xa7f2 - src = '131.151.32.21' - dst = '131.151.32.129' - option = b'TEST' - ip = ipv4(version, header_length, tos, total_length, identification, - flags, offset, ttl, proto, csum, src, dst, option) - - p = Packet() - - p.add_protocol(e) - p.add_protocol(self.sv) - p.add_protocol(v) - p.add_protocol(ip) - p.serialize() - - return p - - def test_build_svlan(self): - p = self._build_svlan() - - e = self.find_protocol(p, "ethernet") - ok_(e) - eq_(e.ethertype, ether.ETH_TYPE_8021AD) - - sv = self.find_protocol(p, "svlan") - ok_(sv) - eq_(sv.ethertype, ether.ETH_TYPE_8021Q) - - v = self.find_protocol(p, "vlan") - ok_(v) - eq_(v.ethertype, ether.ETH_TYPE_IP) - - ip = self.find_protocol(p, "ipv4") - ok_(ip) - - eq_(sv.pcp, self.pcp) - eq_(sv.cfi, self.cfi) - eq_(sv.vid, self.vid) - eq_(sv.ethertype, self.ethertype) - - @raises(Exception) - def test_malformed_svlan(self): - m_short_buf = self.buf[1:svlan._MIN_LEN] - svlan.parser(m_short_buf) - - def test_json(self): - jsondict = self.sv.to_jsondict() - sv = svlan.from_jsondict(jsondict['svlan']) - eq_(str(self.sv), str(sv)) diff --git a/ryu/tests/unit/packet/test_vrrp.py b/ryu/tests/unit/packet/test_vrrp.py deleted file mode 100644 index 71c52500..00000000 --- a/ryu/tests/unit/packet/test_vrrp.py +++ /dev/null @@ -1,496 +0,0 @@ -# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. -# Copyright (C) 2013 Isaku Yamahata -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -from __future__ import print_function - -import unittest -import logging -import six -import struct -import inspect - -from nose.tools import eq_, ok_ -from nose.tools import raises - -from ryu.ofproto import inet -from ryu.lib.packet import ipv4 -from ryu.lib.packet import ipv6 -from ryu.lib.packet import packet -from ryu.lib.packet import packet_utils -from ryu.lib.packet import vrrp -from ryu.lib import addrconv - - -LOG = logging.getLogger(__name__) - - -class Test_vrrpv2(unittest.TestCase): - """ Test case for vrrp v2 - """ - version = vrrp.VRRP_VERSION_V2 - type_ = vrrp.VRRP_TYPE_ADVERTISEMENT - vrid = 128 - priority = 100 - count_ip = 1 - auth_type = vrrp.VRRP_AUTH_NO_AUTH - max_adver_int = 100 - checksum = 0 - ip_address = '192.168.0.1' - auth_data = (0, 0) - vrrpv2 = vrrp.vrrpv2.create(type_, vrid, priority, max_adver_int, - [ip_address]) - buf = struct.pack(vrrp.vrrpv2._PACK_STR + '4sII', - vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V2, type_), - vrid, priority, count_ip, - auth_type, max_adver_int, checksum, - addrconv.ipv4.text_to_bin(ip_address), - auth_data[0], auth_data[1]) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.type_, self.vrrpv2.type) - eq_(self.vrid, self.vrrpv2.vrid) - eq_(self.priority, self.vrrpv2.priority) - eq_(self.count_ip, self.vrrpv2.count_ip) - eq_(self.auth_type, self.vrrpv2.auth_type) - eq_(1, len(self.vrrpv2.ip_addresses)) - eq_(self.ip_address, self.vrrpv2.ip_addresses[0]) - eq_(self.auth_data, self.vrrpv2.auth_data) - - def test_parser(self): - vrrpv2, _cls, _ = self.vrrpv2.parser(self.buf) - - eq_(self.version, vrrpv2.version) - eq_(self.type_, vrrpv2.type) - eq_(self.vrid, vrrpv2.vrid) - eq_(self.priority, vrrpv2.priority) - eq_(self.count_ip, vrrpv2.count_ip) - eq_(self.auth_type, vrrpv2.auth_type) - eq_(self.max_adver_int, vrrpv2.max_adver_int) - eq_(self.checksum, vrrpv2.checksum) - eq_(1, len(vrrpv2.ip_addresses)) - eq_(str, type(vrrpv2.ip_addresses[0])) - eq_(self.ip_address, vrrpv2.ip_addresses[0]) - eq_(self.auth_data, vrrpv2.auth_data) - - def test_serialize(self): - src_ip = '192.168.0.1' - dst_ip = vrrp.VRRP_IPV4_DST_ADDRESS - prev = ipv4.ipv4(4, 5, 0, 0, 0, 0, 0, vrrp.VRRP_IPV4_TTL, - inet.IPPROTO_VRRP, 0, src_ip, dst_ip) - - type_ = vrrp.VRRP_TYPE_ADVERTISEMENT - vrid = 5 - priority = 10 - max_adver_int = 30 - ip_address = '192.168.0.2' - ip_addresses = [ip_address] - - vrrp_ = vrrp.vrrpv2.create( - type_, vrid, priority, max_adver_int, ip_addresses) - - buf = vrrp_.serialize(bytearray(), prev) - pack_str = vrrp.vrrpv2._PACK_STR + '4sII' - pack_len = struct.calcsize(pack_str) - res = struct.unpack(pack_str, six.binary_type(buf)) - eq_(res[0], vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V2, type_)) - eq_(res[1], vrid) - eq_(res[2], priority) - eq_(res[3], len(ip_addresses)) - eq_(res[4], vrrp.VRRP_AUTH_NO_AUTH) - eq_(res[5], max_adver_int) - # res[6] is checksum - eq_(res[7], addrconv.ipv4.text_to_bin(ip_address)) - eq_(res[8], 0) - eq_(res[9], 0) - eq_(len(buf), pack_len) - - # checksum - s = packet_utils.checksum(buf) - eq_(0, s) - - @raises(Exception) - def test_malformed_vrrpv2(self): - m_short_buf = self.buf[1:vrrp.vrrpv2._MIN_LEN] - vrrp.vrrp.parser(m_short_buf) - - def test_create_packet(self): - primary_ip = '192.168.0.2' - p0 = self.vrrpv2.create_packet(primary_ip) - p0.serialize() - p1 = packet.Packet(six.binary_type(p0.data)) - p1.serialize() - eq_(p0.data, p1.data) - - def _test_is_valid(self, type_=None, vrid=None, priority=None, - max_adver_int=None): - if type_ is None: - type_ = self.type_ - if vrid is None: - vrid = self.vrid - if priority is None: - priority = self.priority - if max_adver_int is None: - max_adver_int = self.max_adver_int - - vrrp_ = vrrp.vrrpv2.create(type_, vrid, priority, max_adver_int, - [self.ip_address]) - return vrrp_.is_valid() - - def test_is_valid_ok(self): - ok_(self._test_is_valid()) - - def test_is_valid_ng_type(self): - ok_(not self._test_is_valid(type_=15)) - - def test_is_valid_ng_vrid_min(self): - vrid = vrrp.VRRP_VRID_MIN - 1 - ok_(not self._test_is_valid(vrid=vrid)) - - def test_is_valid_ng_vrid_max(self): - vrid = vrrp.VRRP_VRID_MAX + 1 - ok_(not self._test_is_valid(vrid=vrid)) - - def test_is_valid_ng_priority_min(self): - priority = vrrp.VRRP_PRIORITY_MIN - 1 - ok_(not self._test_is_valid(priority=priority)) - - def test_is_valid_ng_priority_max(self): - priority = vrrp.VRRP_PRIORITY_MAX + 1 - ok_(not self._test_is_valid(priority=priority)) - - def test_is_valid_ng_adver_min(self): - max_adver_int = vrrp.VRRP_V2_MAX_ADVER_INT_MIN - 1 - ok_(not self._test_is_valid(max_adver_int=max_adver_int)) - - def test_is_valid_ng_adver_max(self): - max_adver_int = vrrp.VRRP_V2_MAX_ADVER_INT_MAX + 1 - ok_(not self._test_is_valid(max_adver_int=max_adver_int)) - - def test_to_string(self): - vrrpv2_values = {'version': self.version, - 'type': self.type_, - 'vrid': self.vrid, - 'priority': self.priority, - 'count_ip': self.count_ip, - 'max_adver_int': self.max_adver_int, - 'checksum': self.vrrpv2.checksum, - 'ip_addresses': [self.ip_address], - 'auth_type': self.auth_type, - 'auth_data': self.auth_data, - 'identification': self.vrrpv2.identification} - _vrrpv2_str = ','.join(['%s=%s' % (k, repr(vrrpv2_values[k])) - for k, v in inspect.getmembers(self.vrrpv2) - if k in vrrpv2_values]) - vrrpv2_str = '%s(%s)' % (vrrp.vrrpv2.__name__, _vrrpv2_str) - - eq_(str(self.vrrpv2), vrrpv2_str) - eq_(repr(self.vrrpv2), vrrpv2_str) - - -class Test_vrrpv3_ipv4(unittest.TestCase): - """ Test case for vrrp v3 IPv4 - """ - version = vrrp.VRRP_VERSION_V3 - type_ = vrrp.VRRP_TYPE_ADVERTISEMENT - vrid = 128 - priority = 99 - count_ip = 1 - max_adver_int = 111 - checksum = 0 - ip_address = '192.168.0.1' - vrrpv3 = vrrp.vrrpv3.create(type_, vrid, priority, max_adver_int, - [ip_address]) - buf = struct.pack(vrrp.vrrpv3._PACK_STR + '4s', - vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V3, type_), - vrid, priority, count_ip, - max_adver_int, checksum, - addrconv.ipv4.text_to_bin(ip_address)) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.type_, self.vrrpv3.type) - eq_(self.vrid, self.vrrpv3.vrid) - eq_(self.priority, self.vrrpv3.priority) - eq_(self.count_ip, self.vrrpv3.count_ip) - eq_(1, len(self.vrrpv3.ip_addresses)) - eq_(self.ip_address, self.vrrpv3.ip_addresses[0]) - - def test_parser(self): - vrrpv3, _cls, _ = self.vrrpv3.parser(self.buf) - - eq_(self.version, vrrpv3.version) - eq_(self.type_, vrrpv3.type) - eq_(self.vrid, vrrpv3.vrid) - eq_(self.priority, vrrpv3.priority) - eq_(self.count_ip, vrrpv3.count_ip) - eq_(self.max_adver_int, vrrpv3.max_adver_int) - eq_(self.checksum, vrrpv3.checksum) - eq_(1, len(vrrpv3.ip_addresses)) - eq_(str, type(vrrpv3.ip_addresses[0])) - eq_(self.ip_address, vrrpv3.ip_addresses[0]) - - def test_serialize(self): - src_ip = '192.168.0.1' - dst_ip = vrrp.VRRP_IPV4_DST_ADDRESS - prev = ipv4.ipv4(4, 5, 0, 0, 0, 0, 0, vrrp.VRRP_IPV4_TTL, - inet.IPPROTO_VRRP, 0, src_ip, dst_ip) - - type_ = vrrp.VRRP_TYPE_ADVERTISEMENT - vrid = 5 - priority = 10 - max_adver_int = 30 - ip_address = '192.168.0.2' - ip_addresses = [ip_address] - - vrrp_ = vrrp.vrrpv3.create( - type_, vrid, priority, max_adver_int, ip_addresses) - - buf = vrrp_.serialize(bytearray(), prev) - print(len(buf), type(buf), buf) - pack_str = vrrp.vrrpv3._PACK_STR + '4s' - pack_len = struct.calcsize(pack_str) - res = struct.unpack(pack_str, six.binary_type(buf)) - eq_(res[0], vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V3, type_)) - eq_(res[1], vrid) - eq_(res[2], priority) - eq_(res[3], len(ip_addresses)) - eq_(res[4], max_adver_int) - # res[5] is checksum - eq_(res[6], addrconv.ipv4.text_to_bin(ip_address)) - eq_(len(buf), pack_len) - print(res) - - # checksum - ph = struct.pack('!4s4sxBH', - addrconv.ipv4.text_to_bin(src_ip), - addrconv.ipv4.text_to_bin(dst_ip), - inet.IPPROTO_VRRP, pack_len) - s = packet_utils.checksum(ph + buf) - eq_(0, s) - - @raises(Exception) - def test_malformed_vrrpv3(self): - m_short_buf = self.buf[1:vrrp.vrrpv3._MIN_LEN] - vrrp.vrrp.parser(m_short_buf) - - def test_create_packet(self): - primary_ip = '192.168.0.2' - p0 = self.vrrpv3.create_packet(primary_ip) - p0.serialize() - p1 = packet.Packet(six.binary_type(p0.data)) - p1.serialize() - eq_(p0.data, p1.data) - - def _test_is_valid(self, type_=None, vrid=None, priority=None, - max_adver_int=None): - if type_ is None: - type_ = self.type_ - if vrid is None: - vrid = self.vrid - if priority is None: - priority = self.priority - if max_adver_int is None: - max_adver_int = self.max_adver_int - - vrrp_ = vrrp.vrrpv3.create(type_, vrid, priority, max_adver_int, - [self.ip_address]) - return vrrp_.is_valid() - - def test_is_valid_ok(self): - ok_(self._test_is_valid()) - - def test_is_valid_ng_type(self): - ok_(not self._test_is_valid(type_=15)) - - def test_is_valid_ng_vrid_min(self): - vrid = vrrp.VRRP_VRID_MIN - 1 - ok_(not self._test_is_valid(vrid=vrid)) - - def test_is_valid_ng_vrid_max(self): - vrid = vrrp.VRRP_VRID_MAX + 1 - ok_(not self._test_is_valid(vrid=vrid)) - - def test_is_valid_ng_priority_min(self): - priority = vrrp.VRRP_PRIORITY_MIN - 1 - ok_(not self._test_is_valid(priority=priority)) - - def test_is_valid_ng_priority_max(self): - priority = vrrp.VRRP_PRIORITY_MAX + 1 - ok_(not self._test_is_valid(priority=priority)) - - def test_is_valid_ng_adver_min(self): - max_adver_int = vrrp.VRRP_V3_MAX_ADVER_INT_MIN - 1 - ok_(not self._test_is_valid(max_adver_int=max_adver_int)) - - def test_is_valid_ng_adver_max(self): - max_adver_int = vrrp.VRRP_V3_MAX_ADVER_INT_MAX + 1 - ok_(not self._test_is_valid(max_adver_int=max_adver_int)) - - def test_to_string(self): - vrrpv3_values = {'version': self.version, - 'type': self.type_, - 'vrid': self.vrid, - 'priority': self.priority, - 'count_ip': self.count_ip, - 'max_adver_int': self.max_adver_int, - 'checksum': self.vrrpv3.checksum, - 'ip_addresses': [self.ip_address], - 'auth_type': None, - 'auth_data': None, - 'identification': self.vrrpv3.identification} - _vrrpv3_str = ','.join(['%s=%s' % (k, repr(vrrpv3_values[k])) - for k, v in inspect.getmembers(self.vrrpv3) - if k in vrrpv3_values]) - vrrpv3_str = '%s(%s)' % (vrrp.vrrpv3.__name__, _vrrpv3_str) - - eq_(str(self.vrrpv3), vrrpv3_str) - eq_(repr(self.vrrpv3), vrrpv3_str) - - -class Test_vrrpv3_ipv6(unittest.TestCase): - """ Test case for vrrp v3 IPv6 - """ - version = vrrp.VRRP_VERSION_V3 - type_ = vrrp.VRRP_TYPE_ADVERTISEMENT - vrid = 128 - priority = 99 - count_ip = 1 - max_adver_int = 111 - checksum = 0 - ip_address = '2001:db8:2000::1' - vrrpv3 = vrrp.vrrpv3.create(type_, vrid, priority, max_adver_int, - [ip_address]) - buf = struct.pack(vrrp.vrrpv3._PACK_STR + '16s', - vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V3, type_), - vrid, priority, count_ip, - max_adver_int, checksum, - addrconv.ipv6.text_to_bin(ip_address)) - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_init(self): - eq_(self.type_, self.vrrpv3.type) - eq_(self.vrid, self.vrrpv3.vrid) - eq_(self.priority, self.vrrpv3.priority) - eq_(self.count_ip, self.vrrpv3.count_ip) - eq_(1, len(self.vrrpv3.ip_addresses)) - eq_(self.ip_address, self.vrrpv3.ip_addresses[0]) - - def test_parser(self): - vrrpv3, _cls, _ = self.vrrpv3.parser(self.buf) - - eq_(self.version, vrrpv3.version) - eq_(self.type_, vrrpv3.type) - eq_(self.vrid, vrrpv3.vrid) - eq_(self.priority, vrrpv3.priority) - eq_(self.count_ip, vrrpv3.count_ip) - eq_(self.max_adver_int, vrrpv3.max_adver_int) - eq_(self.checksum, vrrpv3.checksum) - eq_(1, len(vrrpv3.ip_addresses)) - eq_(str, type(vrrpv3.ip_addresses[0])) - eq_(self.ip_address, vrrpv3.ip_addresses[0]) - - def test_serialize(self): - src_ip = '2001:db8:2000::1' - dst_ip = vrrp.VRRP_IPV6_DST_ADDRESS - prev = ipv6.ipv6(6, 0, 0, 0, inet.IPPROTO_VRRP, - vrrp.VRRP_IPV6_HOP_LIMIT, src_ip, dst_ip) - - type_ = vrrp.VRRP_TYPE_ADVERTISEMENT - vrid = 5 - priority = 10 - max_adver_int = 30 - ip_address = '2001:db8:2000::2' - ip_addresses = [ip_address] - - vrrp_ = vrrp.vrrpv3.create( - type_, vrid, priority, max_adver_int, ip_addresses) - - buf = vrrp_.serialize(bytearray(), prev) - print(len(buf), type(buf), buf) - pack_str = vrrp.vrrpv3._PACK_STR + '16s' - pack_len = struct.calcsize(pack_str) - res = struct.unpack(pack_str, six.binary_type(buf)) - eq_(res[0], vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V3, type_)) - eq_(res[1], vrid) - eq_(res[2], priority) - eq_(res[3], len(ip_addresses)) - eq_(res[4], max_adver_int) - # res[5] is checksum - eq_(res[6], addrconv.ipv6.text_to_bin(ip_address)) - eq_(len(buf), pack_len) - print(res) - - # checksum - ph = struct.pack('!16s16sI3xB', - addrconv.ipv6.text_to_bin(src_ip), - addrconv.ipv6.text_to_bin(dst_ip), - pack_len, inet.IPPROTO_VRRP) - s = packet_utils.checksum(ph + buf) - eq_(0, s) - - @raises(Exception) - def test_malformed_vrrpv3(self): - m_short_buf = self.buf[1:vrrp.vrrpv3._MIN_LEN] - vrrp.vrrp.parser(m_short_buf) - - def test_create_packet(self): - primary_ip = '2001:db8:2000::3' - p0 = self.vrrpv3.create_packet(primary_ip) - p0.serialize() - print(len(p0.data), p0.data) - p1 = packet.Packet(six.binary_type(p0.data)) - p1.serialize() - print(len(p0.data), p0.data) - print(len(p1.data), p1.data) - eq_(p0.data, p1.data) - - def test_to_string(self): - vrrpv3_values = {'version': self.version, - 'type': self.type_, - 'vrid': self.vrid, - 'priority': self.priority, - 'count_ip': self.count_ip, - 'max_adver_int': self.max_adver_int, - 'checksum': self.vrrpv3.checksum, - 'ip_addresses': [self.ip_address], - 'auth_type': None, - 'auth_data': None, - 'identification': self.vrrpv3.identification} - _vrrpv3_str = ','.join(['%s=%s' % (k, repr(vrrpv3_values[k])) - for k, v in inspect.getmembers(self.vrrpv3) - if k in vrrpv3_values]) - vrrpv3_str = '%s(%s)' % (vrrp.vrrpv3.__name__, _vrrpv3_str) - - eq_(str(self.vrrpv3), vrrpv3_str) - eq_(repr(self.vrrpv3), vrrpv3_str) diff --git a/ryu/tests/unit/packet/test_vxlan.py b/ryu/tests/unit/packet/test_vxlan.py deleted file mode 100644 index 8cace581..00000000 --- a/ryu/tests/unit/packet/test_vxlan.py +++ /dev/null @@ -1,82 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import unittest - -from nose.tools import eq_ -from nose.tools import raises - -from ryu.lib.packet import ethernet -from ryu.lib.packet import vxlan - - -LOG = logging.getLogger(__name__) - - -class Test_vxlan(unittest.TestCase): - """ - Test case for VXLAN (RFC 7348) header encoder/decoder class. - """ - - vni = 0x123456 - buf = ( - b'\x08\x00\x00\x00' # flags = R|R|R|R|I|R|R|R (8 bits) - b'\x12\x34\x56\x00' # vni = 0x123456 (24 bits) - b'test_payload' # for test - ) - pkt = vxlan.vxlan(vni) - jsondict = { - 'vxlan': { - 'vni': vni - } - } - - def test_init(self): - eq_(self.vni, self.pkt.vni) - - def test_parser(self): - parsed_pkt, next_proto_cls, rest_buf = vxlan.vxlan.parser(self.buf) - eq_(self.vni, parsed_pkt.vni) - eq_(ethernet.ethernet, next_proto_cls) - eq_(b'test_payload', rest_buf) - - @raises(AssertionError) - def test_invalid_flags(self): - invalid_flags_bug = ( - b'\x00\x00\x00\x00' # all bits are set to zero - b'\x12\x34\x56\x00' # vni = 0x123456 (24 bits) - ) - vxlan.vxlan.parser(invalid_flags_bug) - - def test_serialize(self): - serialized_buf = self.pkt.serialize(payload=None, prev=None) - eq_(self.buf[:vxlan.vxlan._MIN_LEN], serialized_buf) - - def test_from_jsondict(self): - pkt_from_json = vxlan.vxlan.from_jsondict( - self.jsondict[vxlan.vxlan.__name__]) - eq_(self.vni, pkt_from_json.vni) - - def test_to_jsondict(self): - jsondict_from_pkt = self.pkt.to_jsondict() - eq_(self.jsondict, jsondict_from_pkt) - - def test_vni_from_bin(self): - vni = vxlan.vni_from_bin(b'\x12\x34\x56') - eq_(self.vni, vni) - - def test_vni_to_bin(self): - eq_(b'\x12\x34\x56', vxlan.vni_to_bin(self.vni)) diff --git a/ryu/tests/unit/packet/test_zebra.py b/ryu/tests/unit/packet/test_zebra.py deleted file mode 100644 index 19ff88de..00000000 --- a/ryu/tests/unit/packet/test_zebra.py +++ /dev/null @@ -1,66 +0,0 @@ -# Copyright (C) 2017 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from __future__ import print_function - -import os -import sys -import unittest - -from nose.tools import eq_ -from nose.tools import ok_ -import six - -from ryu.lib import pcaplib -from ryu.lib.packet import packet -from ryu.lib.packet import zebra -from ryu.utils import binary_str - - -PCAP_DATA_DIR = os.path.join( - os.path.dirname(sys.modules[__name__].__file__), - '../../packet_data/pcap/') - - -class Test_zebra(unittest.TestCase): - """ - Test case for ryu.lib.packet.zebra. - """ - - def test_pcap(self): - files = [ - 'zebra_v2', - 'zebra_v3', - ] - - for f in files: - zebra_pcap_file = os.path.join(PCAP_DATA_DIR, f + '.pcap') - # print('*** testing %s' % zebra_pcap_file) - - for _, buf in pcaplib.Reader(open(zebra_pcap_file, 'rb')): - # Checks if Zebra message can be parsed as expected. - pkt = packet.Packet(buf) - zebra_pkts = pkt.get_protocols(zebra.ZebraMessage) - for zebra_pkt in zebra_pkts: - ok_(isinstance(zebra_pkt, zebra.ZebraMessage), - 'Failed to parse Zebra message: %s' % pkt) - ok_(not isinstance(pkt.protocols[-1], - (six.binary_type, bytearray)), - 'Some messages could not be parsed: %s' % pkt) - - # Checks if Zebra message can be serialized as expected. - pkt.serialize() - eq_(buf, pkt.data, - "b'%s' != b'%s'" % (binary_str(buf), binary_str(pkt.data))) diff --git a/ryu/tests/unit/sample/__init__.py b/ryu/tests/unit/sample/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/sample/test_sample1.py b/ryu/tests/unit/sample/test_sample1.py deleted file mode 100644 index 34f8f69a..00000000 --- a/ryu/tests/unit/sample/test_sample1.py +++ /dev/null @@ -1,20 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -from nose.tools import ok_, eq_ -# from ryu.app.simple_switch import SimpleSwitch - -import logging - - -LOG = logging.getLogger('ryu.tests.test_sample1') - - -class TestSample1(unittest.TestCase): - - def testS1Func1(self): - LOG.debug('testS1Func1 - START') - ok_(True) - - def testS1Func2(self): - ok_(True) diff --git a/ryu/tests/unit/sample/test_sample2.py b/ryu/tests/unit/sample/test_sample2.py deleted file mode 100644 index 9c21a42a..00000000 --- a/ryu/tests/unit/sample/test_sample2.py +++ /dev/null @@ -1,14 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 - -import unittest -from nose.tools import ok_, eq_ -# from ryu.app.simple_switch import SimpleSwitch - - -class TestSample2(unittest.TestCase): - - def testS2Func1(self): - ok_(True) - - def testS2Func2(self): - ok_(True) diff --git a/ryu/tests/unit/services/__init__.py b/ryu/tests/unit/services/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/services/protocols/__init__.py b/ryu/tests/unit/services/protocols/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/services/protocols/bgp/__init__.py b/ryu/tests/unit/services/protocols/bgp/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/services/protocols/bgp/core_managers/__init__.py b/ryu/tests/unit/services/protocols/bgp/core_managers/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/services/protocols/bgp/core_managers/test_table_manager.py b/ryu/tests/unit/services/protocols/bgp/core_managers/test_table_manager.py deleted file mode 100644 index c9c9f55e..00000000 --- a/ryu/tests/unit/services/protocols/bgp/core_managers/test_table_manager.py +++ /dev/null @@ -1,937 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -from collections import OrderedDict -import unittest -import logging -try: - import mock # Python 2 -except ImportError: - from unittest import mock # Python 3 - -from nose.tools import ok_, eq_, raises - -from ryu.lib.packet.bgp import BGPPathAttributeOrigin -from ryu.lib.packet.bgp import BGPPathAttributeAsPath -from ryu.lib.packet.bgp import BGP_ATTR_ORIGIN_IGP -from ryu.lib.packet.bgp import BGP_ATTR_TYPE_ORIGIN -from ryu.lib.packet.bgp import BGP_ATTR_TYPE_AS_PATH -from ryu.lib.packet.bgp import BGP_ATTR_TYPE_EXTENDED_COMMUNITIES -from ryu.lib.packet.bgp import IPAddrPrefix -from ryu.lib.packet.bgp import IP6AddrPrefix -from ryu.lib.packet.bgp import EvpnArbitraryEsi -from ryu.lib.packet.bgp import EvpnLACPEsi -from ryu.lib.packet.bgp import EvpnEthernetAutoDiscoveryNLRI -from ryu.lib.packet.bgp import EvpnMacIPAdvertisementNLRI -from ryu.lib.packet.bgp import EvpnInclusiveMulticastEthernetTagNLRI -from ryu.lib.packet.bgp import FlowSpecIPv4NLRI -from ryu.lib.packet.bgp import BGPPathAttributeExtendedCommunities -from ryu.services.protocols.bgp.bgpspeaker import EVPN_MAX_ET -from ryu.services.protocols.bgp.bgpspeaker import ESI_TYPE_LACP -from ryu.services.protocols.bgp.bgpspeaker import FLOWSPEC_FAMILY_IPV4 -from ryu.services.protocols.bgp.bgpspeaker import FLOWSPEC_FAMILY_VPNV4 -from ryu.services.protocols.bgp.bgpspeaker import FLOWSPEC_TA_SAMPLE -from ryu.services.protocols.bgp.bgpspeaker import FLOWSPEC_TA_TERMINAL -from ryu.services.protocols.bgp.core import BgpCoreError -from ryu.services.protocols.bgp.core_managers import table_manager -from ryu.services.protocols.bgp.rtconf.vrfs import VRF_RF_IPV4 -from ryu.services.protocols.bgp.rtconf.vrfs import VRF_RF_IPV6 -from ryu.services.protocols.bgp.rtconf.vrfs import VRF_RF_L2_EVPN -from ryu.services.protocols.bgp.rtconf.vrfs import VRF_RF_IPV4_FLOWSPEC -from ryu.services.protocols.bgp.utils.bgp import create_v4flowspec_actions - - -LOG = logging.getLogger(__name__) - - -class Test_TableCoreManager(unittest.TestCase): - """ - Test case for bgp.core_managers.table_manager.TableCoreManager - """ - - @mock.patch( - 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', - mock.MagicMock(return_value=None)) - def _test_update_vrf_table(self, prefix_inst, route_dist, prefix_str, - next_hop, route_family, route_type, - is_withdraw=False, **kwargs): - # Instantiate TableCoreManager - tbl_mng = table_manager.TableCoreManager(None, None) - vrf_table_mock = mock.MagicMock() - tbl_mng._tables = {(route_dist, route_family): vrf_table_mock} - - # Test - tbl_mng.update_vrf_table( - route_dist=route_dist, - prefix=prefix_str, - next_hop=next_hop, - route_family=route_family, - route_type=route_type, - is_withdraw=is_withdraw, - **kwargs) - - # Check - call_args_list = vrf_table_mock.insert_vrf_path.call_args_list - ok_(len(call_args_list) == 1) # insert_vrf_path should be called once - args, kwargs = call_args_list[0] - ok_(len(args) == 0) # no positional argument - eq_(str(prefix_inst), str(kwargs['nlri'])) - eq_(is_withdraw, kwargs['is_withdraw']) - if is_withdraw: - eq_(None, kwargs['next_hop']) - eq_(False, kwargs['gen_lbl']) - else: - eq_(next_hop, kwargs['next_hop']) - eq_(True, kwargs['gen_lbl']) - - def test_update_vrf_table_ipv4(self): - # Prepare test data - route_dist = '65000:100' - ip_network = '192.168.0.0' - ip_prefix_len = 24 - prefix_str = '%s/%d' % (ip_network, ip_prefix_len) - prefix_inst = IPAddrPrefix(ip_prefix_len, ip_network) - next_hop = '10.0.0.1' - route_family = VRF_RF_IPV4 - route_type = None # should be ignored - kwargs = {} # should be ignored - - self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, - next_hop, route_family, route_type, - **kwargs) - - def test_update_vrf_table_ipv6(self): - # Prepare test data - route_dist = '65000:100' - ip_network = 'fe80::' - ip_prefix_len = 64 - prefix_str = '%s/%d' % (ip_network, ip_prefix_len) - prefix_inst = IP6AddrPrefix(ip_prefix_len, ip_network) - next_hop = 'fe80::0011:aabb:ccdd:eeff' - route_family = VRF_RF_IPV6 - route_type = None # should be ignored - kwargs = {} # should be ignored - - self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, - next_hop, route_family, route_type, - **kwargs) - - def test_update_vrf_table_l2_evpn_with_esi_int(self): - # Prepare test data - route_dist = '65000:100' - prefix_str = None # should be ignored - kwargs = { - 'ethernet_tag_id': 100, - 'mac_addr': 'aa:bb:cc:dd:ee:ff', - 'ip_addr': '192.168.0.1', - 'mpls_labels': [], # not be used - } - esi = EvpnArbitraryEsi(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00') - prefix_inst = EvpnMacIPAdvertisementNLRI( - route_dist=route_dist, - esi=esi, - **kwargs) - next_hop = '10.0.0.1' - route_family = VRF_RF_L2_EVPN - route_type = EvpnMacIPAdvertisementNLRI.ROUTE_TYPE_NAME - kwargs['esi'] = 0 - - self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, - next_hop, route_family, route_type, - **kwargs) - - def test_update_vrf_table_l2_evpn_with_esi_dict(self): - # Prepare test data - route_dist = '65000:100' - prefix_str = None # should be ignored - kwargs = { - 'ethernet_tag_id': EVPN_MAX_ET, - } - esi = EvpnLACPEsi(mac_addr='aa:bb:cc:dd:ee:ff', port_key=100) - prefix_inst = EvpnEthernetAutoDiscoveryNLRI( - route_dist=route_dist, - esi=esi, - **kwargs) - next_hop = '0.0.0.0' - route_family = VRF_RF_L2_EVPN - route_type = EvpnEthernetAutoDiscoveryNLRI.ROUTE_TYPE_NAME - kwargs['esi'] = { - 'type': ESI_TYPE_LACP, - 'mac_addr': 'aa:bb:cc:dd:ee:ff', - 'port_key': 100, - } - - self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, - next_hop, route_family, route_type, - **kwargs) - - def test_update_vrf_table_l2_evpn_without_esi(self): - # Prepare test data - route_dist = '65000:100' - prefix_str = None # should be ignored - kwargs = { - 'ethernet_tag_id': 100, - 'ip_addr': '192.168.0.1', - } - prefix_inst = EvpnInclusiveMulticastEthernetTagNLRI( - route_dist=route_dist, **kwargs) - next_hop = '10.0.0.1' - route_family = VRF_RF_L2_EVPN - route_type = EvpnInclusiveMulticastEthernetTagNLRI.ROUTE_TYPE_NAME - - self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, - next_hop, route_family, route_type, - **kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', - mock.MagicMock(return_value=None)) - def test_update_vrf_table_l2_evpn_with_vni(self): - # Prepare test data - route_dist = '65000:100' - prefix_str = None # should be ignored - kwargs = { - 'ethernet_tag_id': 100, - 'mac_addr': 'aa:bb:cc:dd:ee:ff', - 'ip_addr': '192.168.0.1', - 'vni': 500, - } - esi = EvpnArbitraryEsi(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00') - prefix_inst = EvpnMacIPAdvertisementNLRI( - route_dist=route_dist, - esi=esi, - **kwargs) - next_hop = '10.0.0.1' - route_family = VRF_RF_L2_EVPN - route_type = EvpnMacIPAdvertisementNLRI.ROUTE_TYPE_NAME - tunnel_type = 'vxlan' - kwargs['esi'] = 0 - - # Instantiate TableCoreManager - tbl_mng = table_manager.TableCoreManager(None, None) - vrf_table_mock = mock.MagicMock() - tbl_mng._tables = {(route_dist, route_family): vrf_table_mock} - - # Test - tbl_mng.update_vrf_table( - route_dist=route_dist, - prefix=prefix_str, - next_hop=next_hop, - route_family=route_family, - route_type=route_type, - tunnel_type=tunnel_type, - **kwargs) - - # Check - call_args_list = vrf_table_mock.insert_vrf_path.call_args_list - ok_(len(call_args_list) == 1) # insert_vrf_path should be called once - args, kwargs = call_args_list[0] - ok_(len(args) == 0) # no positional argument - eq_(str(prefix_inst), str(kwargs['nlri'])) - eq_(next_hop, kwargs['next_hop']) - eq_(False, kwargs['gen_lbl']) # should not generate MPLS labels - eq_(tunnel_type, kwargs['tunnel_type']) - - def test_update_vrf_table_ipv4_withdraw(self): - # Prepare test data - route_dist = '65000:100' - ip_network = '192.168.0.0' - ip_prefix_len = 24 - prefix_str = '%s/%d' % (ip_network, ip_prefix_len) - prefix_inst = IPAddrPrefix(ip_prefix_len, ip_network) - next_hop = '10.0.0.1' - route_family = VRF_RF_IPV4 - route_type = None # should be ignored - kwargs = {} # should be ignored - - self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, - next_hop, route_family, route_type, - is_withdraw=True, **kwargs) - - @raises(BgpCoreError) - @mock.patch( - 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', - mock.MagicMock(return_value=None)) - def test_update_vrf_table_no_vrf(self): - # Prepare test data - route_dist = '65000:100' - ip_network = '192.168.0.0' - ip_prefix_len = 24 - prefix_str = '%s/%d' % (ip_network, ip_prefix_len) - next_hop = '10.0.0.1' - route_family = VRF_RF_IPV4 - route_type = None # should be ignored - kwargs = {} # should be ignored - - # Instantiate TableCoreManager - tbl_mng = table_manager.TableCoreManager(None, None) - tbl_mng._tables = {} # no table - - # Test - tbl_mng.update_vrf_table( - route_dist=route_dist, - prefix=prefix_str, - next_hop=next_hop, - route_family=route_family, - route_type=route_type, - **kwargs) - - @raises(BgpCoreError) - def test_update_vrf_table_invalid_next_hop(self): - # Prepare test data - route_dist = '65000:100' - ip_network = '192.168.0.0' - ip_prefix_len = 24 - prefix_str = '%s/%d' % (ip_network, ip_prefix_len) - prefix_inst = IPAddrPrefix(ip_prefix_len, ip_network) - next_hop = 'xxx.xxx.xxx.xxx' # invalid - route_family = VRF_RF_IPV4 - route_type = None # should be ignored - kwargs = {} # should be ignored - - self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, - next_hop, route_family, route_type, - **kwargs) - - @raises(BgpCoreError) - def test_update_vrf_table_invalid_ipv4_prefix(self): - # Prepare test data - route_dist = '65000:100' - ip_network = 'xxx.xxx.xxx.xxx' # invalid - ip_prefix_len = 24 - prefix_str = '%s/%d' % (ip_network, ip_prefix_len) - prefix_inst = IPAddrPrefix(ip_prefix_len, ip_network) - next_hop = '10.0.0.1' - route_family = VRF_RF_IPV4 - route_type = None # should be ignored - kwargs = {} # should be ignored - - self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, - next_hop, route_family, route_type, - **kwargs) - - @raises(BgpCoreError) - def test_update_vrf_table_invalid_ipv6_prefix(self): - # Prepare test data - route_dist = '65000:100' - ip_network = 'xxxx::' # invalid - ip_prefix_len = 64 - prefix_str = '%s/%d' % (ip_network, ip_prefix_len) - prefix_inst = IP6AddrPrefix(ip_prefix_len, ip_network) - next_hop = 'fe80::0011:aabb:ccdd:eeff' - route_family = VRF_RF_IPV6 - route_type = None # should be ignored - kwargs = {} # should be ignored - - self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, - next_hop, route_family, route_type, - **kwargs) - - @raises(BgpCoreError) - def test_update_vrf_table_invalid_route_family(self): - # Prepare test data - route_dist = '65000:100' - ip_network = '192.168.0.0' - ip_prefix_len = 24 - prefix_str = '%s/%d' % (ip_network, ip_prefix_len) - prefix_inst = IPAddrPrefix(ip_prefix_len, ip_network) - next_hop = '10.0.0.1' - route_family = 'foobar' # invalid - route_type = None # should be ignored - kwargs = {} # should be ignored - - self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, - next_hop, route_family, route_type, - **kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', - mock.MagicMock(return_value=None)) - @mock.patch( - 'ryu.services.protocols.bgp.core_managers.TableCoreManager.learn_path') - def _test_update_global_table(self, learn_path_mock, prefix, next_hop, - is_withdraw, expected_next_hop): - # Prepare test data - origin = BGPPathAttributeOrigin(BGP_ATTR_ORIGIN_IGP) - aspath = BGPPathAttributeAsPath([[]]) - pathattrs = OrderedDict() - pathattrs[BGP_ATTR_TYPE_ORIGIN] = origin - pathattrs[BGP_ATTR_TYPE_AS_PATH] = aspath - pathattrs = str(pathattrs) - - # Instantiate TableCoreManager - tbl_mng = table_manager.TableCoreManager(None, None) - - # Test - tbl_mng.update_global_table( - prefix=prefix, - next_hop=next_hop, - is_withdraw=is_withdraw, - ) - - # Check - call_args_list = learn_path_mock.call_args_list - ok_(len(call_args_list) == 1) # learn_path should be called once - args, kwargs = call_args_list[0] - ok_(len(kwargs) == 0) # no keyword argument - output_path = args[0] - eq_(None, output_path.source) - eq_(prefix, output_path.nlri.prefix) - eq_(pathattrs, str(output_path.pathattr_map)) - eq_(expected_next_hop, output_path.nexthop) - eq_(is_withdraw, output_path.is_withdraw) - - def test_update_global_table_ipv4(self): - self._test_update_global_table( - prefix='192.168.0.0/24', - next_hop='10.0.0.1', - is_withdraw=False, - expected_next_hop='10.0.0.1', - ) - - def test_update_global_table_ipv4_withdraw(self): - self._test_update_global_table( - prefix='192.168.0.0/24', - next_hop='10.0.0.1', - is_withdraw=True, - expected_next_hop='10.0.0.1', - ) - - def test_update_global_table_ipv4_no_next_hop(self): - self._test_update_global_table( - prefix='192.168.0.0/24', - next_hop=None, - is_withdraw=True, - expected_next_hop='0.0.0.0', - ) - - def test_update_global_table_ipv6(self): - self._test_update_global_table( - prefix='fe80::/64', - next_hop='fe80::0011:aabb:ccdd:eeff', - is_withdraw=False, - expected_next_hop='fe80::0011:aabb:ccdd:eeff', - ) - - def test_update_global_table_ipv6_withdraw(self): - self._test_update_global_table( - prefix='fe80::/64', - next_hop='fe80::0011:aabb:ccdd:eeff', - is_withdraw=True, - expected_next_hop='fe80::0011:aabb:ccdd:eeff', - ) - - def test_update_global_table_ipv6_no_next_hop(self): - self._test_update_global_table( - prefix='fe80::/64', - next_hop=None, - is_withdraw=True, - expected_next_hop='::', - ) - - @mock.patch( - 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', - mock.MagicMock(return_value=None)) - def _test_update_flowspec_vrf_table(self, flowspec_family, route_family, - route_dist, rules, prefix, - is_withdraw, actions=None): - # Instantiate TableCoreManager - tbl_mng = table_manager.TableCoreManager(None, None) - vrf_table_mock = mock.MagicMock() - tbl_mng._tables = {(route_dist, route_family): vrf_table_mock} - - # Test - tbl_mng.update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_dist=route_dist, - rules=rules, - actions=actions, - is_withdraw=is_withdraw, - ) - - # Check - call_args_list = vrf_table_mock.insert_vrffs_path.call_args_list - ok_(len( - call_args_list) == 1) # insert_vrffs_path should be called once - args, kwargs = call_args_list[0] - ok_(len(args) == 0) # no positional argument - eq_(prefix, kwargs['nlri'].prefix) - eq_(is_withdraw, kwargs['is_withdraw']) - - def test_update_flowspec_vrf_table_vpnv4(self): - flowspec_family = 'vpnv4fs' - route_family = 'ipv4fs' - route_dist = '65001:100' - rules = { - 'dst_prefix': '10.70.1.0/24', - } - actions = { - 'traffic_rate': { - 'as_number': 0, - 'rate_info': 100.0, - }, - } - prefix = 'ipv4fs(dst_prefix:10.70.1.0/24)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - def test_update_flowspec_vrf_table_vpnv4_without_actions(self): - flowspec_family = 'vpnv4fs' - route_family = 'ipv4fs' - route_dist = '65001:100' - rules = { - 'dst_prefix': '10.70.1.0/24', - } - prefix = 'ipv4fs(dst_prefix:10.70.1.0/24)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - ) - - @raises(BgpCoreError) - def test_update_flowspec_vrf_table_vpnv4_invalid_actions(self): - flowspec_family = 'vpnv4fs' - route_family = 'ipv4fs' - route_dist = '65001:100' - rules = { - 'dst_prefix': '10.70.1.0/24', - } - actions = { - 'invalid_actions': { - 'invalid_param': 10, - }, - } - prefix = 'ipv4fs(dst_prefix:10.70.1.0/24)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - @raises(BgpCoreError) - def test_update_flowspec_vrf_table_vpnv4_invalid_flowspec_family(self): - flowspec_family = 'invalid' - route_family = 'ipv4fs' - route_dist = '65001:100' - rules = { - 'dst_prefix': '10.70.1.0/24', - } - prefix = 'ipv4fs(dst_prefix:10.70.1.0/24)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - ) - - @raises(BgpCoreError) - def test_update_flowspec_vrf_table_vpnv4_invalid_route_family(self): - flowspec_family = 'vpnv4fs' - route_family = 'invalid' - route_dist = '65001:100' - rules = { - 'dst_prefix': '10.70.1.0/24', - } - prefix = 'ipv4fs(dst_prefix:10.70.1.0/24)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - ) - - @mock.patch( - 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', - mock.MagicMock(return_value=None)) - @mock.patch( - 'ryu.services.protocols.bgp.core_managers.TableCoreManager.learn_path') - def _test_update_flowspec_global_table(self, learn_path_mock, - flowspec_family, rules, prefix, - is_withdraw, actions=None): - # Instantiate TableCoreManager - tbl_mng = table_manager.TableCoreManager(None, None) - - # Test - tbl_mng.update_flowspec_global_table( - flowspec_family=flowspec_family, - rules=rules, - actions=actions, - is_withdraw=is_withdraw, - ) - - # Check - call_args_list = learn_path_mock.call_args_list - ok_(len(call_args_list) == 1) # learn_path should be called once - args, kwargs = call_args_list[0] - ok_(len(kwargs) == 0) # no keyword argument - output_path = args[0] - eq_(None, output_path.source) - eq_(prefix, output_path.nlri.prefix) - eq_(None, output_path.nexthop) - eq_(is_withdraw, output_path.is_withdraw) - - def test_update_flowspec_global_table_ipv4(self): - flowspec_family = 'ipv4fs' - rules = { - 'dst_prefix': '10.60.1.0/24', - } - actions = { - 'traffic_rate': { - 'as_number': 0, - 'rate_info': 100.0, - }, - } - prefix = 'ipv4fs(dst_prefix:10.60.1.0/24)' - - self._test_update_flowspec_global_table( - flowspec_family=flowspec_family, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - def test_update_flowspec_global_table_ipv4_without_actions(self): - flowspec_family = 'ipv4fs' - rules = { - 'dst_prefix': '10.60.1.0/24', - } - prefix = 'ipv4fs(dst_prefix:10.60.1.0/24)' - - self._test_update_flowspec_global_table( - flowspec_family=flowspec_family, - rules=rules, - prefix=prefix, - is_withdraw=False, - ) - - @raises(BgpCoreError) - def test_update_flowspec_global_table_ipv4_invalid_actions(self): - flowspec_family = 'ipv4fs' - rules = { - 'dst_prefix': '10.60.1.0/24', - } - actions = { - 'invalid_actions': { - 'invalid_param': 10, - }, - } - prefix = 'ipv4fs(dst_prefix:10.60.1.0/24)' - - self._test_update_flowspec_global_table( - flowspec_family=flowspec_family, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - @raises(BgpCoreError) - def test_update_flowspec_global_table_ipv4_invalid_flowspec_family(self): - flowspec_family = 'invalid' - rules = { - 'dst_prefix': '10.60.1.0/24', - } - actions = { - 'traffic_rate': { - 'as_number': 0, - 'rate_info': 100.0, - }, - } - prefix = 'ipv4fs(dst_prefix:10.60.1.0/24)' - - self._test_update_flowspec_global_table( - flowspec_family=flowspec_family, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - def test_update_flowspec_global_table_ipv6(self): - flowspec_family = 'ipv6fs' - rules = { - 'dst_prefix': '2001::3/128/32', - } - actions = { - 'traffic_rate': { - 'as_number': 0, - 'rate_info': 100.0, - }, - } - prefix = 'ipv6fs(dst_prefix:2001::3/128/32)' - - self._test_update_flowspec_global_table( - flowspec_family=flowspec_family, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - def test_update_flowspec_global_table_ipv6_without_actions(self): - flowspec_family = 'ipv6fs' - rules = { - 'dst_prefix': '2001::3/128/32', - } - prefix = 'ipv6fs(dst_prefix:2001::3/128/32)' - - self._test_update_flowspec_global_table( - flowspec_family=flowspec_family, - rules=rules, - prefix=prefix, - is_withdraw=False, - ) - - @raises(BgpCoreError) - def test_update_flowspec_global_table_ipv6_invalid_actions(self): - flowspec_family = 'ipv6fs' - rules = { - 'dst_prefix': '2001::3/128/32', - } - actions = { - 'invalid_actions': { - 'invalid_param': 10, - }, - } - prefix = 'ipv4fs(dst_prefix:2001::3/128/32)' - - self._test_update_flowspec_global_table( - flowspec_family=flowspec_family, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - @raises(BgpCoreError) - def test_update_flowspec_global_table_ipv6_invalid_flowspec_family(self): - flowspec_family = 'invalid' - rules = { - 'dst_prefix': '2001::3/128/32', - } - actions = { - 'traffic_rate': { - 'as_number': 0, - 'rate_info': 100.0, - }, - } - prefix = 'ipv4fs(dst_prefix:2001::3/128/32)' - - self._test_update_flowspec_global_table( - flowspec_family=flowspec_family, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - def test_update_flowspec_vrf_table_vpnv6(self): - flowspec_family = 'vpnv6fs' - route_family = 'ipv6fs' - route_dist = '65001:100' - rules = { - 'dst_prefix': '2001::3/128/32', - } - actions = { - 'traffic_rate': { - 'as_number': 0, - 'rate_info': 100.0, - }, - } - prefix = 'ipv6fs(dst_prefix:2001::3/128/32)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - def test_update_flowspec_vrf_table_vpnv6_without_actions(self): - flowspec_family = 'vpnv6fs' - route_family = 'ipv6fs' - route_dist = '65001:100' - rules = { - 'dst_prefix': '2001::3/128/32', - } - prefix = 'ipv6fs(dst_prefix:2001::3/128/32)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - ) - - @raises(BgpCoreError) - def test_update_flowspec_vrf_table_vpnv6_invalid_actions(self): - flowspec_family = 'vpnv6fs' - route_family = 'ipv6fs' - route_dist = '65001:100' - rules = { - 'dst_prefix': '2001::3/128/32', - } - actions = { - 'invalid_actions': { - 'invalid_param': 10, - }, - } - prefix = 'ipv6fs(dst_prefix:2001::3/128/32)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - @raises(BgpCoreError) - def test_update_flowspec_vrf_table_vpnv6_invalid_route_family(self): - flowspec_family = 'vpnv6fs' - route_family = 'invalid' - route_dist = '65001:100' - rules = { - 'dst_prefix': '2001::3/128/32', - } - prefix = 'ipv4fs(dst_prefix:2001::3/128/32)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - ) - - def test_update_flowspec_vrf_table_l2vpn(self): - flowspec_family = 'l2vpnfs' - route_family = 'l2vpnfs' - route_dist = '65001:100' - rules = { - 'dst_mac': '12:34:56:78:9a:bc', - } - actions = { - 'traffic_rate': { - 'as_number': 0, - 'rate_info': 100.0, - }, - } - prefix = 'l2vpnfs(dst_mac:12:34:56:78:9a:bc)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - def test_update_flowspec_vrf_table_l2vpn_without_actions(self): - flowspec_family = 'l2vpnfs' - route_family = 'l2vpnfs' - route_dist = '65001:100' - rules = { - 'dst_mac': '12:34:56:78:9a:bc', - } - prefix = 'l2vpnfs(dst_mac:12:34:56:78:9a:bc)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - ) - - @raises(BgpCoreError) - def test_update_flowspec_vrf_table_l2vpn_invalid_actions(self): - flowspec_family = 'l2vpnfs' - route_family = 'l2vpnfs' - route_dist = '65001:100' - rules = { - 'dst_mac': '12:34:56:78:9a:bc', - } - actions = { - 'invalid_actions': { - 'invalid_param': 10, - }, - } - prefix = 'l2vpnfs(dst_mac:12:34:56:78:9a:bc)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - actions=actions, - ) - - @raises(BgpCoreError) - def test_update_flowspec_vrf_table_l2vpn_invalid_route_family(self): - flowspec_family = 'l2vpnfs' - route_family = 'invalid' - route_dist = '65001:100' - rules = { - 'dst_mac': '12:34:56:78:9a:bc', - } - prefix = 'l2vpnfs(dst_mac:12:34:56:78:9a:bc)' - - self._test_update_flowspec_vrf_table( - flowspec_family=flowspec_family, - route_family=route_family, - route_dist=route_dist, - rules=rules, - prefix=prefix, - is_withdraw=False, - ) diff --git a/ryu/tests/unit/services/protocols/bgp/test_bgpspeaker.py b/ryu/tests/unit/services/protocols/bgp/test_bgpspeaker.py deleted file mode 100644 index 81a8bb3b..00000000 --- a/ryu/tests/unit/services/protocols/bgp/test_bgpspeaker.py +++ /dev/null @@ -1,1088 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -import logging -try: - import mock # Python 2 -except ImportError: - from unittest import mock # Python 3 - -from nose.tools import raises - -from ryu.services.protocols.bgp import bgpspeaker -from ryu.services.protocols.bgp.bgpspeaker import EVPN_MAX_ET -from ryu.services.protocols.bgp.bgpspeaker import ESI_TYPE_LACP -from ryu.services.protocols.bgp.api.prefix import ESI_TYPE_L2_BRIDGE -from ryu.services.protocols.bgp.bgpspeaker import ESI_TYPE_MAC_BASED -from ryu.services.protocols.bgp.api.prefix import REDUNDANCY_MODE_ALL_ACTIVE -from ryu.services.protocols.bgp.api.prefix import REDUNDANCY_MODE_SINGLE_ACTIVE - - -LOG = logging.getLogger(__name__) - - -class Test_BGPSpeaker(unittest.TestCase): - """ - Test case for bgp.bgpspeaker.BGPSpeaker - """ - - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_eth_auto_discovery(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_ETH_AUTO_DISCOVERY - route_dist = '65000:100' - esi = { - 'type': ESI_TYPE_LACP, - 'mac_addr': 'aa:bb:cc:dd:ee:ff', - 'port_key': 100, - } - ethernet_tag_id = EVPN_MAX_ET - redundancy_mode = REDUNDANCY_MODE_ALL_ACTIVE - next_hop = '0.0.0.0' - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'esi': esi, - 'ethernet_tag_id': ethernet_tag_id, - 'redundancy_mode': redundancy_mode, - 'next_hop': next_hop, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - redundancy_mode=redundancy_mode, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_eth_auto_discovery_vni(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_ETH_AUTO_DISCOVERY - route_dist = '65000:100' - esi = { - 'type': ESI_TYPE_L2_BRIDGE, - 'mac_addr': 'aa:bb:cc:dd:ee:ff', - 'priority': 100, - } - ethernet_tag_id = EVPN_MAX_ET - redundancy_mode = REDUNDANCY_MODE_SINGLE_ACTIVE - vni = 500 - next_hop = '0.0.0.0' - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'esi': esi, - 'ethernet_tag_id': ethernet_tag_id, - 'redundancy_mode': redundancy_mode, - 'vni': vni, - 'next_hop': next_hop, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - redundancy_mode=redundancy_mode, - vni=vni - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', **expected_kwargs) - - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_mac_ip_adv(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_MAC_IP_ADV_ROUTE - route_dist = '65000:100' - esi = 0 # denotes single-homed - ethernet_tag_id = 200 - mac_addr = 'aa:bb:cc:dd:ee:ff' - ip_addr = '192.168.0.1' - next_hop = '10.0.0.1' - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'esi': esi, - 'ethernet_tag_id': ethernet_tag_id, - 'mac_addr': mac_addr, - 'ip_addr': ip_addr, - 'next_hop': next_hop, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - mac_addr=mac_addr, - ip_addr=ip_addr, - next_hop=next_hop, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', **expected_kwargs) - - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_mac_ip_adv_vni(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_MAC_IP_ADV_ROUTE - route_dist = '65000:100' - esi = 0 # denotes single-homed - ethernet_tag_id = 200 - mac_addr = 'aa:bb:cc:dd:ee:ff' - ip_addr = '192.168.0.1' - vni = 500 - next_hop = '10.0.0.1' - tunnel_type = bgpspeaker.TUNNEL_TYPE_VXLAN - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'esi': esi, - 'ethernet_tag_id': ethernet_tag_id, - 'mac_addr': mac_addr, - 'ip_addr': ip_addr, - 'vni': vni, - 'next_hop': next_hop, - 'tunnel_type': tunnel_type, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - mac_addr=mac_addr, - ip_addr=ip_addr, - vni=vni, - next_hop=next_hop, - tunnel_type=tunnel_type, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', **expected_kwargs) - - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_multicast_etag(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE - route_dist = '65000:100' - esi = 0 # denotes single-homed - ethernet_tag_id = 200 - mac_addr = 'aa:bb:cc:dd:ee:ff' - ip_addr = '192.168.0.1' - next_hop = '10.0.0.1' - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - # 'esi': esi, # should be ignored - 'ethernet_tag_id': ethernet_tag_id, - # 'mac_addr': mac_addr, # should be ignored - 'ip_addr': ip_addr, - 'next_hop': next_hop, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - mac_addr=mac_addr, - ip_addr=ip_addr, - next_hop=next_hop, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', **expected_kwargs) - - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_multicast_etag_no_next_hop(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE - route_dist = '65000:100' - esi = 0 # denotes single-homed - ethernet_tag_id = 200 - mac_addr = 'aa:bb:cc:dd:ee:ff' - ip_addr = '192.168.0.1' - next_hop = '0.0.0.0' # the default value - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - # 'esi': esi, # should be ignored - 'ethernet_tag_id': ethernet_tag_id, - # 'mac_addr': mac_addr, # should be ignored - 'ip_addr': ip_addr, - 'next_hop': next_hop, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - mac_addr=mac_addr, - ip_addr=ip_addr, - # next_hop=next_hop, # omitted - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_eth_segment(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_ETH_SEGMENT - route_dist = '65000:100' - esi = { - 'type': ESI_TYPE_MAC_BASED, - 'mac_addr': 'aa:bb:cc:dd:ee:ff', - 'local_disc': 100, - } - ip_addr = '192.168.0.1' - next_hop = '0.0.0.0' - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'esi': esi, - 'ip_addr': ip_addr, - 'next_hop': next_hop, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ip_addr=ip_addr, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_ip_prefix_route(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_IP_PREFIX_ROUTE - route_dist = '65000:100' - esi = 0 # denotes single-homed - ethernet_tag_id = 200 - ip_prefix = '192.168.0.0/24' - gw_ip_addr = '172.16.0.1' - next_hop = '0.0.0.0' - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'esi': esi, - 'ethernet_tag_id': ethernet_tag_id, - 'ip_prefix': ip_prefix, - 'gw_ip_addr': gw_ip_addr, - 'next_hop': next_hop, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - ip_prefix=ip_prefix, - gw_ip_addr=gw_ip_addr, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_ip_prefix_route_vni(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_IP_PREFIX_ROUTE - route_dist = '65000:100' - esi = 0 # denotes single-homed - ethernet_tag_id = 200 - ip_prefix = '192.168.0.0/24' - gw_ip_addr = '172.16.0.1' - vni = 500 - tunnel_type = bgpspeaker.TUNNEL_TYPE_VXLAN - next_hop = '0.0.0.0' - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'esi': esi, - 'ethernet_tag_id': ethernet_tag_id, - 'ip_prefix': ip_prefix, - 'gw_ip_addr': gw_ip_addr, - 'tunnel_type': tunnel_type, - 'vni': vni, - 'next_hop': next_hop, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - ip_prefix=ip_prefix, - gw_ip_addr=gw_ip_addr, - tunnel_type=tunnel_type, - vni=vni, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', **expected_kwargs) - - @raises(ValueError) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_invalid_route_type(self, mock_call): - # Prepare test data - route_type = 'foobar' # Invalid EVPN route type - route_dist = '65000:100' - esi = 0 # denotes single-homed - ethernet_tag_id = 200 - mac_addr = 'aa:bb:cc:dd:ee:ff' - ip_addr = '192.168.0.1' - next_hop = '10.0.0.1' - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - mac_addr=mac_addr, - ip_addr=ip_addr, - next_hop=next_hop, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', 'Invalid arguments detected') - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_del_auto_discovery(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_ETH_AUTO_DISCOVERY - route_dist = '65000:100' - esi = { - 'type': ESI_TYPE_LACP, - 'mac_addr': 'aa:bb:cc:dd:ee:ff', - 'port_key': 100, - } - ethernet_tag_id = EVPN_MAX_ET - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'esi': esi, - 'ethernet_tag_id': ethernet_tag_id, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_del( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.delete_local', **expected_kwargs) - - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_del_mac_ip_adv(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_MAC_IP_ADV_ROUTE - route_dist = '65000:100' - ethernet_tag_id = 200 - mac_addr = 'aa:bb:cc:dd:ee:ff' - ip_addr = '192.168.0.1' - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'ethernet_tag_id': ethernet_tag_id, - 'mac_addr': mac_addr, - 'ip_addr': ip_addr, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_del( - route_type=route_type, - route_dist=route_dist, - ethernet_tag_id=ethernet_tag_id, - mac_addr=mac_addr, - ip_addr=ip_addr, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.delete_local', **expected_kwargs) - - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_del_multicast_etag(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE - route_dist = '65000:100' - esi = 0 # denotes single-homed - ethernet_tag_id = 200 - mac_addr = 'aa:bb:cc:dd:ee:ff' - ip_addr = '192.168.0.1' - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - # 'esi': esi, # should be ignored - 'ethernet_tag_id': ethernet_tag_id, - # 'mac_addr': mac_addr, # should be ignored - 'ip_addr': ip_addr, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_del( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - mac_addr=mac_addr, - ip_addr=ip_addr, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.delete_local', **expected_kwargs) - - @raises(ValueError) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_del_invalid_route_type(self, mock_call): - # Prepare test data - route_type = 'foobar' # Invalid EVPN route type - route_dist = '65000:100' - esi = 0 # denotes single-homed - ethernet_tag_id = 200 - mac_addr = 'aa:bb:cc:dd:ee:ff' - ip_addr = '192.168.0.1' - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_del( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ethernet_tag_id=ethernet_tag_id, - mac_addr=mac_addr, - ip_addr=ip_addr, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.delete_local', 'Invalid arguments detected') - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_del_eth_segment(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_ETH_SEGMENT - route_dist = '65000:100' - esi = { - 'esi_type': ESI_TYPE_MAC_BASED, - 'mac_addr': 'aa:bb:cc:dd:ee:ff', - 'local_disc': 100, - } - ip_addr = '192.168.0.1' - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'esi': esi, - 'ip_addr': ip_addr, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_del( - route_type=route_type, - route_dist=route_dist, - esi=esi, - ip_addr=ip_addr, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.delete_local', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_del_ip_prefix_route(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_IP_PREFIX_ROUTE - route_dist = '65000:100' - ethernet_tag_id = 200 - ip_prefix = '192.168.0.0/24' - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'ethernet_tag_id': ethernet_tag_id, - 'ip_prefix': ip_prefix, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_del( - route_type=route_type, - route_dist=route_dist, - ethernet_tag_id=ethernet_tag_id, - ip_prefix=ip_prefix, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.delete_local', **expected_kwargs) - - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_pmsi_no_tunnel_info(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE - route_dist = '65000:100' - ethernet_tag_id = 200 - next_hop = '0.0.0.0' - ip_addr = '192.168.0.1' - pmsi_tunnel_type = bgpspeaker.PMSI_TYPE_NO_TUNNEL_INFO - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'ethernet_tag_id': ethernet_tag_id, - 'next_hop': next_hop, - 'ip_addr': ip_addr, - 'pmsi_tunnel_type': pmsi_tunnel_type, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - ethernet_tag_id=ethernet_tag_id, - ip_addr=ip_addr, - pmsi_tunnel_type=pmsi_tunnel_type, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_pmsi_ingress_rep(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE - route_dist = '65000:100' - ethernet_tag_id = 200 - next_hop = '0.0.0.0' - ip_addr = '192.168.0.1' - pmsi_tunnel_type = bgpspeaker.PMSI_TYPE_INGRESS_REP - expected_kwargs = { - 'route_type': route_type, - 'route_dist': route_dist, - 'ethernet_tag_id': ethernet_tag_id, - 'next_hop': next_hop, - 'ip_addr': ip_addr, - 'pmsi_tunnel_type': pmsi_tunnel_type, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - ethernet_tag_id=ethernet_tag_id, - ip_addr=ip_addr, - pmsi_tunnel_type=pmsi_tunnel_type, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', **expected_kwargs) - - @raises(ValueError) - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_evpn_prefix_add_invalid_pmsi_tunnel_type(self, mock_call): - # Prepare test data - route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE - route_dist = '65000:100' - ethernet_tag_id = 200 - next_hop = '0.0.0.0' - ip_addr = '192.168.0.1' - pmsi_tunnel_type = 1 - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.evpn_prefix_add( - route_type=route_type, - route_dist=route_dist, - ethernet_tag_id=ethernet_tag_id, - ip_addr=ip_addr, - pmsi_tunnel_type=pmsi_tunnel_type, - ) - - # Check - mock_call.assert_called_with( - 'evpn_prefix.add_local', 'Invalid arguments detected') - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_add_ipv4(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV4 - rules = { - 'dst_prefix': '10.60.1.0/24', - } - - actions = { - 'traffic_marking': { - 'dscp': 24, - } - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'rules': rules, - 'actions': actions, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_add( - flowspec_family=flowspec_family, - rules=rules, - actions=actions) - - # Check - mock_call.assert_called_with( - 'flowspec.add', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_add_ipv4_without_actions(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV4 - rules = { - 'dst_prefix': '10.60.1.0/24', - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'rules': rules, - 'actions': {}, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_add( - flowspec_family=flowspec_family, - rules=rules) - - # Check - mock_call.assert_called_with( - 'flowspec.add', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_del_ipv4(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV4 - rules = { - 'dst_prefix': '10.60.1.0/24', - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'rules': rules, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_del( - flowspec_family=flowspec_family, - rules=rules) - - # Check - mock_call.assert_called_with( - 'flowspec.del', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_add_vpnv4(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_VPNV4 - route_dist = '65001:100' - rules = { - 'dst_prefix': '10.70.1.0/24', - } - - actions = { - 'traffic_marking': { - 'dscp': 24, - } - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'route_dist': route_dist, - 'rules': rules, - 'actions': actions, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_add( - flowspec_family=flowspec_family, - route_dist=route_dist, - rules=rules, - actions=actions) - - # Check - mock_call.assert_called_with( - 'flowspec.add_local', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_del_vpnv4(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_VPNV4 - route_dist = '65001:100' - rules = { - 'dst_prefix': '10.70.1.0/24', - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'route_dist': route_dist, - 'rules': rules, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_del( - flowspec_family=flowspec_family, - route_dist=route_dist, - rules=rules) - - # Check - mock_call.assert_called_with( - 'flowspec.del_local', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_add_ipv6(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV6 - rules = { - 'dst_prefix': '2001::3/128/32', - } - - actions = { - 'traffic_marking': { - 'dscp': 24, - } - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'rules': rules, - 'actions': actions, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_add( - flowspec_family=flowspec_family, - rules=rules, - actions=actions) - - # Check - mock_call.assert_called_with( - 'flowspec.add', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_add_ipv6_without_actions(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV6 - rules = { - 'dst_prefix': '2001::3/128/32', - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'rules': rules, - 'actions': {}, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_add( - flowspec_family=flowspec_family, - rules=rules) - - # Check - mock_call.assert_called_with( - 'flowspec.add', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_del_ipv6(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV6 - rules = { - 'dst_prefix': '2001::3/128/32', - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'rules': rules, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_del( - flowspec_family=flowspec_family, - rules=rules) - - # Check - mock_call.assert_called_with( - 'flowspec.del', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_add_vpnv6(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_VPNV6 - route_dist = '65001:100' - rules = { - 'dst_prefix': '2001::3/128/32', - } - - actions = { - 'traffic_marking': { - 'dscp': 24, - } - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'route_dist': route_dist, - 'rules': rules, - 'actions': actions, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_add( - flowspec_family=flowspec_family, - route_dist=route_dist, - rules=rules, - actions=actions) - - # Check - mock_call.assert_called_with( - 'flowspec.add_local', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_del_vpnv6(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_VPNV6 - route_dist = '65001:100' - rules = { - 'dst_prefix': '2001::3/128/32', - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'route_dist': route_dist, - 'rules': rules, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_del( - flowspec_family=flowspec_family, - route_dist=route_dist, - rules=rules) - - # Check - mock_call.assert_called_with( - 'flowspec.del_local', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_add_l2vpn(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_L2VPN - route_dist = '65001:100' - rules = { - 'dst_mac': '12:34:56:78:9a:bc', - } - - actions = { - 'traffic_marking': { - 'dscp': 24, - } - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'route_dist': route_dist, - 'rules': rules, - 'actions': actions, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_add( - flowspec_family=flowspec_family, - route_dist=route_dist, - rules=rules, - actions=actions) - - # Check - mock_call.assert_called_with( - 'flowspec.add_local', **expected_kwargs) - - @mock.patch( - 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', - mock.MagicMock(return_value=None)) - @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') - def test_flowspec_prefix_del_l2vpn(self, mock_call): - # Prepare test data - flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_L2VPN - route_dist = '65001:100' - rules = { - 'dst_mac': '12:34:56:78:9a:bc', - } - - expected_kwargs = { - 'flowspec_family': flowspec_family, - 'route_dist': route_dist, - 'rules': rules, - } - - # Test - speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') - speaker.flowspec_prefix_del( - flowspec_family=flowspec_family, - route_dist=route_dist, - rules=rules) - - # Check - mock_call.assert_called_with( - 'flowspec.del_local', **expected_kwargs) diff --git a/ryu/tests/unit/services/protocols/bgp/test_peer.py b/ryu/tests/unit/services/protocols/bgp/test_peer.py deleted file mode 100644 index 1597efdb..00000000 --- a/ryu/tests/unit/services/protocols/bgp/test_peer.py +++ /dev/null @@ -1,375 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -import logging -try: - import mock # Python 2 -except ImportError: - from unittest import mock # Python 3 - -from nose.tools import eq_ - -from ryu.lib.packet import bgp -from ryu.services.protocols.bgp import peer - - -LOG = logging.getLogger(__name__) - - -class Test_Peer(unittest.TestCase): - """ - Test case for peer.Peer - """ - - @mock.patch.object( - peer.Peer, '__init__', mock.MagicMock(return_value=None)) - def _test_construct_as_path_attr( - self, input_as_path, input_as4_path, expected_as_path): - # Prepare input data - input_as_path_attr = bgp.BGPPathAttributeAsPath(input_as_path) - input_as4_path_attr = bgp.BGPPathAttributeAs4Path(input_as4_path) - _peer = peer.Peer(None, None, None, None, None) - - # TEST - output_as_path_attr = _peer._construct_as_path_attr( - input_as_path_attr, input_as4_path_attr) - - eq_(bgp.BGP_ATTR_TYPE_AS_PATH, output_as_path_attr.type) - eq_(expected_as_path, output_as_path_attr.path_seg_list) - - def test_construct_as_path_attr_sequence_only(self): - # Test Data - # Input: - input_as_path = [[65000, 4000, 23456, 23456, 40001]] - input_as4_path = [[400000, 300000, 40001]] - # Expected: - expected_as_path = [[65000, 4000, 400000, 300000, 40001]] - - self._test_construct_as_path_attr( - input_as_path, input_as4_path, expected_as_path) - - def test_construct_as_path_attr_aggregated_as_path_1(self): - # Test Data - # Input: - input_as_path = [[65000, 4000], {10, 20, 30}, [23456, 23456, 40001]] - input_as4_path = [[400000, 300000, 40001]] - # Expected: - expected_as_path = [[65000, 4000], {10, 20, 30}, [400000, 300000, 40001]] - - self._test_construct_as_path_attr( - input_as_path, input_as4_path, expected_as_path) - - def test_construct_as_path_attr_aggregated_as_path_2(self): - # Test Data - # Input: - input_as_path = [[65000, 4000], {10, 20, 30}, [23456, 23456, 40001]] - input_as4_path = [[3000, 400000, 300000, 40001]] - # Expected: - expected_as_path = [[65000, 4000, 3000, 400000, 300000, 40001]] - - self._test_construct_as_path_attr( - input_as_path, input_as4_path, expected_as_path) - - def test_construct_as_path_attr_aggregated_path_3(self): - # Test Data - # Input: - input_as_path = [[65000, 4000, 23456, 23456, 40001]] - input_as4_path = [[400000, 300000, 40001], {10, 20, 30}] - # Expected: - expected_as_path = [[65000, 400000, 300000, 40001], {10, 20, 30}] - - self._test_construct_as_path_attr( - input_as_path, input_as4_path, expected_as_path) - - def test_construct_as_path_attr_aggregated_as4_path(self): - # Test Data - # Input: - input_as_path = [[65000, 4000, 23456, 23456, 40001]] - input_as4_path = [{10, 20, 30}, [400000, 300000, 40001]] - # Expected: - expected_as_path = [[65000], {10, 20, 30}, [400000, 300000, 40001]] - - self._test_construct_as_path_attr( - input_as_path, input_as4_path, expected_as_path) - - def test_construct_as_path_attr_too_short_as_path(self): - # Test Data - # Input: - input_as_path = [[65000, 4000, 23456, 23456, 40001]] - input_as4_path = [[100000, 65000, 4000, 400000, 300000, 40001]] - # Expected: - expected_as_path = [[65000, 4000, 23456, 23456, 40001]] - - self._test_construct_as_path_attr( - input_as_path, input_as4_path, expected_as_path) - - def test_construct_as_path_attr_too_short_as4_path(self): - # Test Data - # Input: - input_as_path = [[65000, 4000, 23456, 23456, 40001]] - input_as4_path = [[300000, 40001]] - # Expected: - expected_as_path = [[65000, 4000, 23456, 300000, 40001]] - - self._test_construct_as_path_attr( - input_as_path, input_as4_path, expected_as_path) - - def test_construct_as_path_attr_empty_as4_path(self): - # Test Data - # Input: - input_as_path = [[65000, 4000, 23456, 23456, 40001]] - input_as4_path = [[]] - # Expected: - expected_as_path = [[65000, 4000, 23456, 23456, 40001]] - - self._test_construct_as_path_attr( - input_as_path, input_as4_path, expected_as_path) - - @mock.patch.object( - peer.Peer, '__init__', mock.MagicMock(return_value=None)) - def test_construct_as_path_attr_as4_path_None(self): - # Test Data - # Input: - input_as_path = [[65000, 4000, 23456, 23456, 40001]] - # input_as4_path = None - # Expected: - expected_as_path = [[65000, 4000, 23456, 23456, 40001]] - - # Prepare input data - input_as_path_attr = bgp.BGPPathAttributeAsPath(input_as_path) - input_as4_path_attr = None - _peer = peer.Peer(None, None, None, None, None) - - # TEST - output_as_path_attr = _peer._construct_as_path_attr( - input_as_path_attr, input_as4_path_attr) - - eq_(bgp.BGP_ATTR_TYPE_AS_PATH, output_as_path_attr.type) - eq_(expected_as_path, output_as_path_attr.path_seg_list) - - @mock.patch.object( - peer.Peer, '__init__', mock.MagicMock(return_value=None)) - def _test_trans_as_path( - self, input_as_path, expected_as_path, expected_as4_path): - # Prepare input data - _peer = peer.Peer(None, None, None, None, None) - - # TEST - output_as_path, output_as4_path = _peer._trans_as_path(input_as_path) - - eq_(expected_as_path, output_as_path) - eq_(expected_as4_path, output_as4_path) - - @mock.patch.object( - peer.Peer, 'is_four_octet_as_number_cap_valid', - mock.MagicMock(return_value=True)) - def test_trans_as_path_as4_path_is_supported(self): - # Test Data - # Input: - input_as_path = [[65000, 4000, 400000, 300000, 40001]] - # Expected: - expected_as_path = [[65000, 4000, 400000, 300000, 40001]] - expected_as4_path = None - - self._test_trans_as_path( - input_as_path, expected_as_path, expected_as4_path) - - @mock.patch.object( - peer.Peer, 'is_four_octet_as_number_cap_valid', - mock.MagicMock(return_value=False)) - def test_trans_as_path_sequence_only(self): - # Test Data - # Input: - input_as_path = [[65000, 4000, 400000, 300000, 40001]] - # Expected: - expected_as_path = [[65000, 4000, 23456, 23456, 40001]] - expected_as4_path = [[65000, 4000, 400000, 300000, 40001]] - - self._test_trans_as_path( - input_as_path, expected_as_path, expected_as4_path) - - @mock.patch.object( - peer.Peer, 'is_four_octet_as_number_cap_valid', - mock.MagicMock(return_value=False)) - def test_trans_as_path_no_trans(self): - # Test Data - # Input: - input_as_path = [[65000, 4000, 40000, 30000, 40001]] - # Expected: - expected_as_path = [[65000, 4000, 40000, 30000, 40001]] - expected_as4_path = None - - self._test_trans_as_path( - input_as_path, expected_as_path, expected_as4_path) - - @mock.patch.object( - peer.Peer, '__init__', mock.MagicMock(return_value=None)) - def _test_extract_and_reconstruct_as_path( - self, path_attributes, ex_as_path_value, - ex_aggregator_as_number, ex_aggregator_addr): - # Prepare test data - update_msg = bgp.BGPUpdate(path_attributes=path_attributes) - _peer = peer.Peer(None, None, None, None, None) - - # Test - _peer._extract_and_reconstruct_as_path(update_msg) - - umsg_pattrs = update_msg.pathattr_map - as_path_attr = umsg_pattrs.get( - bgp.BGP_ATTR_TYPE_AS_PATH, None) - as4_path_attr = umsg_pattrs.get( - bgp.BGP_ATTR_TYPE_AS4_PATH, None) - aggregator_attr = umsg_pattrs.get( - bgp.BGP_ATTR_TYPE_AGGREGATOR, None) - as4_aggregator_attr = umsg_pattrs.get( - bgp.BGP_ATTR_TYPE_AS4_AGGREGATOR, None) - - eq_(ex_as_path_value, as_path_attr.value) - eq_(None, as4_path_attr) - eq_(ex_aggregator_as_number, aggregator_attr.as_number) - eq_(ex_aggregator_addr, aggregator_attr.addr) - eq_(None, as4_aggregator_attr) - - @mock.patch.object( - peer.Peer, '__init__', mock.MagicMock(return_value=None)) - def test_extract_and_reconstruct_as_path_with_no_as4_attr(self): - # Input values - in_as_path_value = [[1000, 2000, 3000]] - # in_as4_path_value - in_aggregator_as_number = 4000 - in_aggregator_addr = '10.0.0.1' - # in_as4_aggregator_as_number - # in_as4_aggregator_addr - - # Expected values - ex_as_path_value = [[1000, 2000, 3000]] - ex_aggregator_as_number = 4000 - ex_aggregator_addr = '10.0.0.1' - - # Prepare test data - path_attributes = [ - bgp.BGPPathAttributeAsPath( - value=in_as_path_value), - bgp.BGPPathAttributeAggregator( - as_number=in_aggregator_as_number, addr=in_aggregator_addr), - ] - - # Test - self._test_extract_and_reconstruct_as_path( - path_attributes, ex_as_path_value, - ex_aggregator_as_number, ex_aggregator_addr) - - @mock.patch.object( - peer.Peer, '__init__', mock.MagicMock(return_value=None)) - def test_extract_and_reconstruct_as_path_with_as4_attr(self): - # Input values - in_as_path_value = [[1000, 23456, 3000]] - in_as4_path_value = [[2000, 3000]] - in_aggregator_as_number = 23456 - in_aggregator_addr = '10.0.0.1' - in_as4_aggregator_as_number = 4000 - in_as4_aggregator_addr = '10.0.0.1' - - # Expected values - ex_as_path_value = [[1000, 2000, 3000]] - ex_aggregator_as_number = 4000 - ex_aggregator_addr = '10.0.0.1' - - # Prepare test data - path_attributes = [ - bgp.BGPPathAttributeAsPath( - value=in_as_path_value), - bgp.BGPPathAttributeAs4Path( - value=in_as4_path_value), - bgp.BGPPathAttributeAggregator( - as_number=in_aggregator_as_number, - addr=in_aggregator_addr), - bgp.BGPPathAttributeAs4Aggregator( - as_number=in_as4_aggregator_as_number, - addr=in_as4_aggregator_addr), - ] - - # Test - self._test_extract_and_reconstruct_as_path( - path_attributes, ex_as_path_value, - ex_aggregator_as_number, ex_aggregator_addr) - - @mock.patch.object( - peer.Peer, '__init__', mock.MagicMock(return_value=None)) - def test_extract_and_reconstruct_as_path_with_not_trans_as_aggr(self): - # Input values - in_as_path_value = [[1000, 23456, 3000]] - in_as4_path_value = [[2000, 3000]] - in_aggregator_as_number = 4000 # not AS_TRANS - in_aggregator_addr = '10.0.0.1' - in_as4_aggregator_as_number = 4000 - in_as4_aggregator_addr = '10.0.0.1' - - # Expected values - ex_as_path_value = [[1000, 23456, 3000]] - ex_aggregator_as_number = 4000 - ex_aggregator_addr = '10.0.0.1' - - # Prepare test data - path_attributes = [ - bgp.BGPPathAttributeAsPath( - value=in_as_path_value), - bgp.BGPPathAttributeAs4Path( - value=in_as4_path_value), - bgp.BGPPathAttributeAggregator( - as_number=in_aggregator_as_number, - addr=in_aggregator_addr), - bgp.BGPPathAttributeAs4Aggregator( - as_number=in_as4_aggregator_as_number, - addr=in_as4_aggregator_addr), - ] - - # Test - self._test_extract_and_reconstruct_as_path( - path_attributes, ex_as_path_value, - ex_aggregator_as_number, ex_aggregator_addr) - - @mock.patch.object( - peer.Peer, '__init__', mock.MagicMock(return_value=None)) - def test_extract_and_reconstruct_as_path_with_short_as_path(self): - # Input values - in_as_path_value = [[1000, 23456, 3000]] - in_as4_path_value = [[2000, 3000, 4000, 5000]] # longer than AS_PATH - in_aggregator_as_number = 4000 - in_aggregator_addr = '10.0.0.1' - # in_as4_aggregator_as_number - # in_as4_aggregator_addr - - # Expected values - ex_as_path_value = [[1000, 23456, 3000]] - ex_aggregator_as_number = 4000 - ex_aggregator_addr = '10.0.0.1' - - # Prepare test data - path_attributes = [ - bgp.BGPPathAttributeAsPath( - value=in_as_path_value), - bgp.BGPPathAttributeAs4Path( - value=in_as4_path_value), - bgp.BGPPathAttributeAggregator( - as_number=in_aggregator_as_number, - addr=in_aggregator_addr), - ] - - # Test - self._test_extract_and_reconstruct_as_path( - path_attributes, ex_as_path_value, - ex_aggregator_as_number, ex_aggregator_addr) diff --git a/ryu/tests/unit/services/protocols/bgp/utils/__init__.py b/ryu/tests/unit/services/protocols/bgp/utils/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/ryu/tests/unit/services/protocols/bgp/utils/test_bgp.py b/ryu/tests/unit/services/protocols/bgp/utils/test_bgp.py deleted file mode 100644 index 6933a28b..00000000 --- a/ryu/tests/unit/services/protocols/bgp/utils/test_bgp.py +++ /dev/null @@ -1,211 +0,0 @@ -# Copyright (C) 2017 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - - -import logging -import unittest - -from nose.tools import eq_, raises - -from ryu.lib.packet.bgp import ( - BGPFlowSpecTrafficRateCommunity, - BGPFlowSpecTrafficActionCommunity, - BGPFlowSpecRedirectCommunity, - BGPFlowSpecTrafficMarkingCommunity, - BGPFlowSpecVlanActionCommunity, - BGPFlowSpecTPIDActionCommunity, -) - -from ryu.services.protocols.bgp.core import BgpCoreError -from ryu.services.protocols.bgp.utils.bgp import create_v4flowspec_actions -from ryu.services.protocols.bgp.utils.bgp import create_v6flowspec_actions -from ryu.services.protocols.bgp.utils.bgp import create_l2vpnflowspec_actions - - -LOG = logging.getLogger(__name__) - - -class Test_Utils_BGP(unittest.TestCase): - """ - Test case for ryu.services.protocols.bgp.utils.bgp - """ - - def _test_create_v4flowspec_actions(self, actions, expected_communities): - communities = create_v4flowspec_actions(actions) - expected_communities.sort(key=lambda x: x.subtype) - communities.sort(key=lambda x: x.subtype) - eq_(str(expected_communities), str(communities)) - - def test_create_v4flowspec_actions_all_actions(self): - actions = { - 'traffic_rate': { - 'as_number': 0, - 'rate_info': 100.0, - }, - 'traffic_action': { - 'action': 3, - }, - 'redirect': { - 'as_number': 10, - 'local_administrator': 10, - }, - 'traffic_marking': { - 'dscp': 24, - } - } - expected_communities = [ - BGPFlowSpecTrafficRateCommunity(as_number=0, rate_info=100.0), - BGPFlowSpecTrafficActionCommunity(action=3), - BGPFlowSpecRedirectCommunity(as_number=10, local_administrator=10), - BGPFlowSpecTrafficMarkingCommunity(dscp=24), - ] - self._test_create_v4flowspec_actions(actions, expected_communities) - - def test_create_v4flowspec_actions_without_actions(self): - actions = None - expected_communities = [] - self._test_create_v4flowspec_actions(actions, expected_communities) - - @raises(ValueError) - def test_create_v4flowspec_actions_not_exist_actions(self): - actions = { - 'traffic_test': { - 'test': 10, - }, - } - expected_communities = [] - self._test_create_v4flowspec_actions(actions, expected_communities) - - def _test_create_v6flowspec_actions(self, actions, expected_communities): - communities = create_v6flowspec_actions(actions) - expected_communities.sort(key=lambda x: x.subtype) - communities.sort(key=lambda x: x.subtype) - eq_(str(expected_communities), str(communities)) - - def test_create_v6flowspec_actions_all_actions(self): - actions = { - 'traffic_rate': { - 'as_number': 0, - 'rate_info': 100.0, - }, - 'traffic_action': { - 'action': 3, - }, - 'redirect': { - 'as_number': 10, - 'local_administrator': 10, - }, - 'traffic_marking': { - 'dscp': 24, - } - } - expected_communities = [ - BGPFlowSpecTrafficRateCommunity(as_number=0, rate_info=100.0), - BGPFlowSpecTrafficActionCommunity(action=3), - BGPFlowSpecRedirectCommunity(as_number=10, local_administrator=10), - BGPFlowSpecTrafficMarkingCommunity(dscp=24), - ] - self._test_create_v6flowspec_actions(actions, expected_communities) - - def test_create_v6flowspec_actions_without_actions(self): - actions = None - expected_communities = [] - self._test_create_v6flowspec_actions(actions, expected_communities) - - @raises(ValueError) - def test_create_v6flowspec_actions_not_exist_actions(self): - actions = { - 'traffic_test': { - 'test': 10, - }, - } - expected_communities = [] - self._test_create_v6flowspec_actions(actions, expected_communities) - - def _test_create_l2vpnflowspec_actions(self, actions, expected_communities): - communities = create_l2vpnflowspec_actions(actions) - expected_communities.sort(key=lambda x: x.subtype) - communities.sort(key=lambda x: x.subtype) - eq_(str(expected_communities), str(communities)) - - def test_create_l2vpnflowspec_actions_all_actions(self): - actions = { - 'traffic_rate': { - 'as_number': 0, - 'rate_info': 100.0, - }, - 'traffic_action': { - 'action': 3, - }, - 'redirect': { - 'as_number': 10, - 'local_administrator': 10, - }, - 'traffic_marking': { - 'dscp': 24, - }, - 'vlan_action': { - 'actions_1': (BGPFlowSpecVlanActionCommunity.POP | - BGPFlowSpecVlanActionCommunity.SWAP), - 'vlan_1': 3000, - 'cos_1': 3, - 'actions_2': BGPFlowSpecVlanActionCommunity.PUSH, - 'vlan_2': 4000, - 'cos_2': 2, - }, - 'tpid_action': { - 'actions': (BGPFlowSpecTPIDActionCommunity.TI | - BGPFlowSpecTPIDActionCommunity.TO), - 'tpid_1': 5, - 'tpid_2': 6, - } - } - expected_communities = [ - BGPFlowSpecTrafficRateCommunity(as_number=0, rate_info=100.0), - BGPFlowSpecTrafficActionCommunity(action=3), - BGPFlowSpecRedirectCommunity(as_number=10, local_administrator=10), - BGPFlowSpecTrafficMarkingCommunity(dscp=24), - BGPFlowSpecVlanActionCommunity( - actions_1=(BGPFlowSpecVlanActionCommunity.POP | - BGPFlowSpecVlanActionCommunity.SWAP), - vlan_1=3000, - cos_1=3, - actions_2=BGPFlowSpecVlanActionCommunity.PUSH, - vlan_2=4000, - cos_2=2, - ), - BGPFlowSpecTPIDActionCommunity( - actions=(BGPFlowSpecTPIDActionCommunity.TI | - BGPFlowSpecTPIDActionCommunity.TO), - tpid_1=5, - tpid_2=6, - ), - ] - self._test_create_l2vpnflowspec_actions(actions, expected_communities) - - def test_create_l2vpnflowspec_actions_without_actions(self): - actions = None - expected_communities = [] - self._test_create_l2vpnflowspec_actions(actions, expected_communities) - - @raises(ValueError) - def test_create_l2vpnflowspec_actions_not_exist_actions(self): - actions = { - 'traffic_test': { - 'test': 10, - }, - } - expected_communities = [] - self._test_create_l2vpnflowspec_actions(actions, expected_communities) diff --git a/ryu/tests/unit/services/protocols/bgp/utils/test_validation.py b/ryu/tests/unit/services/protocols/bgp/utils/test_validation.py deleted file mode 100644 index 6d5f6ac3..00000000 --- a/ryu/tests/unit/services/protocols/bgp/utils/test_validation.py +++ /dev/null @@ -1,215 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import unittest - -from nose.tools import eq_, ok_ - -from ryu.services.protocols.bgp.utils import validation - - -LOG = logging.getLogger(__name__) - - -class Test_Utils_Validation(unittest.TestCase): - """ - Test case for ryu.services.protocols.bgp.utils.validation - """ - - def test_is_valid_mac(self): - ok_(validation.is_valid_mac('aa:bb:cc:dd:ee:ff')) - - def test_is_valid_mac_hyphenation(self): - ok_(validation.is_valid_mac('aa-bb-cc-dd-ee-ff')) - - def test_is_valid_mac_short(self): - eq_(False, validation.is_valid_mac('aa:bb:cc:dd:ee')) - - def test_is_valid_ip_prefix(self): - ok_(validation.is_valid_ip_prefix(24, 32)) - - def test_is_valid_ip_prefix_str(self): - ok_(validation.is_valid_ip_prefix('24', 32)) - - def test_is_valid_ip_prefix_not_digit(self): - eq_(False, validation.is_valid_ip_prefix('foo', 32)) - - def test_is_valid_ip_prefix_over(self): - eq_(False, validation.is_valid_ip_prefix(100, 32)) - - def test_is_valid_ipv4(self): - ok_(validation.is_valid_ipv4('10.0.0.1')) - - def test_is_valid_ipv4_not_dot(self): - eq_(False, validation.is_valid_ipv4('192:168:0:1')) - - def test_is_valid_ipv4_prefix(self): - ok_(validation.is_valid_ipv4_prefix('10.0.0.1/24')) - - def test_is_valid_ipv4_prefix_not_str(self): - eq_(False, validation.is_valid_ipv4_prefix(1234)) - - def test_is_valid_ipv4_prefix_without_prefix(self): - eq_(False, validation.is_valid_ipv4_prefix('10.0.0.1')) - - def test_is_valid_ipv4_prefix_invalid_addr(self): - eq_(False, validation.is_valid_ipv4_prefix('xxx.xxx.xxx.xxx/24')) - - def test_is_valid_ipv6(self): - ok_(validation.is_valid_ipv6('fe80::0011:aabb:ccdd:eeff')) - - def test_is_valid_ipv6_not_colon(self): - eq_(False, validation.is_valid_ipv6('fe80--0011-aabb-ccdd-eeff')) - - def test_is_valid_ipv6_prefix(self): - ok_(validation.is_valid_ipv6_prefix('fe80::0011:aabb:ccdd:eeff/64')) - - def test_is_valid_ipv6_prefix_not_str(self): - eq_(False, validation.is_valid_ipv6_prefix(1234)) - - def test_is_valid_ipv6_prefix_without_prefix(self): - eq_(False, - validation.is_valid_ipv6_prefix('fe80::0011:aabb:ccdd:eeff')) - - def test_is_valid_ipv6_prefix_invalid_addr(self): - eq_(False, validation.is_valid_ipv6_prefix('xxxx::xxxx/64')) - - def test_is_valid_old_asn(self): - ok_(validation.is_valid_old_asn(65000)) - - def test_is_valid_old_asn_negative(self): - eq_(False, validation.is_valid_old_asn(-1)) - - def test_is_valid_old_asn_over(self): - eq_(False, validation.is_valid_old_asn(0xffff + 1)) - - def test_is_valid_asn(self): - ok_(validation.is_valid_asn(6553800)) - - def test_is_valid_asn_old(self): - ok_(validation.is_valid_asn(65000)) - - def test_is_valid_asn_negative(self): - eq_(False, validation.is_valid_asn(-1)) - - def test_is_valid_asn_over(self): - eq_(False, validation.is_valid_asn(0xffffffff + 1)) - - def test_is_valid_vpnv4_prefix(self): - ok_(validation.is_valid_vpnv4_prefix('100:200:10.0.0.1/24')) - - def test_is_valid_vpnv4_prefix_not_str(self): - eq_(False, validation.is_valid_vpnv4_prefix(1234)) - - def test_is_valid_vpnv4_prefix_short_rd(self): - eq_(False, validation.is_valid_vpnv4_prefix('100:10.0.0.1/24')) - - def test_is_valid_vpnv4_prefix_invalid_rd(self): - eq_(False, validation.is_valid_vpnv4_prefix('foo:bar:10.0.0.1/24')) - - def test_is_valid_vpnv6_prefix(self): - ok_(validation.is_valid_vpnv6_prefix( - '100:200:fe80::0011:aabb:ccdd:eeff/64')) - - def test_is_valid_vpnv6_prefix_not_str(self): - eq_(False, validation.is_valid_vpnv6_prefix(1234)) - - def test_is_valid_vpnv6_prefix_short_rd(self): - eq_(False, validation.is_valid_vpnv6_prefix('100:eeff/64')) - - def test_is_valid_vpnv6_prefix_invalid_rd(self): - eq_(False, validation.is_valid_vpnv6_prefix('foo:bar:10.0.0.1/24')) - - def test_is_valid_med(self): - ok_(validation.is_valid_med(100)) - - def test_is_valid_med_not_num(self): - eq_(False, validation.is_valid_med('foo')) - - def test_is_valid_med_negative(self): - eq_(False, validation.is_valid_med(-1)) - - def test_is_valid_med_over(self): - eq_(False, validation.is_valid_med(0xffffffff + 1)) - - def test_is_valid_mpls_label(self): - ok_(validation.is_valid_mpls_label(100)) - - def test_is_valid_mpls_label_reserved(self): - eq_(False, validation.is_valid_mpls_label(4)) - - def test_is_valid_mpls_label_not_num(self): - eq_(False, validation.is_valid_mpls_label('foo')) - - def test_is_valid_mpls_label_negative(self): - eq_(False, validation.is_valid_mpls_label(-1)) - - def test_is_valid_mpls_label_over(self): - eq_(False, validation.is_valid_mpls_label(0x100000 + 1)) - - def test_is_valid_mpls_labels(self): - ok_(validation.is_valid_mpls_labels([100, 200])) - - def test_is_valid_mpls_labels_not_list(self): - eq_(False, validation.is_valid_mpls_labels(100)) - - def test_is_valid_mpls_labels_with_invalid_label(self): - eq_(False, validation.is_valid_mpls_labels(['foo', 200])) - - def test_is_valid_route_dist(self): - ok_(validation.is_valid_route_dist('65000:222')) - - def test_is_valid_route_dist_ipv4_based(self): - ok_(validation.is_valid_route_dist('10.0.0.1:333')) - - def test_is_valid_route_not_str(self): - eq_(False, validation.is_valid_route_dist(65000)) - - def test_is_valid_route_dist_short(self): - eq_(False, validation.is_valid_route_dist('65000')) - - def test_is_valid_route_dist_invalid_ipv4_addr(self): - eq_(False, validation.is_valid_route_dist('xxx.xxx.xxx.xxx:333')) - - def test_is_valid_esi(self): - ok_(validation.is_valid_esi(100)) - - def test_is_valid_esi_not_int(self): - eq_(False, validation.is_valid_esi('foo')) - - def test_is_valid_ethernet_tag_id(self): - ok_(validation.is_valid_ethernet_tag_id(100)) - - def test_is_valid_ethernet_tag_id_not_int(self): - eq_(False, validation.is_valid_ethernet_tag_id('foo')) - - def test_is_valid_ethernet_tag_id_negative(self): - eq_(False, validation.is_valid_ethernet_tag_id(-1)) - - def test_is_valid_ethernet_tag_id_over(self): - eq_(False, validation.is_valid_ethernet_tag_id(0xffffffff + 1)) - - def test_is_valid_vni(self): - ok_(validation.is_valid_vni(100)) - - def test_is_valid_vni_not_int(self): - eq_(False, validation.is_valid_vni('foo')) - - def test_is_valid_vni_negative(self): - eq_(False, validation.is_valid_vni(-1)) - - def test_is_valid_vni_over(self): - eq_(False, validation.is_valid_vni(0xffffff + 1)) diff --git a/ryu/tests/unit/test_requirements.py b/ryu/tests/unit/test_requirements.py deleted file mode 100644 index 7bfbd3f4..00000000 --- a/ryu/tests/unit/test_requirements.py +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -import os -import sys -import unittest - -import pkg_resources -from pip.req import parse_requirements -from pip.download import PipSession -from six.moves import urllib - -from nose.tools import ok_ - - -LOG = logging.getLogger(__name__) - -MOD_DIR = os.path.dirname(sys.modules[__name__].__file__) -_RYU_REQUIREMENTS_FILES = [ - '../../../tools/pip-requires', - '../../../tools/optional-requires', -] -RYU_REQUIREMENTS_FILES = [ - os.path.join(MOD_DIR, f) for f in _RYU_REQUIREMENTS_FILES] - -OPENSTACK_REQUIREMENTS_REPO = 'https://github.com/openstack/requirements' -OPENSTACK_REQUIREMENTS_URL = ( - 'https://github.com/openstack/requirements/raw/master/') -_OPENSTACK_REQUIREMENTS_FILES = [ - 'requirements.txt', - 'global-requirements.txt', -] -OPENSTACK_REQUIREMENTS_FILES = [ - urllib.parse.urljoin(OPENSTACK_REQUIREMENTS_URL, f) - for f in _OPENSTACK_REQUIREMENTS_FILES] - - -def _get_requirements(files): - requirements = {} - for f in files: - req = parse_requirements(f, session=PipSession()) - for r in req: - requirements[r.name] = str(r.req) - - return requirements - -OPENSTACK_REQUIREMENTS = _get_requirements(OPENSTACK_REQUIREMENTS_FILES) -RYU_REQUIREMENTS = _get_requirements(RYU_REQUIREMENTS_FILES) - - -class TestRequirements(unittest.TestCase): - """ - Test whether the requirements of Ryu has no conflict with that - of other projects. - """ - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_with_openstack_requirements(self): - try: - for name, req in OPENSTACK_REQUIREMENTS.items(): - if name in RYU_REQUIREMENTS: - ok_(pkg_resources.require(req)) - except pkg_resources.VersionConflict as e: - LOG.exception( - 'Some requirements of Ryu are conflicting with that of ' - 'OpenStack project: %s' % OPENSTACK_REQUIREMENTS_REPO) - raise e diff --git a/ryu/tests/unit/test_utils.py b/ryu/tests/unit/test_utils.py deleted file mode 100644 index 165f8acc..00000000 --- a/ryu/tests/unit/test_utils.py +++ /dev/null @@ -1,84 +0,0 @@ -# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or -# implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import unittest -import logging -import six -from nose.tools import eq_ - -from ryu import utils - -LOG = logging.getLogger(__name__) - - -class Test_utils(unittest.TestCase): - - def setUp(self): - pass - - def tearDown(self): - pass - - def test_hex_array_string(self): - """ - Test hex_array() with str type. - """ - expected_result = '0x01 0x02 0x03 0x04' - data = b'\x01\x02\x03\x04' - eq_(expected_result, utils.hex_array(data)) - - def test_hex_array_bytearray(self): - """ - Test hex_array() with bytearray type. - """ - expected_result = '0x01 0x02 0x03 0x04' - data = bytearray(b'\x01\x02\x03\x04') - eq_(expected_result, utils.hex_array(data)) - - def test_hex_array_bytes(self): - """ - Test hex_array() with bytes type. (Python3 only) - """ - if six.PY2: - return - expected_result = '0x01 0x02 0x03 0x04' - data = bytes(b'\x01\x02\x03\x04') - eq_(expected_result, utils.hex_array(data)) - - def test_binary_str_string(self): - """ - Test binary_str() with str type. - """ - expected_result = '\\x01\\x02\\x03\\x04' - data = b'\x01\x02\x03\x04' - eq_(expected_result, utils.binary_str(data)) - - def test_binary_str_bytearray(self): - """ - Test binary_str() with bytearray type. - """ - expected_result = '\\x01\\x02\\x03\\x04' - data = bytearray(b'\x01\x02\x03\x04') - eq_(expected_result, utils.binary_str(data)) - - def test_binary_str_bytes(self): - """ - Test binary_str() with bytes type. (Python3 only) - """ - if six.PY2: - return - expected_result = '\\x01\\x02\\x03\\x04' - data = bytes(b'\x01\x02\x03\x04') - eq_(expected_result, utils.binary_str(data)) diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/integrated/__init__.py b/tests/integrated/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/integrated/bgp/__init__.py b/tests/integrated/bgp/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/integrated/bgp/base.py b/tests/integrated/bgp/base.py new file mode 100644 index 00000000..9d057075 --- /dev/null +++ b/tests/integrated/bgp/base.py @@ -0,0 +1,84 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2016 Fumihiko Kakuma +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import + +import logging +import sys +import unittest + +from tests.integrated.common import docker_base as ctn_base +from tests.integrated.common import ryubgp +from tests.integrated.common import quagga + + +LOG = logging.getLogger(__name__) + + +class BgpSpeakerTestBase(unittest.TestCase): + images = [] + containers = [] + bridges = [] + checktime = 120 + + @classmethod + def setUpClass(cls): + cls.brdc1 = ctn_base.Bridge(name='brdc1', + subnet='192.168.10.0/24') + cls.bridges.append(cls.brdc1) + + cls.dockerimg = ctn_base.DockerImage() + image = 'python:%d.%d' % ( + sys.version_info.major, sys.version_info.minor) + cls.r_img = cls.dockerimg.create_ryu(image=image, check_exist=True) + cls.images.append(cls.r_img) + cls.q_img = 'osrg/quagga' + cls.images.append(cls.q_img) + + cls.r1 = ryubgp.RyuBGPContainer(name='r1', asn=64512, + router_id='192.168.0.1', + ctn_image_name=cls.r_img) + cls.containers.append(cls.r1) + cls.r1.add_route('10.10.0.0/28') + cls.r1.run(wait=True) + cls.r1_ip_cidr = cls.brdc1.addif(cls.r1) + cls.r1_ip = cls.r1_ip_cidr.split('/')[0] + + cls.q1 = quagga.QuaggaBGPContainer(name='q1', asn=64522, + router_id='192.168.0.2', + ctn_image_name=cls.q_img) + cls.containers.append(cls.q1) + cls.q1.add_route('192.168.160.0/24') + cls.q1.run(wait=True) + cls.q1_ip_cidr = cls.brdc1.addif(cls.q1) + cls.q1_ip = cls.q1_ip_cidr.split('/')[0] + + cls.r1.add_peer(cls.q1, bridge=cls.brdc1.name) + cls.q1.add_peer(cls.r1, bridge=cls.brdc1.name) + + super(BgpSpeakerTestBase, cls).setUpClass() + + @classmethod + def tearDownClass(cls): + for ctn in cls.containers: + try: + ctn.stop() + except ctn_base.CommandError as e: + LOG.exception('Exception when stopping containers: %s', e) + ctn.remove() + for br in cls.bridges: + br.delete() + super(BgpSpeakerTestBase, cls).tearDownClass() diff --git a/tests/integrated/bgp/base_ip6.py b/tests/integrated/bgp/base_ip6.py new file mode 100644 index 00000000..8d3ef419 --- /dev/null +++ b/tests/integrated/bgp/base_ip6.py @@ -0,0 +1,84 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2016 Fumihiko Kakuma +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import + +import logging +import sys +import unittest + +from tests.integrated.common import docker_base as ctn_base +from tests.integrated.common import ryubgp +from tests.integrated.common import quagga + + +LOG = logging.getLogger(__name__) + + +class BgpSpeakerTestBase(unittest.TestCase): + images = [] + containers = [] + bridges = [] + checktime = 120 + + @classmethod + def setUpClass(cls): + cls.brdc1 = ctn_base.Bridge(name='brip6dc1', + subnet='2001:10::/32') + cls.bridges.append(cls.brdc1) + + cls.dockerimg = ctn_base.DockerImage() + image = 'python:%d.%d' % ( + sys.version_info.major, sys.version_info.minor) + cls.r_img = cls.dockerimg.create_ryu(image=image, check_exist=True) + cls.images.append(cls.r_img) + cls.q_img = 'osrg/quagga' + cls.images.append(cls.q_img) + + cls.r1 = ryubgp.RyuBGPContainer(name='r1', asn=64512, + router_id='192.168.0.1', + ctn_image_name=cls.r_img) + cls.containers.append(cls.r1) + cls.r1.add_route('fc00:10::/64', route_info={'rf': 'ipv6'}) + cls.r1.run(wait=True) + cls.r1_ip_cidr = cls.brdc1.addif(cls.r1) + cls.r1_ip = cls.r1_ip_cidr.split('/')[0] + + cls.q1 = quagga.QuaggaBGPContainer(name='q1', asn=64522, + router_id='192.168.0.2', + ctn_image_name=cls.q_img) + cls.containers.append(cls.q1) + cls.q1.add_route('fc00:100::/64', route_info={'rf': 'ipv6'}) + cls.q1.run(wait=True) + cls.q1_ip_cidr = cls.brdc1.addif(cls.q1) + cls.q1_ip = cls.q1_ip_cidr.split('/')[0] + + cls.r1.add_peer(cls.q1, bridge=cls.brdc1.name, v6=True) + cls.q1.add_peer(cls.r1, bridge=cls.brdc1.name, v6=True) + + super(BgpSpeakerTestBase, cls).setUpClass() + + @classmethod + def tearDownClass(cls): + for ctn in cls.containers: + try: + ctn.stop() + except ctn_base.CommandError as e: + LOG.exception('Exception when stopping containers: %s', e) + ctn.remove() + for br in cls.bridges: + br.delete() + super(BgpSpeakerTestBase, cls).tearDownClass() diff --git a/tests/integrated/bgp/test_basic.py b/tests/integrated/bgp/test_basic.py new file mode 100644 index 00000000..9ef430c7 --- /dev/null +++ b/tests/integrated/bgp/test_basic.py @@ -0,0 +1,49 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2016 Fumihiko Kakuma +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import + +import time + +from tests.integrated.common import docker_base as ctn_base +from . import base + + +class BgpSpeakerBasicTest(base.BgpSpeakerTestBase): + def setUp(self): + super(BgpSpeakerBasicTest, self).setUp() + self.r1.stop_ryubgp(retry=True) + self.r1.start_ryubgp(retry=True) + + def test_check_neighbor_established(self): + neighbor_state = ctn_base.BGP_FSM_IDLE + for _ in range(0, self.checktime): + neighbor_state = self.q1.get_neighbor_state(self.r1) + if neighbor_state == ctn_base.BGP_FSM_ESTABLISHED: + break + time.sleep(1) + self.assertEqual(neighbor_state, ctn_base.BGP_FSM_ESTABLISHED) + + def test_check_rib_nexthop(self): + neighbor_state = ctn_base.BGP_FSM_IDLE + for _ in range(0, self.checktime): + neighbor_state = self.q1.get_neighbor_state(self.r1) + if neighbor_state == ctn_base.BGP_FSM_ESTABLISHED: + break + time.sleep(1) + self.assertEqual(neighbor_state, ctn_base.BGP_FSM_ESTABLISHED) + rib = self.q1.get_global_rib(prefix='10.10.0.0/28') + self.assertEqual(self.r1_ip, rib[0]['nexthop']) diff --git a/tests/integrated/bgp/test_ip6_basic.py b/tests/integrated/bgp/test_ip6_basic.py new file mode 100644 index 00000000..a92e4edb --- /dev/null +++ b/tests/integrated/bgp/test_ip6_basic.py @@ -0,0 +1,49 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2016 Fumihiko Kakuma +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import + +import time + +from tests.integrated.common import docker_base as ctn_base +from . import base_ip6 as base + + +class BgpSpeakerBasicTest(base.BgpSpeakerTestBase): + def setUp(self): + super(BgpSpeakerBasicTest, self).setUp() + self.r1.stop_ryubgp(retry=True) + self.r1.start_ryubgp(retry=True) + + def test_check_neighbor_established(self): + neighbor_state = ctn_base.BGP_FSM_IDLE + for _ in range(0, self.checktime): + neighbor_state = self.q1.get_neighbor_state(self.r1) + if neighbor_state == ctn_base.BGP_FSM_ESTABLISHED: + break + time.sleep(1) + self.assertEqual(neighbor_state, ctn_base.BGP_FSM_ESTABLISHED) + + def test_check_rib_nexthop(self): + neighbor_state = ctn_base.BGP_FSM_IDLE + for _ in range(0, self.checktime): + neighbor_state = self.q1.get_neighbor_state(self.r1) + if neighbor_state == ctn_base.BGP_FSM_ESTABLISHED: + break + time.sleep(1) + self.assertEqual(neighbor_state, ctn_base.BGP_FSM_ESTABLISHED) + rib = self.q1.get_global_rib(prefix='fc00:10::/64', rf='ipv6') + self.assertEqual(self.r1_ip, rib[0]['nexthop']) diff --git a/tests/integrated/common/__init__.py b/tests/integrated/common/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/integrated/common/docker_base.py b/tests/integrated/common/docker_base.py new file mode 100644 index 00000000..1ae2cc27 --- /dev/null +++ b/tests/integrated/common/docker_base.py @@ -0,0 +1,801 @@ +# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. +# +# This is based on the following +# https://github.com/osrg/gobgp/test/lib/base.py +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import + +import itertools +import logging +import os +import subprocess +import time + +import netaddr +import six + +LOG = logging.getLogger(__name__) + +DEFAULT_TEST_PREFIX = '' +DEFAULT_TEST_BASE_DIR = '/tmp/ctn_docker/bgp' +TEST_PREFIX = DEFAULT_TEST_PREFIX +TEST_BASE_DIR = DEFAULT_TEST_BASE_DIR + +BGP_FSM_IDLE = 'BGP_FSM_IDLE' +BGP_FSM_ACTIVE = 'BGP_FSM_ACTIVE' +BGP_FSM_ESTABLISHED = 'BGP_FSM_ESTABLISHED' + +BGP_ATTR_TYPE_ORIGIN = 1 +BGP_ATTR_TYPE_AS_PATH = 2 +BGP_ATTR_TYPE_NEXT_HOP = 3 +BGP_ATTR_TYPE_MULTI_EXIT_DISC = 4 +BGP_ATTR_TYPE_LOCAL_PREF = 5 +BGP_ATTR_TYPE_COMMUNITIES = 8 +BGP_ATTR_TYPE_ORIGINATOR_ID = 9 +BGP_ATTR_TYPE_CLUSTER_LIST = 10 +BGP_ATTR_TYPE_MP_REACH_NLRI = 14 +BGP_ATTR_TYPE_EXTENDED_COMMUNITIES = 16 + +BRIDGE_TYPE_DOCKER = 'docker' +BRIDGE_TYPE_BRCTL = 'brctl' +BRIDGE_TYPE_OVS = 'ovs' + + +class CommandError(Exception): + def __init__(self, out): + super(CommandError, self).__init__() + self.out = out + + +def try_several_times(f, t=3, s=1): + e = RuntimeError() + for _ in range(t): + try: + r = f() + except RuntimeError as e: + time.sleep(s) + else: + return r + raise e + + +class CmdBuffer(list): + def __init__(self, delim='\n'): + super(CmdBuffer, self).__init__() + self.delim = delim + + def __lshift__(self, value): + self.append(value) + + def __str__(self): + return self.delim.join(self) + + +class CommandOut(str): + + def __new__(cls, stdout, stderr, command, returncode, **kwargs): + stdout = stdout or '' + obj = super(CommandOut, cls).__new__(cls, stdout, **kwargs) + obj.stderr = stderr or '' + obj.command = command + obj.returncode = returncode + return obj + + +class Command(object): + + def _execute(self, cmd, capture=False, executable=None): + """Execute a command using subprocess.Popen() + :Parameters: + - out: stdout from subprocess.Popen() + out has some attributes. + out.returncode: returncode of subprocess.Popen() + out.stderr: stderr from subprocess.Popen() + """ + if capture: + p_stdout = subprocess.PIPE + p_stderr = subprocess.PIPE + else: + p_stdout = None + p_stderr = None + pop = subprocess.Popen(cmd, shell=True, executable=executable, + stdout=p_stdout, + stderr=p_stderr) + __stdout, __stderr = pop.communicate() + _stdout = six.text_type(__stdout, 'utf-8') + _stderr = six.text_type(__stderr, 'utf-8') + out = CommandOut(_stdout, _stderr, cmd, pop.returncode) + return out + + def execute(self, cmd, capture=True, try_times=1, interval=1): + out = None + for i in range(try_times): + out = self._execute(cmd, capture=capture) + LOG.info(out.command) + if out.returncode == 0: + return out + LOG.error("stdout: %s", out) + LOG.error("stderr: %s", out.stderr) + if i + 1 >= try_times: + break + time.sleep(interval) + raise CommandError(out) + + def sudo(self, cmd, capture=True, try_times=1, interval=1): + cmd = 'sudo %s' % cmd + return self.execute(cmd, capture=capture, + try_times=try_times, interval=interval) + + +class DockerImage(object): + def __init__(self, baseimage='ubuntu:16.04'): + self.baseimage = baseimage + self.cmd = Command() + + def get_images(self): + out = self.cmd.sudo('sudo docker images') + images = [] + for line in out.splitlines()[1:]: + images.append(line.split()[0]) + return images + + def exist(self, name): + return name in self.get_images() + + def build(self, tagname, dockerfile_dir): + self.cmd.sudo( + "docker build -t {0} {1}".format(tagname, dockerfile_dir), + try_times=3) + + def remove(self, tagname, check_exist=False): + if check_exist and not self.exist(tagname): + return tagname + self.cmd.sudo("docker rmi -f %s" % tagname, try_times=3) + + def create_quagga(self, tagname='quagga', image=None, check_exist=False): + if check_exist and self.exist(tagname): + return tagname + workdir = os.path.join(TEST_BASE_DIR, tagname) + pkges = ' '.join([ + 'telnet', + 'tcpdump', + 'quagga', + ]) + if image: + use_image = image + else: + use_image = self.baseimage + c = CmdBuffer() + c << 'FROM %s' % use_image + c << 'RUN apt-get update' + c << 'RUN apt-get install -qy --no-install-recommends %s' % pkges + c << 'CMD /usr/lib/quagga/bgpd' + + self.cmd.sudo('rm -rf %s' % workdir) + self.cmd.execute('mkdir -p %s' % workdir) + self.cmd.execute("echo '%s' > %s/Dockerfile" % (str(c), workdir)) + self.build(tagname, workdir) + return tagname + + def create_ryu(self, tagname='ryu', image=None, check_exist=False): + if check_exist and self.exist(tagname): + return tagname + workdir = os.path.join(TEST_BASE_DIR, tagname) + workdir_ctn = '/root/osrg/ryu' + pkges = ' '.join([ + 'tcpdump', + 'iproute2', + ]) + if image: + use_image = image + else: + use_image = self.baseimage + c = CmdBuffer() + c << 'FROM %s' % use_image + c << 'ADD ryu %s' % workdir_ctn + install = ' '.join([ + 'RUN apt-get update', + '&& apt-get install -qy --no-install-recommends %s' % pkges, + '&& cd %s' % workdir_ctn, + # Note: Clean previous builds, because "python setup.py install" + # might fail if the current directory contains the symlink to + # Docker host file systems. + '&& rm -rf *.egg-info/ build/ dist/ .tox/ *.log' + '&& pip install -r tools/pip-requires -r tools/optional-requires', + '&& python setup.py install', + ]) + c << install + + self.cmd.sudo('rm -rf %s' % workdir) + self.cmd.execute('mkdir -p %s' % workdir) + self.cmd.execute("echo '%s' > %s/Dockerfile" % (str(c), workdir)) + self.cmd.execute('cp -r ../ryu %s/' % workdir) + self.build(tagname, workdir) + return tagname + + +class Bridge(object): + def __init__(self, name, subnet='', start_ip=None, end_ip=None, + with_ip=True, self_ip=False, + fixed_ip=None, reuse=False, + br_type='docker'): + """Manage a bridge + :Parameters: + - name: bridge name + - subnet: network cider to be used in this bridge + - start_ip: start address of an ip to be used in the subnet + - end_ip: end address of an ip to be used in the subnet + - with_ip: specify if assign automatically an ip address + - self_ip: specify if assign an ip address for the bridge + - fixed_ip: an ip address to be assigned to the bridge + - reuse: specify if use an existing bridge + - br_type: One either in a 'docker', 'brctl' or 'ovs' + """ + self.cmd = Command() + self.name = name + if br_type not in (BRIDGE_TYPE_DOCKER, BRIDGE_TYPE_BRCTL, + BRIDGE_TYPE_OVS): + raise Exception("argument error br_type: %s" % br_type) + self.br_type = br_type + self.docker_nw = bool(self.br_type == BRIDGE_TYPE_DOCKER) + if TEST_PREFIX != '': + self.name = '{0}_{1}'.format(TEST_PREFIX, name) + self.with_ip = with_ip + if with_ip: + self.subnet = netaddr.IPNetwork(subnet) + if start_ip: + self.start_ip = start_ip + else: + self.start_ip = netaddr.IPAddress(self.subnet.first) + if end_ip: + self.end_ip = end_ip + else: + self.end_ip = netaddr.IPAddress(self.subnet.last) + + def _ip_gen(): + for host in netaddr.IPRange(self.start_ip, self.end_ip): + yield host + self._ip_generator = _ip_gen() + # throw away first network address + self.next_ip_address() + + self.self_ip = self_ip + if fixed_ip: + self.ip_addr = fixed_ip + else: + self.ip_addr = self.next_ip_address() + if not reuse: + def f(): + if self.br_type == BRIDGE_TYPE_DOCKER: + gw = "--gateway %s" % self.ip_addr.split('/')[0] + v6 = '' + if self.subnet.version == 6: + v6 = '--ipv6' + cmd = ("docker network create --driver bridge %s " + "%s --subnet %s %s" % (v6, gw, subnet, self.name)) + elif self.br_type == BRIDGE_TYPE_BRCTL: + cmd = "ip link add {0} type bridge".format(self.name) + elif self.br_type == BRIDGE_TYPE_OVS: + cmd = "ovs-vsctl add-br {0}".format(self.name) + else: + raise ValueError('Unsupported br_type: %s' % self.br_type) + self.delete() + self.execute(cmd, sudo=True, retry=True) + try_several_times(f) + if not self.docker_nw: + self.execute("ip link set up dev {0}".format(self.name), + sudo=True, retry=True) + + if not self.docker_nw and self_ip: + ips = self.check_br_addr(self.name) + for key, ip in ips.items(): + if self.subnet.version == key: + self.execute( + "ip addr del {0} dev {1}".format(ip, self.name), + sudo=True, retry=True) + self.execute( + "ip addr add {0} dev {1}".format(self.ip_addr, self.name), + sudo=True, retry=True) + self.ctns = [] + + def get_bridges_dc(self): + out = self.execute('docker network ls', sudo=True, retry=True) + bridges = [] + for line in out.splitlines()[1:]: + bridges.append(line.split()[1]) + return bridges + + def get_bridges_brctl(self): + out = self.execute('brctl show', retry=True) + bridges = [] + for line in out.splitlines()[1:]: + bridges.append(line.split()[0]) + return bridges + + def get_bridges_ovs(self): + out = self.execute('ovs-vsctl list-br', sudo=True, retry=True) + return out.splitlines() + + def get_bridges(self): + if self.br_type == BRIDGE_TYPE_DOCKER: + return self.get_bridges_dc() + elif self.br_type == BRIDGE_TYPE_BRCTL: + return self.get_bridges_brctl() + elif self.br_type == BRIDGE_TYPE_OVS: + return self.get_bridges_ovs() + + def exist(self): + return self.name in self.get_bridges() + + def execute(self, cmd, capture=True, sudo=False, retry=False): + if sudo: + m = self.cmd.sudo + else: + m = self.cmd.execute + if retry: + return m(cmd, capture=capture, try_times=3, interval=1) + else: + return m(cmd, capture=capture) + + def check_br_addr(self, br): + ips = {} + cmd = "ip a show dev %s" % br + for line in self.execute(cmd, sudo=True).split('\n'): + if line.strip().startswith("inet "): + elems = [e.strip() for e in line.strip().split(' ')] + ips[4] = elems[1] + elif line.strip().startswith("inet6 "): + elems = [e.strip() for e in line.strip().split(' ')] + ips[6] = elems[1] + return ips + + def next_ip_address(self): + return "{0}/{1}".format(next(self._ip_generator), + self.subnet.prefixlen) + + def addif(self, ctn): + name = ctn.next_if_name() + self.ctns.append(ctn) + ip_address = None + if self.docker_nw: + ipv4 = None + ipv6 = None + ip_address = self.next_ip_address() + ip_address_ip = ip_address.split('/')[0] + version = 4 + if netaddr.IPNetwork(ip_address).version == 6: + version = 6 + opt_ip = "--ip %s" % ip_address_ip + if version == 4: + ipv4 = ip_address + else: + opt_ip = "--ip6 %s" % ip_address_ip + ipv6 = ip_address + cmd = "docker network connect %s %s %s" % ( + opt_ip, self.name, ctn.docker_name()) + self.execute(cmd, sudo=True) + ctn.set_addr_info(bridge=self.name, ipv4=ipv4, ipv6=ipv6, + ifname=name) + else: + if self.with_ip: + ip_address = self.next_ip_address() + version = 4 + if netaddr.IPNetwork(ip_address).version == 6: + version = 6 + ctn.pipework(self, ip_address, name, version=version) + else: + ctn.pipework(self, '0/0', name) + return ip_address + + def delete(self, check_exist=True): + if check_exist: + if not self.exist(): + return + if self.br_type == BRIDGE_TYPE_DOCKER: + self.execute("docker network rm %s" % self.name, + sudo=True, retry=True) + elif self.br_type == BRIDGE_TYPE_BRCTL: + self.execute("ip link set down dev %s" % self.name, + sudo=True, retry=True) + self.execute( + "ip link delete %s type bridge" % self.name, + sudo=True, retry=True) + elif self.br_type == BRIDGE_TYPE_OVS: + self.execute( + "ovs-vsctl del-br %s" % self.name, + sudo=True, retry=True) + + +class Container(object): + def __init__(self, name, image=None): + self.name = name + self.image = image + self.shared_volumes = [] + self.ip_addrs = [] + self.ip6_addrs = [] + self.is_running = False + self.eths = [] + self.id = None + + self.cmd = Command() + self.remove() + + def docker_name(self): + if TEST_PREFIX == DEFAULT_TEST_PREFIX: + return self.name + return '{0}_{1}'.format(TEST_PREFIX, self.name) + + def get_docker_id(self): + if self.id: + return self.id + else: + return self.docker_name() + + def next_if_name(self): + name = 'eth{0}'.format(len(self.eths) + 1) + self.eths.append(name) + return name + + def set_addr_info(self, bridge, ipv4=None, ipv6=None, ifname='eth0'): + if ipv4: + self.ip_addrs.append((ifname, ipv4, bridge)) + if ipv6: + self.ip6_addrs.append((ifname, ipv6, bridge)) + + def get_addr_info(self, bridge, ipv=4): + addrinfo = {} + if ipv == 4: + ip_addrs = self.ip_addrs + elif ipv == 6: + ip_addrs = self.ip6_addrs + else: + return None + for addr in ip_addrs: + if addr[2] == bridge: + addrinfo[addr[1]] = addr[0] + return addrinfo + + def execute(self, cmd, capture=True, sudo=False, retry=False): + if sudo: + m = self.cmd.sudo + else: + m = self.cmd.execute + if retry: + return m(cmd, capture=capture, try_times=3, interval=1) + else: + return m(cmd, capture=capture) + + def dcexec(self, cmd, capture=True, retry=False): + if retry: + return self.cmd.sudo(cmd, capture=capture, try_times=3, interval=1) + else: + return self.cmd.sudo(cmd, capture=capture) + + def exec_on_ctn(self, cmd, capture=True, detach=False): + name = self.docker_name() + flag = '-d' if detach else '' + return self.dcexec('docker exec {0} {1} {2}'.format( + flag, name, cmd), capture=capture) + + def get_containers(self, allctn=False): + cmd = 'docker ps --no-trunc=true' + if allctn: + cmd += ' --all=true' + out = self.dcexec(cmd, retry=True) + containers = [] + for line in out.splitlines()[1:]: + containers.append(line.split()[-1]) + return containers + + def exist(self, allctn=False): + return self.docker_name() in self.get_containers(allctn=allctn) + + def run(self): + c = CmdBuffer(' ') + c << "docker run --privileged=true" + for sv in self.shared_volumes: + c << "-v {0}:{1}".format(sv[0], sv[1]) + c << "--name {0} --hostname {0} -id {1}".format(self.docker_name(), + self.image) + self.id = self.dcexec(str(c), retry=True) + self.is_running = True + self.exec_on_ctn("ip li set up dev lo") + ipv4 = None + ipv6 = None + for line in self.exec_on_ctn("ip a show dev eth0").split('\n'): + if line.strip().startswith("inet "): + elems = [e.strip() for e in line.strip().split(' ')] + ipv4 = elems[1] + elif line.strip().startswith("inet6 "): + elems = [e.strip() for e in line.strip().split(' ')] + ipv6 = elems[1] + self.set_addr_info(bridge='docker0', ipv4=ipv4, ipv6=ipv6, + ifname='eth0') + return 0 + + def stop(self, check_exist=True): + if check_exist: + if not self.exist(allctn=False): + return + ctn_id = self.get_docker_id() + out = self.dcexec('docker stop -t 0 %s' % ctn_id, retry=True) + self.is_running = False + return out + + def remove(self, check_exist=True): + if check_exist: + if not self.exist(allctn=True): + return + ctn_id = self.get_docker_id() + out = self.dcexec('docker rm -f %s' % ctn_id, retry=True) + self.is_running = False + return out + + def pipework(self, bridge, ip_addr, intf_name="", version=4): + if not self.is_running: + LOG.warning('Call run() before pipeworking') + return + c = CmdBuffer(' ') + c << "pipework {0}".format(bridge.name) + + if intf_name != "": + c << "-i {0}".format(intf_name) + else: + intf_name = "eth1" + ipv4 = None + ipv6 = None + if version == 4: + ipv4 = ip_addr + else: + c << '-a 6' + ipv6 = ip_addr + c << "{0} {1}".format(self.docker_name(), ip_addr) + self.set_addr_info(bridge=bridge.name, ipv4=ipv4, ipv6=ipv6, + ifname=intf_name) + self.execute(str(c), sudo=True, retry=True) + + def get_pid(self): + if self.is_running: + cmd = "docker inspect -f '{{.State.Pid}}' %s" % self.docker_name() + return int(self.dcexec(cmd)) + return -1 + + def start_tcpdump(self, interface=None, filename=None): + if not interface: + interface = "eth0" + if not filename: + filename = "{0}/{1}.dump".format( + self.shared_volumes[0][1], interface) + self.exec_on_ctn( + "tcpdump -i {0} -w {1}".format(interface, filename), + detach=True) + + +class BGPContainer(Container): + + WAIT_FOR_BOOT = 1 + RETRY_INTERVAL = 5 + DEFAULT_PEER_ARG = {'neigh_addr': '', + 'passwd': None, + 'vpn': False, + 'flowspec': False, + 'is_rs_client': False, + 'is_rr_client': False, + 'cluster_id': None, + 'policies': None, + 'passive': False, + 'local_addr': '', + 'as2': False, + 'graceful_restart': None, + 'local_as': None, + 'prefix_limit': None} + default_peer_keys = sorted(DEFAULT_PEER_ARG.keys()) + DEFAULT_ROUTE_ARG = {'prefix': None, + 'rf': 'ipv4', + 'attr': None, + 'next-hop': None, + 'as-path': None, + 'community': None, + 'med': None, + 'local-pref': None, + 'extended-community': None, + 'matchs': None, + 'thens': None} + default_route_keys = sorted(DEFAULT_ROUTE_ARG.keys()) + + def __init__(self, name, asn, router_id, ctn_image_name=None): + self.config_dir = TEST_BASE_DIR + if TEST_PREFIX: + self.config_dir = os.path.join(self.config_dir, TEST_PREFIX) + self.config_dir = os.path.join(self.config_dir, name) + self.asn = asn + self.router_id = router_id + self.peers = {} + self.routes = {} + self.policies = {} + super(BGPContainer, self).__init__(name, ctn_image_name) + self.execute( + 'rm -rf {0}'.format(self.config_dir), sudo=True) + self.execute('mkdir -p {0}'.format(self.config_dir)) + self.execute('chmod 777 {0}'.format(self.config_dir)) + + def __repr__(self): + return str({'name': self.name, 'asn': self.asn, + 'router_id': self.router_id}) + + def run(self, wait=False, w_time=WAIT_FOR_BOOT): + self.create_config() + super(BGPContainer, self).run() + if wait: + time.sleep(w_time) + return w_time + + def add_peer(self, peer, bridge='', reload_config=True, v6=False, + peer_info=None): + peer_info = peer_info or {} + self.peers[peer] = self.DEFAULT_PEER_ARG.copy() + self.peers[peer].update(peer_info) + peer_keys = sorted(self.peers[peer].keys()) + if peer_keys != self.default_peer_keys: + raise Exception("argument error peer_info: %s" % peer_info) + + neigh_addr = '' + local_addr = '' + it = itertools.product(self.ip_addrs, peer.ip_addrs) + if v6: + it = itertools.product(self.ip6_addrs, peer.ip6_addrs) + + for me, you in it: + if bridge != '' and bridge != me[2]: + continue + if me[2] == you[2]: + neigh_addr = you[1] + local_addr = me[1] + if v6: + addr, mask = local_addr.split('/') + local_addr = "{0}%{1}/{2}".format(addr, me[0], mask) + break + + if neigh_addr == '': + raise Exception('peer {0} seems not ip reachable'.format(peer)) + + if not self.peers[peer]['policies']: + self.peers[peer]['policies'] = {} + + self.peers[peer]['neigh_addr'] = neigh_addr + self.peers[peer]['local_addr'] = local_addr + if self.is_running and reload_config: + self.create_config() + self.reload_config() + + def del_peer(self, peer, reload_config=True): + del self.peers[peer] + if self.is_running and reload_config: + self.create_config() + self.reload_config() + + def disable_peer(self, peer): + raise NotImplementedError() + + def enable_peer(self, peer): + raise NotImplementedError() + + def log(self): + return self.execute('cat {0}/*.log'.format(self.config_dir)) + + def add_route(self, route, reload_config=True, route_info=None): + route_info = route_info or {} + self.routes[route] = self.DEFAULT_ROUTE_ARG.copy() + self.routes[route].update(route_info) + route_keys = sorted(self.routes[route].keys()) + if route_keys != self.default_route_keys: + raise Exception("argument error route_info: %s" % route_info) + self.routes[route]['prefix'] = route + if self.is_running and reload_config: + self.create_config() + self.reload_config() + + def add_policy(self, policy, peer, typ, default='accept', + reload_config=True): + self.set_default_policy(peer, typ, default) + self.define_policy(policy) + self.assign_policy(peer, policy, typ) + if self.is_running and reload_config: + self.create_config() + self.reload_config() + + def set_default_policy(self, peer, typ, default): + if (typ in ['in', 'out', 'import', 'export'] and + default in ['reject', 'accept']): + if 'default-policy' not in self.peers[peer]: + self.peers[peer]['default-policy'] = {} + self.peers[peer]['default-policy'][typ] = default + else: + raise Exception('wrong type or default') + + def define_policy(self, policy): + self.policies[policy['name']] = policy + + def assign_policy(self, peer, policy, typ): + if peer not in self.peers: + raise Exception('peer {0} not found'.format(peer.name)) + name = policy['name'] + if name not in self.policies: + raise Exception('policy {0} not found'.format(name)) + self.peers[peer]['policies'][typ] = policy + + def get_local_rib(self, peer, rf): + raise NotImplementedError() + + def get_global_rib(self, rf): + raise NotImplementedError() + + def get_neighbor_state(self, peer_id): + raise NotImplementedError() + + def get_reachablily(self, prefix, timeout=20): + version = netaddr.IPNetwork(prefix).version + addr = prefix.split('/')[0] + if version == 4: + ping_cmd = 'ping' + elif version == 6: + ping_cmd = 'ping6' + else: + raise Exception( + 'unsupported route family: {0}'.format(version)) + cmd = '/bin/bash -c "/bin/{0} -c 1 -w 1 {1} | xargs echo"'.format( + ping_cmd, addr) + interval = 1 + count = 0 + while True: + res = self.exec_on_ctn(cmd) + LOG.info(res) + if '1 packets received' in res and '0% packet loss': + break + time.sleep(interval) + count += interval + if count >= timeout: + raise Exception('timeout') + return True + + def wait_for(self, expected_state, peer, timeout=120): + interval = 1 + count = 0 + while True: + state = self.get_neighbor_state(peer) + LOG.info("%s's peer %s state: %s", + self.router_id, peer.router_id, state) + if state == expected_state: + return + + time.sleep(interval) + count += interval + if count >= timeout: + raise Exception('timeout') + + def add_static_route(self, network, next_hop): + cmd = '/sbin/ip route add {0} via {1}'.format(network, next_hop) + self.exec_on_ctn(cmd) + + def set_ipv6_forward(self): + cmd = 'sysctl -w net.ipv6.conf.all.forwarding=1' + self.exec_on_ctn(cmd) + + def create_config(self): + raise NotImplementedError() + + def reload_config(self): + raise NotImplementedError() diff --git a/tests/integrated/common/install_docker_test_pkg.sh b/tests/integrated/common/install_docker_test_pkg.sh new file mode 100644 index 00000000..a771dfc1 --- /dev/null +++ b/tests/integrated/common/install_docker_test_pkg.sh @@ -0,0 +1,43 @@ +#!/bin/bash +set -ex + +RYU_PATH=`dirname $0` + +source ${RYU_PATH}/install_docker_test_pkg_common.sh + +function add_docker_aptline { + sudo apt-get update + if ! apt-cache search docker-engine | grep docker-engine; then + VER=`lsb_release -r` + if echo $VER | grep 12.04; then + REL_NAME=precise + elif echo $VER | grep 14.04; then + REL_NAME=trusty + elif echo $VER | grep 15.10; then + REL_NAME=wily + elif echo $VER | grep 16.04; then + REL_NAME=xenial + else + retrun 1 + fi + RELEASE=ubuntu-$REL_NAME + sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D + sudo sh -c "echo deb https://apt.dockerproject.org/repo $RELEASE main > /etc/apt/sources.list.d/docker.list" + fi +} + +init_variables +process_options "$@" + +if [ $APTLINE_DOCKER -eq 1 ]; then + add_docker_aptline +fi + +sudo apt-get update +if apt-cache search docker-engine | grep docker-engine; then + DOCKER_PKG=docker-engine +else + DOCKER_PKG=docker.io +fi +sudo apt-get install -y $DOCKER_PKG +install_depends_pkg diff --git a/tests/integrated/common/install_docker_test_pkg_common.sh b/tests/integrated/common/install_docker_test_pkg_common.sh new file mode 100644 index 00000000..44a3e107 --- /dev/null +++ b/tests/integrated/common/install_docker_test_pkg_common.sh @@ -0,0 +1,39 @@ +#!/bin/bash +set -ex + +function init_variables { + APTLINE_DOCKER=0 + DIR_BASE=/tmp +} + +function process_options { + local max + local i + max=$# + i=1 + while [ $i -le $max ]; do + case "$1" in + -a|--add-docker-aptline) + APTLINE_DOCKER=1 + ;; + -d|--download-dir) + shift; ((i++)) + DIR_BASE=$1 + ;; + esac + shift; ((i++)) + done +} + +function install_pipework { + if ! which /usr/local/bin/pipework >/dev/null + then + sudo rm -rf $DIR_BASE/pipework + git clone https://github.com/jpetazzo/pipework.git $DIR_BASE/pipework + sudo install -m 0755 $DIR_BASE/pipework/pipework /usr/local/bin/pipework + fi +} + +function install_depends_pkg { + install_pipework +} diff --git a/tests/integrated/common/install_docker_test_pkg_for_travis.sh b/tests/integrated/common/install_docker_test_pkg_for_travis.sh new file mode 100644 index 00000000..d8c3b499 --- /dev/null +++ b/tests/integrated/common/install_docker_test_pkg_for_travis.sh @@ -0,0 +1,12 @@ +#!/bin/bash +set -ex + +RYU_PATH=`dirname $0` + +source ${RYU_PATH}/install_docker_test_pkg_common.sh + +init_variables +process_options "$@" + +sudo apt-get update +install_depends_pkg diff --git a/tests/integrated/common/quagga.py b/tests/integrated/common/quagga.py new file mode 100644 index 00000000..9b6d2183 --- /dev/null +++ b/tests/integrated/common/quagga.py @@ -0,0 +1,332 @@ +# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. +# +# This is based on the following +# https://github.com/osrg/gobgp/test/lib/quagga.py +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import + +import logging +import os + +import netaddr + +from . import docker_base as base + +LOG = logging.getLogger(__name__) + + +class QuaggaBGPContainer(base.BGPContainer): + + WAIT_FOR_BOOT = 1 + SHARED_VOLUME = '/etc/quagga' + + def __init__(self, name, asn, router_id, ctn_image_name, zebra=False): + super(QuaggaBGPContainer, self).__init__(name, asn, router_id, + ctn_image_name) + self.shared_volumes.append((self.config_dir, self.SHARED_VOLUME)) + self.zebra = zebra + self._create_config_debian() + + def run(self, wait=False, w_time=WAIT_FOR_BOOT): + w_time = super(QuaggaBGPContainer, + self).run(wait=wait, w_time=self.WAIT_FOR_BOOT) + return w_time + + def get_global_rib(self, prefix='', rf='ipv4'): + rib = [] + if prefix != '': + return self.get_global_rib_with_prefix(prefix, rf) + + out = self.vtysh('show bgp {0} unicast'.format(rf), config=False) + if out.startswith('No BGP network exists'): + return rib + + read_next = False + + for line in out.split('\n'): + ibgp = False + if line[:2] == '*>': + line = line[2:] + if line[0] == 'i': + line = line[1:] + ibgp = True + elif not read_next: + continue + + elems = line.split() + + if len(elems) == 1: + read_next = True + prefix = elems[0] + continue + elif read_next: + nexthop = elems[0] + else: + prefix = elems[0] + nexthop = elems[1] + read_next = False + + rib.append({'prefix': prefix, 'nexthop': nexthop, + 'ibgp': ibgp}) + + return rib + + def get_global_rib_with_prefix(self, prefix, rf): + rib = [] + + lines = [line.strip() for line in self.vtysh( + 'show bgp {0} unicast {1}'.format(rf, prefix), + config=False).split('\n')] + + if lines[0] == '% Network not in table': + return rib + + lines = lines[2:] + + if lines[0].startswith('Not advertised'): + lines.pop(0) # another useless line + elif lines[0].startswith('Advertised to non peer-group peers:'): + lines = lines[2:] # other useless lines + else: + raise Exception('unknown output format {0}'.format(lines)) + + if lines[0] == 'Local': + aspath = [] + else: + aspath = [int(asn) for asn in lines[0].split()] + + nexthop = lines[1].split()[0].strip() + info = [s.strip(',') for s in lines[2].split()] + attrs = [] + if 'metric' in info: + med = info[info.index('metric') + 1] + attrs.append({'type': base.BGP_ATTR_TYPE_MULTI_EXIT_DISC, + 'metric': int(med)}) + if 'localpref' in info: + localpref = info[info.index('localpref') + 1] + attrs.append({'type': base.BGP_ATTR_TYPE_LOCAL_PREF, + 'value': int(localpref)}) + + rib.append({'prefix': prefix, 'nexthop': nexthop, + 'aspath': aspath, 'attrs': attrs}) + + return rib + + def get_neighbor_state(self, peer): + if peer not in self.peers: + raise Exception('not found peer {0}'.format(peer.router_id)) + + neigh_addr = self.peers[peer]['neigh_addr'].split('/')[0] + + info = [l.strip() for l in self.vtysh( + 'show bgp neighbors {0}'.format(neigh_addr), + config=False).split('\n')] + + if not info[0].startswith('BGP neighbor is'): + raise Exception('unknown format') + + idx1 = info[0].index('BGP neighbor is ') + idx2 = info[0].index(',') + n_addr = info[0][idx1 + len('BGP neighbor is '):idx2] + if n_addr == neigh_addr: + idx1 = info[2].index('= ') + state = info[2][idx1 + len('= '):] + if state.startswith('Idle'): + return base.BGP_FSM_IDLE + elif state.startswith('Active'): + return base.BGP_FSM_ACTIVE + elif state.startswith('Established'): + return base.BGP_FSM_ESTABLISHED + else: + return state + + raise Exception('not found peer {0}'.format(peer.router_id)) + + def send_route_refresh(self): + self.vtysh('clear ip bgp * soft', config=False) + + def create_config(self): + zebra = 'no' + self._create_config_bgp() + if self.zebra: + zebra = 'yes' + self._create_config_zebra() + self._create_config_daemons(zebra) + + def _create_config_debian(self): + c = base.CmdBuffer() + c << 'vtysh_enable=yes' + c << 'zebra_options=" --daemon -A 127.0.0.1"' + c << 'bgpd_options=" --daemon -A 127.0.0.1"' + c << 'ospfd_options=" --daemon -A 127.0.0.1"' + c << 'ospf6d_options=" --daemon -A ::1"' + c << 'ripd_options=" --daemon -A 127.0.0.1"' + c << 'ripngd_options=" --daemon -A ::1"' + c << 'isisd_options=" --daemon -A 127.0.0.1"' + c << 'babeld_options=" --daemon -A 127.0.0.1"' + c << 'watchquagga_enable=yes' + c << 'watchquagga_options=(--daemon)' + with open('{0}/debian.conf'.format(self.config_dir), 'w') as f: + LOG.info("[%s's new config]", self.name) + LOG.info(str(c)) + f.writelines(str(c)) + + def _create_config_daemons(self, zebra='no'): + c = base.CmdBuffer() + c << 'zebra=%s' % zebra + c << 'bgpd=yes' + c << 'ospfd=no' + c << 'ospf6d=no' + c << 'ripd=no' + c << 'ripngd=no' + c << 'isisd=no' + c << 'babeld=no' + with open('{0}/daemons'.format(self.config_dir), 'w') as f: + LOG.info("[%s's new config]", self.name) + LOG.info(str(c)) + f.writelines(str(c)) + + def _create_config_bgp(self): + + c = base.CmdBuffer() + c << 'hostname bgpd' + c << 'password zebra' + c << 'router bgp {0}'.format(self.asn) + c << 'bgp router-id {0}'.format(self.router_id) + if any(info['graceful_restart'] for info in self.peers.values()): + c << 'bgp graceful-restart' + + version = 4 + for peer, info in self.peers.items(): + version = netaddr.IPNetwork(info['neigh_addr']).version + n_addr = info['neigh_addr'].split('/')[0] + if version == 6: + c << 'no bgp default ipv4-unicast' + + c << 'neighbor {0} remote-as {1}'.format(n_addr, peer.asn) + if info['is_rs_client']: + c << 'neighbor {0} route-server-client'.format(n_addr) + for typ, p in info['policies'].items(): + c << 'neighbor {0} route-map {1} {2}'.format(n_addr, p['name'], + typ) + if info['passwd']: + c << 'neighbor {0} password {1}'.format(n_addr, info['passwd']) + if info['passive']: + c << 'neighbor {0} passive'.format(n_addr) + if version == 6: + c << 'address-family ipv6 unicast' + c << 'neighbor {0} activate'.format(n_addr) + c << 'exit-address-family' + + for route in self.routes.values(): + if route['rf'] == 'ipv4': + c << 'network {0}'.format(route['prefix']) + elif route['rf'] == 'ipv6': + c << 'address-family ipv6 unicast' + c << 'network {0}'.format(route['prefix']) + c << 'exit-address-family' + else: + raise Exception( + 'unsupported route faily: {0}'.format(route['rf'])) + + if self.zebra: + if version == 6: + c << 'address-family ipv6 unicast' + c << 'redistribute connected' + c << 'exit-address-family' + else: + c << 'redistribute connected' + + for name, policy in self.policies.items(): + c << 'access-list {0} {1} {2}'.format(name, policy['type'], + policy['match']) + c << 'route-map {0} permit 10'.format(name) + c << 'match ip address {0}'.format(name) + c << 'set metric {0}'.format(policy['med']) + + c << 'debug bgp as4' + c << 'debug bgp fsm' + c << 'debug bgp updates' + c << 'debug bgp events' + c << 'log file {0}/bgpd.log'.format(self.SHARED_VOLUME) + + with open('{0}/bgpd.conf'.format(self.config_dir), 'w') as f: + LOG.info("[%s's new config]", self.name) + LOG.info(str(c)) + f.writelines(str(c)) + + def _create_config_zebra(self): + c = base.CmdBuffer() + c << 'hostname zebra' + c << 'password zebra' + c << 'log file {0}/zebra.log'.format(self.SHARED_VOLUME) + c << 'debug zebra packet' + c << 'debug zebra kernel' + c << 'debug zebra rib' + c << '' + + with open('{0}/zebra.conf'.format(self.config_dir), 'w') as f: + LOG.info("[%s's new config]", self.name) + LOG.info(str(c)) + f.writelines(str(c)) + + def vtysh(self, cmd, config=True): + if not isinstance(cmd, list): + cmd = [cmd] + cmd = ' '.join("-c '{0}'".format(c) for c in cmd) + if config: + return self.exec_on_ctn( + "vtysh -d bgpd -c 'en' -c 'conf t' -c " + "'router bgp {0}' {1}".format(self.asn, cmd), + capture=True) + else: + return self.exec_on_ctn("vtysh -d bgpd {0}".format(cmd), + capture=True) + + def reload_config(self): + daemon = [] + daemon.append('bgpd') + if self.zebra: + daemon.append('zebra') + for d in daemon: + cmd = '/usr/bin/pkill {0} -SIGHUP'.format(d) + self.exec_on_ctn(cmd, capture=True) + + +class RawQuaggaBGPContainer(QuaggaBGPContainer): + def __init__(self, name, config, ctn_image_name, + zebra=False): + asn = None + router_id = None + for line in config.split('\n'): + line = line.strip() + if line.startswith('router bgp'): + asn = int(line[len('router bgp'):].strip()) + if line.startswith('bgp router-id'): + router_id = line[len('bgp router-id'):].strip() + if not asn: + raise Exception('asn not in quagga config') + if not router_id: + raise Exception('router-id not in quagga config') + self.config = config + super(RawQuaggaBGPContainer, self).__init__(name, asn, router_id, + ctn_image_name, zebra) + + def create_config(self): + with open(os.path.join(self.config_dir, 'bgpd.conf'), 'w') as f: + LOG.info("[%s's new config]", self.name) + LOG.info(self.config) + f.writelines(self.config) diff --git a/tests/integrated/common/ryubgp.py b/tests/integrated/common/ryubgp.py new file mode 100644 index 00000000..8fe16f49 --- /dev/null +++ b/tests/integrated/common/ryubgp.py @@ -0,0 +1,212 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import + +import logging +import os +import time + +from . import docker_base as base + +LOG = logging.getLogger(__name__) + + +class RyuBGPContainer(base.BGPContainer): + + WAIT_FOR_BOOT = 1 + SHARED_VOLUME = '/etc/ryu' + + def __init__(self, name, asn, router_id, ctn_image_name): + super(RyuBGPContainer, self).__init__(name, asn, router_id, + ctn_image_name) + self.RYU_CONF = os.path.join(self.config_dir, 'ryu.conf') + self.SHARED_RYU_CONF = os.path.join(self.SHARED_VOLUME, 'ryu.conf') + self.SHARED_BGP_CONF = os.path.join(self.SHARED_VOLUME, 'bgp_conf.py') + self.shared_volumes.append((self.config_dir, self.SHARED_VOLUME)) + + def _create_config_ryu(self): + c = base.CmdBuffer() + c << '[DEFAULT]' + c << 'verbose=True' + c << 'log_file=/etc/ryu/manager.log' + with open(self.RYU_CONF, 'w') as f: + LOG.info("[%s's new config]" % self.name) + LOG.info(str(c)) + f.writelines(str(c)) + + def _create_config_ryu_bgp(self): + c = base.CmdBuffer() + c << 'import os' + c << '' + c << 'BGP = {' + c << " 'local_as': %s," % str(self.asn) + c << " 'router_id': '%s'," % self.router_id + c << " 'neighbors': [" + c << " {" + for peer, info in self.peers.items(): + n_addr = info['neigh_addr'].split('/')[0] + c << " 'address': '%s'," % n_addr + c << " 'remote_as': %s," % str(peer.asn) + c << " 'enable_ipv4': True," + c << " 'enable_ipv6': True," + c << " 'enable_vpnv4': True," + c << " 'enable_vpnv6': True," + c << ' },' + c << ' ],' + c << " 'routes': [" + for route in self.routes.values(): + c << " {" + c << " 'prefix': '%s'," % route['prefix'] + c << " }," + c << " ]," + c << "}" + log_conf = """LOGGING = { + + # We use python logging package for logging. + 'version': 1, + 'disable_existing_loggers': False, + + 'formatters': { + 'verbose': { + 'format': '%(levelname)s %(asctime)s %(module)s ' + + '[%(process)d %(thread)d] %(message)s' + }, + 'simple': { + 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)s ' + + '%(message)s' + }, + 'stats': { + 'format': '%(message)s' + }, + }, + + 'handlers': { + # Outputs log to console. + 'console': { + 'level': 'DEBUG', + 'class': 'logging.StreamHandler', + 'formatter': 'simple' + }, + 'console_stats': { + 'level': 'DEBUG', + 'class': 'logging.StreamHandler', + 'formatter': 'stats' + }, + # Rotates log file when its size reaches 10MB. + 'log_file': { + 'level': 'DEBUG', + 'class': 'logging.handlers.RotatingFileHandler', + 'filename': os.path.join('.', 'bgpspeaker.log'), + 'maxBytes': '10000000', + 'formatter': 'verbose' + }, + 'stats_file': { + 'level': 'DEBUG', + 'class': 'logging.handlers.RotatingFileHandler', + 'filename': os.path.join('.', 'statistics_bgps.log'), + 'maxBytes': '10000000', + 'formatter': 'stats' + }, + }, + + # Fine-grained control of logging per instance. + 'loggers': { + 'bgpspeaker': { + 'handlers': ['console', 'log_file'], + 'handlers': ['console'], + 'level': 'DEBUG', + 'propagate': False, + }, + 'stats': { + 'handlers': ['stats_file', 'console_stats'], + 'level': 'INFO', + 'propagate': False, + 'formatter': 'stats', + }, + }, + + # Root loggers. + 'root': { + 'handlers': ['console', 'log_file'], + 'level': 'DEBUG', + 'propagate': True, + }, +}""" + c << log_conf + with open(os.path.join(self.config_dir, 'bgp_conf.py'), 'w') as f: + LOG.info("[%s's new config]", self.name) + LOG.info(str(c)) + f.writelines(str(c)) + + def create_config(self): + self._create_config_ryu() + self._create_config_ryu_bgp() + + def is_running_ryu(self): + results = self.exec_on_ctn('ps ax') + running = False + for line in results.split('\n')[1:]: + if 'ryu-manager' in line: + running = True + return running + + def start_ryubgp(self, check_running=True, retry=False): + if check_running: + if self.is_running_ryu(): + return True + result = False + if retry: + try_times = 3 + else: + try_times = 1 + cmd = "ryu-manager --verbose " + cmd += "--config-file %s " % self.SHARED_RYU_CONF + cmd += "--bgp-app-config-file %s " % self.SHARED_BGP_CONF + cmd += "ryu.services.protocols.bgp.application" + for _ in range(try_times): + self.exec_on_ctn(cmd, detach=True) + if self.is_running_ryu(): + result = True + break + time.sleep(1) + return result + + def stop_ryubgp(self, check_running=True, retry=False): + if check_running: + if not self.is_running_ryu(): + return True + result = False + if retry: + try_times = 3 + else: + try_times = 1 + for _ in range(try_times): + cmd = '/usr/bin/pkill ryu-manager -SIGTERM' + self.exec_on_ctn(cmd) + if not self.is_running_ryu(): + result = True + break + time.sleep(1) + return result + + def run(self, wait=False, w_time=WAIT_FOR_BOOT): + w_time = super(RyuBGPContainer, + self).run(wait=wait, w_time=self.WAIT_FOR_BOOT) + return w_time + + def reload_config(self): + self.stop_ryubgp(retry=True) + self.start_ryubgp(retry=True) diff --git a/tests/integrated/run_test.py b/tests/integrated/run_test.py new file mode 100644 index 00000000..77d39345 --- /dev/null +++ b/tests/integrated/run_test.py @@ -0,0 +1,54 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2016 Fumihiko Kakuma +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import absolute_import + +import logging +import os +import sys +import unittest + +from ryu import log + + +def load_tests(loader, tests, pattern): + dirname = os.path.dirname(os.path.abspath(__file__)) + base_path = os.path.abspath(dirname + '/../..') + suite = unittest.TestSuite() + for test_dir in ['tests/integrated/bgp']: + if not pattern: + suite.addTests(loader.discover(test_dir, + top_level_dir=base_path)) + else: + suite.addTests(loader.discover(test_dir, pattern=pattern, + top_level_dir=base_path)) + return suite + + +if __name__ == '__main__': + log.early_init_log(logging.DEBUG) + log.init_log() + LOG = logging.getLogger(__name__) + pattern = None + if len(sys.argv) == 2: + pattern = sys.argv[1] + loader = unittest.defaultTestLoader + suite = load_tests(loader, None, pattern) + res = unittest.TextTestRunner(verbosity=2).run(suite) + ret = 0 + if res.errors or res.failures: + ret = 1 + sys.exit(ret) diff --git a/tests/integrated/run_tests_with_ovs12.py b/tests/integrated/run_tests_with_ovs12.py new file mode 100755 index 00000000..b6393c43 --- /dev/null +++ b/tests/integrated/run_tests_with_ovs12.py @@ -0,0 +1,110 @@ +#!/usr/bin/env python +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import unittest +from nose.tools import ok_, eq_, timed, nottest + +from subprocess import Popen, PIPE, STDOUT +import time + +from mininet.net import Mininet +from mininet.node import RemoteController, OVSKernelSwitch + +TIMEOUT = 60 +RYU_HOST = '127.0.0.1' +RYU_PORT = 6633 +PYTHON_BIN = '.venv/bin/python' +RYU_MGR = './bin/ryu-manager' + + +class OVS12KernelSwitch(OVSKernelSwitch): + """Set protocols parameter for OVS version 1.10""" + def start(self, controllers): + super(OVS12KernelSwitch, self).start(controllers) + self.cmd('ovs-vsctl set Bridge', self, + "protocols='[OpenFlow10, OpenFlow12]'") + + +class TestWithOVS12(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.mn = Mininet() + c = cls.mn.addController(controller=RemoteController, + ip=RYU_HOST, port=RYU_PORT) + c.start() + + s1 = cls.mn.addSwitch('s1', cls=OVS12KernelSwitch) + s1.start(cls.mn.controllers) + + h1 = cls.mn.addHost('h1', ip='0.0.0.0/0') + + link = cls.mn.addLink(h1, s1) + s1.attach(link.intf2) + + @classmethod + def tearDownClass(cls): + cls.mn.stop() + + @timed(TIMEOUT) + def test_add_flow_v10(self): + app = 'test/integrated/test_add_flow_v10.py' + self._run_ryu_manager_and_check_output(app) + + @timed(TIMEOUT) + def test_request_reply_v12(self): + app = 'test/integrated/test_request_reply_v12.py' + self._run_ryu_manager_and_check_output(app) + + @timed(TIMEOUT) + def test_add_flow_v12_actions(self): + app = 'test/integrated/test_add_flow_v12_actions.py' + self._run_ryu_manager_and_check_output(app) + + @timed(TIMEOUT) + def test_add_flow_v12_matches(self): + app = 'test/integrated/test_add_flow_v12_matches.py' + self._run_ryu_manager_and_check_output(app) + + @nottest + def test_of_config(self): + # OVS 1.10 does not support of_config + pass + + def _run_ryu_manager_and_check_output(self, app): + cmd = [PYTHON_BIN, RYU_MGR, app] + p = Popen(cmd, stdout=PIPE, stderr=STDOUT) + + while True: + if p.poll() is not None: + raise Exception('Another ryu-manager already running?') + + line = p.stdout.readline().strip() + if line == '': + time.sleep(1) + continue + + print("ryu-manager: %s" % line) + if line.find('TEST_FINISHED') != -1: + ok_(line.find('Completed=[True]') != -1) + p.terminate() + p.communicate() # wait for subprocess is terminated + break + + +if __name__ == '__main__': + unittest.main() diff --git a/tests/integrated/test_add_flow_v10.py b/tests/integrated/test_add_flow_v10.py new file mode 100644 index 00000000..895cf15d --- /dev/null +++ b/tests/integrated/test_add_flow_v10.py @@ -0,0 +1,258 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import logging + +from ryu.ofproto import ofproto_v1_0 +from ryu.ofproto import ether +from ryu.ofproto import nx_match + +from tests.integrated import tester + +LOG = logging.getLogger(__name__) + + +class RunTest(tester.TestFlowBase): + """ Test case for add flows of1.0 + """ + OFP_VERSIONS = [ofproto_v1_0.OFP_VERSION] + + def __init__(self, *args, **kwargs): + super(RunTest, self).__init__(*args, **kwargs) + self._verify = [] + + def add_action(self, dp, action): + rule = nx_match.ClsRule() + self.send_flow_mod( + dp, rule, 0, dp.ofproto.OFPFC_ADD, 0, 0, None, + 0xffffffff, None, dp.ofproto.OFPFF_SEND_FLOW_REM, action) + + def add_rule(self, dp, rule): + self.send_flow_mod( + dp, rule, 0, dp.ofproto.OFPFC_ADD, 0, 0, None, + 0xffffffff, None, dp.ofproto.OFPFF_SEND_FLOW_REM, []) + + def send_flow_mod(self, dp, rule, cookie, command, idle_timeout, + hard_timeout, priority=None, buffer_id=0xffffffff, + out_port=None, flags=0, actions=None): + + if priority is None: + priority = dp.ofproto.OFP_DEFAULT_PRIORITY + if out_port is None: + out_port = dp.ofproto.OFPP_NONE + + match_tuple = rule.match_tuple() + match = dp.ofproto_parser.OFPMatch(*match_tuple) + + m = dp.ofproto_parser.OFPFlowMod( + dp, match, cookie, command, idle_timeout, hard_timeout, + priority, buffer_id, out_port, flags, actions) + + dp.send_msg(m) + + def _verify_action(self, actions, type_, name, value): + try: + action = actions[0] + if action.cls_action_type != type_: + return "Action type error. send:%s, val:%s" \ + % (type_, action.cls_action_type) + except IndexError: + return "Action is not setting." + + f_value = None + if name: + try: + if isinstance(name, list): + f_value = [getattr(action, n) for n in name] + else: + f_value = getattr(action, name) + except AttributeError: + pass + + if f_value != value: + return "Value error. send:%s=%s val:%s" \ + % (name, value, f_value) + return True + + def _verify_rule(self, rule, name, value): + f_value = getattr(rule, name) + if f_value != value: + return "Value error. send:%s=%s val:%s" \ + % (name, value, f_value) + return True + + def verify_default(self, dp, stats): + verify = self._verify + self._verify = [] + match = stats[0].match + actions = stats[0].actions + + if len(verify) == 2: + return self._verify_rule(match, *verify) + elif len(verify) == 3: + return self._verify_action(actions, *verify) + else: + return "self._verify is invalid." + + # Test of Actions + def test_action_output(self, dp): + out_port = 2 + self._verify = [dp.ofproto.OFPAT_OUTPUT, + 'port', out_port] + action = dp.ofproto_parser.OFPActionOutput(out_port) + self.add_action(dp, [action, ]) + + def test_action_vlan_vid(self, dp): + vlan_vid = 2 + self._verify = [dp.ofproto.OFPAT_SET_VLAN_VID, + 'vlan_vid', vlan_vid] + action = dp.ofproto_parser.OFPActionVlanVid(vlan_vid) + self.add_action(dp, [action, ]) + + def test_action_vlan_pcp(self, dp): + vlan_pcp = 4 + self._verify = [dp.ofproto.OFPAT_SET_VLAN_PCP, + 'vlan_pcp', vlan_pcp] + action = dp.ofproto_parser.OFPActionVlanPcp(vlan_pcp) + self.add_action(dp, [action, ]) + + def test_action_strip_vlan(self, dp): + vlan_pcp = 4 + self._verify = [dp.ofproto.OFPAT_STRIP_VLAN, + None, None] + action = dp.ofproto_parser.OFPActionStripVlan() + self.add_action(dp, [action, ]) + + def test_action_set_dl_src(self, dp): + dl_src = '56:b3:42:04:b2:7a' + dl_src_bin = self.haddr_to_bin(dl_src) + self._verify = [dp.ofproto.OFPAT_SET_DL_SRC, + 'dl_addr', dl_src_bin] + action = dp.ofproto_parser.OFPActionSetDlSrc(dl_src_bin) + self.add_action(dp, [action, ]) + + def test_action_set_dl_dst(self, dp): + dl_dst = 'c2:93:a2:fb:d0:f4' + dl_dst_bin = self.haddr_to_bin(dl_dst) + self._verify = [dp.ofproto.OFPAT_SET_DL_DST, + 'dl_addr', dl_dst_bin] + action = dp.ofproto_parser.OFPActionSetDlDst(dl_dst_bin) + self.add_action(dp, [action, ]) + + def test_action_set_nw_src(self, dp): + nw_src = '216.132.81.105' + nw_src_int = self.ipv4_to_int(nw_src) + self._verify = [dp.ofproto.OFPAT_SET_NW_SRC, + 'nw_addr', nw_src_int] + action = dp.ofproto_parser.OFPActionSetNwSrc(nw_src_int) + self.add_action(dp, [action, ]) + + def test_action_set_nw_dst(self, dp): + nw_dst = '223.201.206.3' + nw_dst_int = self.ipv4_to_int(nw_dst) + self._verify = [dp.ofproto.OFPAT_SET_NW_DST, + 'nw_addr', nw_dst_int] + action = dp.ofproto_parser.OFPActionSetNwDst(nw_dst_int) + self.add_action(dp, [action, ]) + + def test_action_set_nw_tos(self, dp): + # lowest two bits must be zero + nw_tos = 1 << 2 + self._verify = [dp.ofproto.OFPAT_SET_NW_TOS, + 'tos', nw_tos] + action = dp.ofproto_parser.OFPActionSetNwTos(nw_tos) + self.add_action(dp, [action, ]) + + def test_action_set_tp_src(self, dp): + tp_src = 55420 + self._verify = [dp.ofproto.OFPAT_SET_TP_SRC, + 'tp', tp_src] + action = dp.ofproto_parser.OFPActionSetTpSrc(tp_src) + self.add_action(dp, [action, ]) + + def test_action_set_tp_dst(self, dp): + tp_dst = 15430 + self._verify = [dp.ofproto.OFPAT_SET_TP_DST, + 'tp', tp_dst] + action = dp.ofproto_parser.OFPActionSetTpDst(tp_dst) + self.add_action(dp, [action, ]) + + def test_action_enqueue(self, dp): + port = 207 + queue_id = 4287508753 + self._verify = [dp.ofproto.OFPAT_ENQUEUE, + ['port', 'queue_id'], [port, queue_id]] + action = dp.ofproto_parser.OFPActionEnqueue(port, queue_id) + self.add_action(dp, [action, ]) + + # Test of Rules + def test_rule_set_in_port(self, dp): + in_port = 32 + self._verify = ['in_port', in_port] + + rule = nx_match.ClsRule() + rule.set_in_port(in_port) + self.add_rule(dp, rule) + + def test_rule_set_dl_src(self, dp): + dl_src = 'b8:a1:94:51:78:83' + dl_src_bin = self.haddr_to_bin(dl_src) + self._verify = ['dl_src', dl_src_bin] + + rule = nx_match.ClsRule() + rule.set_dl_src(dl_src_bin) + self.add_rule(dp, rule) + + def test_rule_set_dl_type_ip(self, dp): + dl_type = ether.ETH_TYPE_IP + self._verify = ['dl_type', dl_type] + + rule = nx_match.ClsRule() + rule.set_dl_type(dl_type) + self.add_rule(dp, rule) + + def test_rule_set_dl_type_arp(self, dp): + dl_type = ether.ETH_TYPE_ARP + self._verify = ['dl_type', dl_type] + + rule = nx_match.ClsRule() + rule.set_dl_type(dl_type) + self.add_rule(dp, rule) + + def test_rule_set_dl_type_vlan(self, dp): + dl_type = ether.ETH_TYPE_8021Q + self._verify = ['dl_type', dl_type] + + rule = nx_match.ClsRule() + rule.set_dl_type(dl_type) + self.add_rule(dp, rule) + + def test_rule_set_dl_type_ipv6(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + self._verify = ['dl_type', dl_type] + + rule = nx_match.ClsRule() + rule.set_dl_type(dl_type) + self.add_rule(dp, rule) + + def test_rule_set_dl_type_lacp(self, dp): + dl_type = ether.ETH_TYPE_SLOW + self._verify = ['dl_type', dl_type] + + rule = nx_match.ClsRule() + rule.set_dl_type(dl_type) + self.add_rule(dp, rule) diff --git a/tests/integrated/test_add_flow_v12_actions.py b/tests/integrated/test_add_flow_v12_actions.py new file mode 100644 index 00000000..3c1625ad --- /dev/null +++ b/tests/integrated/test_add_flow_v12_actions.py @@ -0,0 +1,496 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import logging + +from ryu.ofproto import ofproto_v1_2 +from ryu.ofproto import ether +from ryu.ofproto import inet + +from tests.integrated import tester + +LOG = logging.getLogger(__name__) + + +class RunTest(tester.TestFlowBase): + """ Test case for add flows of Actions + """ + OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] + + def __init__(self, *args, **kwargs): + super(RunTest, self).__init__(*args, **kwargs) + + self._verify = [] + + def add_apply_actions(self, dp, actions, match=None): + inst = [dp.ofproto_parser.OFPInstructionActions( + dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] + if match is None: + match = dp.ofproto_parser.OFPMatch() + m = dp.ofproto_parser.OFPFlowMod(dp, 0, 0, 0, + dp.ofproto.OFPFC_ADD, + 0, 0, 0xff, 0xffffffff, + dp.ofproto.OFPP_ANY, + dp.ofproto.OFPG_ANY, + 0, match, inst) + dp.send_msg(m) + + def add_set_field_action(self, dp, field, value, match=None): + self._verify = [dp.ofproto.OFPAT_SET_FIELD, + 'field', field, value] + f = dp.ofproto_parser.OFPMatchField.make(field, value) + actions = [dp.ofproto_parser.OFPActionSetField(f), ] + self.add_apply_actions(dp, actions, match=match) + + def verify_default(self, dp, stats): + verify = self._verify + self._verify = [] + + type_ = name = field = value = None + if len(verify) == 1: + (type_, ) = verify + elif len(verify) == 3: + (type_, name, value) = verify + elif len(verify) == 4: + (type_, name, field, value) = verify + else: + return "self._verify is invalid." + + try: + action = stats[0].instructions[0].actions[0] + if action.cls_action_type != type_: + return "Action type error. send:%s, val:%s" \ + % (type_, action.cls_action_type) + except IndexError: + return "Action is not setting." + + s_val = None + if name: + try: + s_val = getattr(action, name) + except AttributeError: + pass + + if name == 'field': + if s_val.header != field: + return "Field error. send:%s val:%s" \ + % (field, s_val.header) + s_val = s_val.value + + if name and s_val != value: + return "Value error. send:%s=%s val:%s" \ + % (name, value, s_val) + + return True + + def verify_action_drop(self, dp, stats): + for s in stats: + for i in s.instructions: + if len(i.actions): + return "has actions. %s" % (i.actions) + return True + + # Test of General Actions + def test_action_output(self, dp): + out_port = 255 + self._verify = [dp.ofproto.OFPAT_OUTPUT, + 'port', out_port] + + actions = [dp.ofproto_parser.OFPActionOutput(out_port, 0), ] + self.add_apply_actions(dp, actions) + + def test_action_drop(self, dp): + self.add_apply_actions(dp, []) + + # Test of Push-Tag/Pop-Tag Actions + def test_action_push_vlan(self, dp): + ethertype = ether.ETH_TYPE_8021Q + self._verify = [dp.ofproto.OFPAT_PUSH_VLAN, + 'ethertype', ethertype] + + actions = [dp.ofproto_parser.OFPActionPushVlan(ethertype)] + self.add_apply_actions(dp, actions) + + def test_action_pop_vlan(self, dp): + self._verify = [dp.ofproto.OFPAT_POP_VLAN, ] + + actions = [dp.ofproto_parser.OFPActionPopVlan(), ] + match = dp.ofproto_parser.OFPMatch() + match.set_vlan_vid(1) + self.add_apply_actions(dp, actions, match) + + def test_action_push_mpls(self, dp): + ethertype = ether.ETH_TYPE_MPLS + self._verify = [dp.ofproto.OFPAT_PUSH_MPLS, + 'ethertype', ethertype] + + actions = [dp.ofproto_parser.OFPActionPushMpls(ethertype), ] + self.add_apply_actions(dp, actions) + + def test_action_pop_mpls(self, dp): + ethertype = ether.ETH_TYPE_8021Q + self._verify = [dp.ofproto.OFPAT_POP_MPLS, + 'ethertype', ethertype] + actions = [dp.ofproto_parser.OFPActionPopMpls(ethertype), ] + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_MPLS) + self.add_apply_actions(dp, actions, match) + + # Test of Set-Filed Actions + def test_action_set_field_dl_dst(self, dp): + field = dp.ofproto.OXM_OF_ETH_DST + dl_dst = 'e2:7a:09:79:0b:0f' + value = self.haddr_to_bin(dl_dst) + + self.add_set_field_action(dp, field, value) + + def test_action_set_field_dl_src(self, dp): + field = dp.ofproto.OXM_OF_ETH_SRC + dl_src = '08:82:63:b6:62:05' + value = self.haddr_to_bin(dl_src) + + self.add_set_field_action(dp, field, value) + + def test_action_set_field_dl_type(self, dp): + field = dp.ofproto.OXM_OF_ETH_TYPE + value = ether.ETH_TYPE_IPV6 + + self.add_set_field_action(dp, field, value) + + def test_action_set_field_vlan_vid(self, dp): + field = dp.ofproto.OXM_OF_VLAN_VID + value = 0x1e4 + + match = dp.ofproto_parser.OFPMatch() + match.set_vlan_vid(1) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_vlan_pcp(self, dp): + field = dp.ofproto.OXM_OF_VLAN_PCP + value = 3 + + match = dp.ofproto_parser.OFPMatch() + match.set_vlan_vid(1) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_nw_dscp(self, dp): + field = dp.ofproto.OXM_OF_IP_DSCP + value = 32 + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_nw_ecn(self, dp): + field = dp.ofproto.OXM_OF_IP_ECN + value = 1 + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_ip_proto(self, dp): + field = dp.ofproto.OXM_OF_IP_PROTO + value = inet.IPPROTO_TCP + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_ipv4_src(self, dp): + field = dp.ofproto.OXM_OF_IPV4_SRC + ipv4_src = '192.168.3.92' + value = self.ipv4_to_int(ipv4_src) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_ipv4_dst(self, dp): + field = dp.ofproto.OXM_OF_IPV4_DST + ipv4_dst = '192.168.74.122' + value = self.ipv4_to_int(ipv4_dst) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_tcp_src(self, dp): + field = dp.ofproto.OXM_OF_TCP_SRC + value = 105 + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + match.set_ip_proto(inet.IPPROTO_TCP) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_tcp_dst(self, dp): + field = dp.ofproto.OXM_OF_TCP_DST + value = 75 + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + match.set_ip_proto(inet.IPPROTO_TCP) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_udp_src(self, dp): + field = dp.ofproto.OXM_OF_UDP_SRC + value = 197 + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + match.set_ip_proto(inet.IPPROTO_UDP) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_udp_dst(self, dp): + field = dp.ofproto.OXM_OF_UDP_DST + value = 17 + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_IP) + match.set_ip_proto(inet.IPPROTO_UDP) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_icmpv4_type(self, dp): + field = dp.ofproto.OXM_OF_ICMPV4_TYPE + value = 8 + + match = dp.ofproto_parser.OFPMatch() + match.set_ip_proto(inet.IPPROTO_ICMP) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_icmpv4_code(self, dp): + field = dp.ofproto.OXM_OF_ICMPV4_CODE + value = 2 + + match = dp.ofproto_parser.OFPMatch() + match.set_ip_proto(inet.IPPROTO_ICMP) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_arp_op(self, dp): + field = dp.ofproto.OXM_OF_ARP_OP + value = 2 + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_ARP) + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_arp_spa(self, dp): + field = dp.ofproto.OXM_OF_ARP_SPA + nw_src = '192.168.132.179' + value = self.ipv4_to_int(nw_src) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_ARP) + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_arp_tpa(self, dp): + field = dp.ofproto.OXM_OF_ARP_TPA + nw_dst = '192.168.118.85' + value = self.ipv4_to_int(nw_dst) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_ARP) + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_arp_sha(self, dp): + field = dp.ofproto.OXM_OF_ARP_SHA + arp_sha = '50:29:e7:7f:6c:7f' + value = self.haddr_to_bin(arp_sha) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_ARP) + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_arp_tha(self, dp): + field = dp.ofproto.OXM_OF_ARP_THA + arp_tha = '71:c8:72:2f:47:fd' + value = self.haddr_to_bin(arp_tha) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_ARP) + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_ipv6_src(self, dp): + field = dp.ofproto.OXM_OF_IPV6_SRC + ipv6_src = '7527:c798:c772:4a18:117a:14ff:c1b6:e4ef' + value = self.ipv6_to_int(ipv6_src) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(0x86dd) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_ipv6_dst(self, dp): + field = dp.ofproto.OXM_OF_IPV6_DST + ipv6_dst = '8893:65b3:6b49:3bdb:3d2:9401:866c:c96' + value = self.ipv6_to_int(ipv6_dst) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(0x86dd) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_ipv6_flabel(self, dp): + field = dp.ofproto.OXM_OF_IPV6_FLABEL + value = 0x2c12 + + self.add_set_field_action(dp, field, value) + + def test_action_set_field_icmpv6_type(self, dp): + field = dp.ofproto.OXM_OF_ICMPV6_TYPE + value = 129 + + self.add_set_field_action(dp, field, value) + + def test_action_set_field_icmpv6_code(self, dp): + field = dp.ofproto.OXM_OF_ICMPV6_CODE + value = 2 + + self.add_set_field_action(dp, field, value) + + def test_action_set_field_ipv6_nd_target(self, dp): + field = dp.ofproto.OXM_OF_IPV6_ND_TARGET + target = "5420:db3f:921b:3e33:2791:98f:dd7f:2e19" + value = self.ipv6_to_int(target) + + self.add_set_field_action(dp, field, value) + + def test_action_set_field_ipv6_nd_sll(self, dp): + field = dp.ofproto.OXM_OF_IPV6_ND_SLL + sll = "54:db:3f:3e:27:19" + value = self.haddr_to_bin(sll) + + self.add_set_field_action(dp, field, value) + + def test_action_set_field_ipv6_nd_tll(self, dp): + field = dp.ofproto.OXM_OF_IPV6_ND_TLL + tll = "83:13:48:1e:d0:b0" + value = self.haddr_to_bin(tll) + + self.add_set_field_action(dp, field, value) + + def test_action_set_field_mpls_label(self, dp): + field = dp.ofproto.OXM_OF_MPLS_LABEL + value = 0x4c + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_MPLS) + + self.add_set_field_action(dp, field, value, match) + + def test_action_set_field_mpls_tc(self, dp): + field = dp.ofproto.OXM_OF_MPLS_TC + value = 0b101 + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_MPLS) + + self.add_set_field_action(dp, field, value, match) + + # Test of Change-TTL Actions + def test_action_set_mpls_ttl(self, dp): + mpls_ttl = 8 + self._verify = [dp.ofproto.OFPAT_SET_MPLS_TTL, + 'mpls_ttl', mpls_ttl] + actions = [dp.ofproto_parser.OFPActionSetMplsTtl(mpls_ttl), ] + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_MPLS) + self.add_apply_actions(dp, actions, match) + + def test_action_dec_mpls_ttl(self, dp): + self._verify = [dp.ofproto.OFPAT_DEC_MPLS_TTL] + actions = [dp.ofproto_parser.OFPActionDecMplsTtl(), ] + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(ether.ETH_TYPE_MPLS) + self.add_apply_actions(dp, actions, match) + + def test_action_set_nw_ttl_ipv4(self, dp): + nw_ttl = 64 + self._verify = [dp.ofproto.OFPAT_SET_NW_TTL, + 'nw_ttl', nw_ttl] + actions = [dp.ofproto_parser.OFPActionSetNwTtl(nw_ttl), ] + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(0x0800) + self.add_apply_actions(dp, actions, match) + + def test_action_set_nw_ttl_ipv6(self, dp): + nw_ttl = 64 + self._verify = [dp.ofproto.OFPAT_SET_NW_TTL, + 'nw_ttl', nw_ttl] + actions = [dp.ofproto_parser.OFPActionSetNwTtl(nw_ttl), ] + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(0x86dd) + self.add_apply_actions(dp, actions, match) + + def test_action_dec_nw_ttl_ipv4(self, dp): + self._verify = [dp.ofproto.OFPAT_DEC_NW_TTL] + actions = [dp.ofproto_parser.OFPActionDecNwTtl(), ] + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(0x0800) + self.add_apply_actions(dp, actions, match) + + def test_action_dec_nw_ttl_ipv6(self, dp): + self._verify = [dp.ofproto.OFPAT_DEC_NW_TTL] + actions = [dp.ofproto_parser.OFPActionDecNwTtl(), ] + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(0x86dd) + self.add_apply_actions(dp, actions, match) + + def test_action_copy_ttl_out(self, dp): + self._verify = [dp.ofproto.OFPAT_COPY_TTL_OUT] + actions = [dp.ofproto_parser.OFPActionCopyTtlOut(), ] + self.add_apply_actions(dp, actions) + + def test_action_copy_ttl_in(self, dp): + self._verify = [dp.ofproto.OFPAT_COPY_TTL_IN] + actions = [dp.ofproto_parser.OFPActionCopyTtlIn(), ] + self.add_apply_actions(dp, actions) + + def is_supported(self, t): + # Open vSwitch 1.10 does not support MPLS yet. + unsupported = [ + 'test_action_set_field_ip_proto', + 'test_action_set_field_dl_type', + 'test_action_set_field_icmp', + 'test_action_set_field_icmpv6_code', + 'test_action_set_field_icmpv6_type', + 'test_action_set_field_ipv6_flabel', + 'test_action_set_field_ipv6_nd_sll', + 'test_action_set_field_ipv6_nd_target', + 'test_action_set_field_ipv6_nd_tll', + 'test_action_copy_ttl_in', + 'test_action_copy_ttl_out' + ] + for u in unsupported: + if t.find(u) != -1: + return False + + return True diff --git a/tests/integrated/test_add_flow_v12_matches.py b/tests/integrated/test_add_flow_v12_matches.py new file mode 100644 index 00000000..404e45ef --- /dev/null +++ b/tests/integrated/test_add_flow_v12_matches.py @@ -0,0 +1,1200 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import logging + +from ryu.ofproto import ofproto_v1_2 +from ryu.ofproto import ether +from ryu.ofproto import inet + +from tests.integrated import tester + +LOG = logging.getLogger(__name__) + + +class RunTest(tester.TestFlowBase): + """ Test case for add flows of Matches + """ + OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] + + def __init__(self, *args, **kwargs): + super(RunTest, self).__init__(*args, **kwargs) + + self._verify = {} + + def add_matches(self, dp, match): + m = dp.ofproto_parser.OFPFlowMod(dp, 0, 0, 0, + dp.ofproto.OFPFC_ADD, + 0, 0, 0, 0xffffffff, + dp.ofproto.OFPP_ANY, + 0xffffffff, 0, match, []) + dp.send_msg(m) + + def _set_verify(self, headers, value, mask=None, + all_bits_masked=False, type_='int'): + self._verify = {} + self._verify['headers'] = headers + self._verify['value'] = value + self._verify['mask'] = mask + self._verify['all_bits_masked'] = all_bits_masked + self._verify['type'] = type_ + + def verify_default(self, dp, stats): + type_ = self._verify['type'] + headers = self._verify['headers'] + value = self._verify['value'] + mask = self._verify['mask'] + value_masked = self._masked(type_, value, mask) + all_bits_masked = self._verify['all_bits_masked'] + + field = None + for s in stats: + for f in s.match.fields: + if f.header in headers: + field = f + break + + if field is None: + if self._is_all_zero_bit(type_, mask): + return True + return 'Field not found.' + + f_value = field.value + if hasattr(field, 'mask'): + f_mask = field.mask + else: + f_mask = None + + if (f_value == value) or (f_value == value_masked): + if (f_mask == mask) or (all_bits_masked and f_mask is None): + return True + + return "send: %s/%s, reply: %s/%s" \ + % (self._cnv_to_str(type_, value, mask, f_value, f_mask)) + + def _masked(self, type_, value, mask): + if mask is None: + v = value + elif type_ == 'int': + v = value & mask + elif type_ == 'mac': + v = self.haddr_masked(value, mask) + elif type_ == 'ipv4': + v = self.ipv4_masked(value, mask) + elif type_ == 'ipv6': + v = self.ipv6_masked(value, mask) + else: + raise Exception('Unknown type') + return v + + def _is_all_zero_bit(self, type_, val): + if type_ == 'int' or type_ == 'ipv4': + return val == 0 + elif type_ == 'mac': + for v in val: + if v != b'\x00': + return False + return True + elif type_ == 'ipv6': + for v in val: + if v != 0: + return False + return True + else: + raise Exception('Unknown type') + + def _cnv_to_str(self, type_, value, mask, f_value, f_mask): + func = None + if type_ == 'int': + pass + elif type_ == 'mac': + func = self.haddr_to_str + elif type_ == 'ipv4': + func = self.ipv4_to_str + elif type_ == 'ipv6': + func = self.ipv6_to_str + else: + raise Exception('Unknown type') + + if func: + value = func(value) + f_value = func(f_value) + if mask: + mask = func(mask) + if f_mask: + f_mask = func(f_mask) + + return value, mask, f_value, f_mask + + def test_rule_set_dl_dst(self, dp): + dl_dst = 'e2:7a:09:79:0b:0f' + dl_dst_bin = self.haddr_to_bin(dl_dst) + + headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] + self._set_verify(headers, dl_dst_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_dst(dl_dst_bin) + self.add_matches(dp, match) + + def test_rule_set_dl_dst_masked_ff(self, dp): + dl_dst = 'd0:98:79:b4:75:b5' + dl_dst_bin = self.haddr_to_bin(dl_dst) + mask = 'ff:ff:ff:ff:ff:ff' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] + self._set_verify(headers, dl_dst_bin, mask_bin, True, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_dst_masked(dl_dst_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_dl_dst_masked_f0(self, dp): + dl_dst = 'e2:7a:09:79:0b:0f' + dl_dst_bin = self.haddr_to_bin(dl_dst) + mask = 'ff:ff:ff:ff:ff:00' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] + self._set_verify(headers, dl_dst_bin, mask_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_dst_masked(dl_dst_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_dl_dst_masked_00(self, dp): + dl_dst = 'e2:7a:09:79:0b:0f' + dl_dst_bin = self.haddr_to_bin(dl_dst) + mask = '00:00:00:00:00:00' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ETH_DST, dp.ofproto.OXM_OF_ETH_DST_W] + self._set_verify(headers, dl_dst_bin, mask_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_dst_masked(dl_dst_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_dl_src(self, dp): + dl_src = 'e2:7a:09:79:0b:0f' + dl_src_bin = self.haddr_to_bin(dl_src) + + headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] + self._set_verify(headers, dl_src_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_src(dl_src_bin) + self.add_matches(dp, match) + + def test_rule_set_dl_src_masked_ff(self, dp): + dl_src = 'e2:7a:09:79:0b:0f' + dl_src_bin = self.haddr_to_bin(dl_src) + mask = 'ff:ff:ff:ff:ff:ff' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] + self._set_verify(headers, dl_src_bin, mask_bin, True, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_src_masked(dl_src_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_dl_src_masked_f0(self, dp): + dl_src = 'e2:7a:09:79:0b:0f' + dl_src_bin = self.haddr_to_bin(dl_src) + mask = 'ff:ff:ff:ff:ff:00' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] + self._set_verify(headers, dl_src_bin, mask_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_src_masked(dl_src_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_dl_src_masked_00(self, dp): + dl_src = 'e2:7a:09:79:0b:0f' + dl_src_bin = self.haddr_to_bin(dl_src) + mask = '00:00:00:00:00:00' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ETH_SRC, dp.ofproto.OXM_OF_ETH_SRC_W] + self._set_verify(headers, dl_src_bin, mask_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_src_masked(dl_src_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_dl_type_ip(self, dp): + dl_type = ether.ETH_TYPE_IP + + headers = [dp.ofproto.OXM_OF_ETH_TYPE] + self._set_verify(headers, dl_type) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + self.add_matches(dp, match) + + def test_rule_set_dl_type_arp(self, dp): + dl_type = ether.ETH_TYPE_ARP + + headers = [dp.ofproto.OXM_OF_ETH_TYPE] + self._set_verify(headers, dl_type) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + self.add_matches(dp, match) + + def test_rule_set_dl_type_vlan(self, dp): + dl_type = ether.ETH_TYPE_8021Q + + headers = [dp.ofproto.OXM_OF_ETH_TYPE] + self._set_verify(headers, dl_type) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + self.add_matches(dp, match) + + def test_rule_set_dl_type_ipv6(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + + headers = [dp.ofproto.OXM_OF_ETH_TYPE] + self._set_verify(headers, dl_type) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + self.add_matches(dp, match) + + def test_rule_set_dl_type_lacp(self, dp): + dl_type = ether.ETH_TYPE_SLOW + + headers = [dp.ofproto.OXM_OF_ETH_TYPE] + self._set_verify(headers, dl_type) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + self.add_matches(dp, match) + + def test_rule_set_ip_dscp(self, dp): + ip_dscp = 36 + dl_type = ether.ETH_TYPE_IP + + headers = [dp.ofproto.OXM_OF_IP_DSCP] + self._set_verify(headers, ip_dscp) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_dscp(ip_dscp) + self.add_matches(dp, match) + + def test_rule_set_vlan_vid(self, dp): + vlan_vid = 0x4ef + + headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] + self._set_verify(headers, vlan_vid) + + match = dp.ofproto_parser.OFPMatch() + match.set_vlan_vid(vlan_vid) + self.add_matches(dp, match) + + def test_rule_set_vlan_vid_masked_ff(self, dp): + vlan_vid = 0x4ef + mask = 0xfff + + headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] + self._set_verify(headers, vlan_vid, mask, True) + + match = dp.ofproto_parser.OFPMatch() + match.set_vlan_vid_masked(vlan_vid, mask) + self.add_matches(dp, match) + + def test_rule_set_vlan_vid_masked_f0(self, dp): + vlan_vid = 0x4ef + mask = 0xff0 + + headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] + self._set_verify(headers, vlan_vid, mask) + + match = dp.ofproto_parser.OFPMatch() + match.set_vlan_vid_masked(vlan_vid, mask) + self.add_matches(dp, match) + + def test_rule_set_vlan_vid_masked_00(self, dp): + vlan_vid = 0x4ef + mask = 0x000 + + headers = [dp.ofproto.OXM_OF_VLAN_VID, dp.ofproto.OXM_OF_VLAN_VID_W] + self._set_verify(headers, vlan_vid, mask) + + match = dp.ofproto_parser.OFPMatch() + match.set_vlan_vid_masked(vlan_vid, mask) + self.add_matches(dp, match) + + def test_rule_set_vlan_pcp(self, dp): + vlan_vid = 0x4ef + vlan_pcp = 5 + + headers = [dp.ofproto.OXM_OF_VLAN_PCP] + self._set_verify(headers, vlan_pcp) + + match = dp.ofproto_parser.OFPMatch() + match.set_vlan_vid(vlan_vid) + match.set_vlan_pcp(vlan_pcp) + self.add_matches(dp, match) + + def test_rule_set_ip_ecn(self, dp): + dl_type = ether.ETH_TYPE_IP + ip_ecn = 3 + + headers = [dp.ofproto.OXM_OF_IP_ECN] + self._set_verify(headers, ip_ecn) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_ecn(ip_ecn) + self.add_matches(dp, match) + + def test_rule_set_ip_proto_icmp(self, dp): + dl_type = ether.ETH_TYPE_IP + ip_proto = inet.IPPROTO_ICMP + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + self.add_matches(dp, match) + + def test_rule_set_ip_proto_tcp(self, dp): + dl_type = ether.ETH_TYPE_IP + ip_proto = inet.IPPROTO_TCP + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + self.add_matches(dp, match) + + def test_rule_set_ip_proto_udp(self, dp): + dl_type = ether.ETH_TYPE_IP + ip_proto = inet.IPPROTO_UDP + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + self.add_matches(dp, match) + + def test_rule_set_ip_proto_ipv6_route(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ip_proto = inet.IPPROTO_ROUTING + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + self.add_matches(dp, match) + + def test_rule_set_ip_proto_ipv6_frag(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ip_proto = inet.IPPROTO_FRAGMENT + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + self.add_matches(dp, match) + + def test_rule_set_ip_proto_ipv6_icmp(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ip_proto = inet.IPPROTO_ICMPV6 + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + self.add_matches(dp, match) + + def test_rule_set_ip_proto_ipv6_none(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ip_proto = inet.IPPROTO_NONE + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + self.add_matches(dp, match) + + def test_rule_set_ip_proto_ipv6_dstopts(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ip_proto = inet.IPPROTO_DSTOPTS + + headers = [dp.ofproto.OXM_OF_IP_PROTO] + self._set_verify(headers, ip_proto) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + self.add_matches(dp, match) + + def test_rule_set_ipv4_src(self, dp): + dl_type = ether.ETH_TYPE_IP + src = '192.168.196.250' + src_int = self.ipv4_to_int(src) + + headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] + self._set_verify(headers, src_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv4_src(src_int) + self.add_matches(dp, match) + + def test_rule_set_ipv4_src_masked_32(self, dp): + dl_type = ether.ETH_TYPE_IP + src = '192.168.196.250' + src_int = self.ipv4_to_int(src) + mask = '255.255.255.255' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] + self._set_verify(headers, src_int, mask_int, True, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv4_src_masked(src_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_ipv4_src_masked_24(self, dp): + dl_type = ether.ETH_TYPE_IP + src = '192.168.196.250' + src_int = self.ipv4_to_int(src) + mask = '255.255.255.0' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] + self._set_verify(headers, src_int, mask_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv4_src_masked(src_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_ipv4_src_masked_0(self, dp): + dl_type = ether.ETH_TYPE_IP + src = '192.168.196.250' + src_int = self.ipv4_to_int(src) + mask = '0.0.0.0' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV4_SRC, dp.ofproto.OXM_OF_IPV4_SRC_W] + self._set_verify(headers, src_int, mask_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv4_src_masked(src_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_ipv4_dst(self, dp): + dl_type = ether.ETH_TYPE_IP + dst = '192.168.54.155' + dst_int = self.ipv4_to_int(dst) + + headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] + self._set_verify(headers, dst_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv4_dst(dst_int) + self.add_matches(dp, match) + + def test_rule_set_ipv4_dst_masked_32(self, dp): + dl_type = ether.ETH_TYPE_IP + dst = '192.168.54.155' + dst_int = self.ipv4_to_int(dst) + mask = '255.255.255.255' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] + self._set_verify(headers, dst_int, mask_int, True, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv4_dst_masked(dst_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_ipv4_dst_masked_24(self, dp): + dl_type = ether.ETH_TYPE_IP + dst = '192.168.54.155' + dst_int = self.ipv4_to_int(dst) + mask = '255.255.255.0' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] + self._set_verify(headers, dst_int, mask_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv4_dst_masked(dst_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_ipv4_dst_masked_0(self, dp): + dl_type = ether.ETH_TYPE_IP + dst = '192.168.54.155' + dst_int = self.ipv4_to_int(dst) + mask = '0.0.0.0' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV4_DST, dp.ofproto.OXM_OF_IPV4_DST_W] + self._set_verify(headers, dst_int, mask_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv4_dst_masked(dst_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_tcp_src(self, dp): + dl_type = ether.ETH_TYPE_IP + ip_proto = inet.IPPROTO_TCP + tp_src = 1103 + + headers = [dp.ofproto.OXM_OF_TCP_SRC] + self._set_verify(headers, tp_src) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + match.set_tcp_src(tp_src) + self.add_matches(dp, match) + + def test_rule_set_tcp_dst(self, dp): + dl_type = ether.ETH_TYPE_IP + ip_proto = inet.IPPROTO_TCP + tp_dst = 236 + + headers = [dp.ofproto.OXM_OF_TCP_DST] + self._set_verify(headers, tp_dst) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + match.set_tcp_dst(tp_dst) + self.add_matches(dp, match) + + def test_rule_set_udp_src(self, dp): + dl_type = ether.ETH_TYPE_IP + ip_proto = inet.IPPROTO_UDP + tp_src = 56617 + + headers = [dp.ofproto.OXM_OF_UDP_SRC] + self._set_verify(headers, tp_src) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + match.set_udp_src(tp_src) + self.add_matches(dp, match) + + def test_rule_set_udp_dst(self, dp): + dl_type = ether.ETH_TYPE_IP + ip_proto = inet.IPPROTO_UDP + tp_dst = 61278 + + headers = [dp.ofproto.OXM_OF_UDP_DST] + self._set_verify(headers, tp_dst) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + match.set_udp_dst(tp_dst) + self.add_matches(dp, match) + + def test_rule_set_icmpv4_type(self, dp): + dl_type = ether.ETH_TYPE_IP + ip_proto = inet.IPPROTO_ICMP + icmp_type = 8 + + headers = [dp.ofproto.OXM_OF_ICMPV4_TYPE] + self._set_verify(headers, icmp_type) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + match.set_icmpv4_type(icmp_type) + self.add_matches(dp, match) + + def test_rule_set_icmpv4_code(self, dp): + dl_type = ether.ETH_TYPE_IP + ip_proto = inet.IPPROTO_ICMP + icmp_type = 9 + icmp_code = 16 + + headers = [dp.ofproto.OXM_OF_ICMPV4_CODE] + self._set_verify(headers, icmp_code) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + match.set_icmpv4_type(icmp_type) + match.set_icmpv4_code(icmp_code) + self.add_matches(dp, match) + + def test_rule_set_arp_opcode(self, dp): + dl_type = ether.ETH_TYPE_ARP + arp_op = 1 + + headers = [dp.ofproto.OXM_OF_ARP_OP] + self._set_verify(headers, arp_op) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_opcode(arp_op) + self.add_matches(dp, match) + + def test_rule_set_arp_spa(self, dp): + dl_type = ether.ETH_TYPE_ARP + nw_src = '192.168.222.57' + nw_src_int = self.ipv4_to_int(nw_src) + + headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] + self._set_verify(headers, nw_src_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_spa(nw_src_int) + self.add_matches(dp, match) + + def test_rule_set_arp_spa_masked_32(self, dp): + dl_type = ether.ETH_TYPE_ARP + nw_src = '192.168.222.57' + nw_src_int = self.ipv4_to_int(nw_src) + mask = '255.255.255.255' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] + self._set_verify(headers, nw_src_int, mask_int, True, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_spa_masked(nw_src_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_arp_spa_masked_24(self, dp): + dl_type = ether.ETH_TYPE_ARP + nw_src = '192.168.222.57' + nw_src_int = self.ipv4_to_int(nw_src) + mask = '255.255.255.0' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] + self._set_verify(headers, nw_src_int, mask_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_spa_masked(nw_src_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_arp_spa_masked_00(self, dp): + dl_type = ether.ETH_TYPE_ARP + nw_src = '192.168.222.57' + nw_src_int = self.ipv4_to_int(nw_src) + mask = '0.0.0.0' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_ARP_SPA, dp.ofproto.OXM_OF_ARP_SPA_W] + self._set_verify(headers, nw_src_int, mask_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_spa_masked(nw_src_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_arp_tpa(self, dp): + dl_type = ether.ETH_TYPE_ARP + nw_dst = '192.168.198.233' + nw_dst_int = self.ipv4_to_int(nw_dst) + + headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] + self._set_verify(headers, nw_dst_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_tpa(nw_dst_int) + self.add_matches(dp, match) + + def test_rule_set_arp_tpa_masked_32(self, dp): + dl_type = ether.ETH_TYPE_ARP + nw_dst = '192.168.198.233' + nw_dst_int = self.ipv4_to_int(nw_dst) + mask = '255.255.255.255' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] + self._set_verify(headers, nw_dst_int, mask_int, True, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_tpa_masked(nw_dst_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_arp_tpa_masked_24(self, dp): + dl_type = ether.ETH_TYPE_ARP + nw_dst = '192.168.198.233' + nw_dst_int = self.ipv4_to_int(nw_dst) + mask = '255.255.255.0' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] + self._set_verify(headers, nw_dst_int, mask_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_tpa_masked(nw_dst_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_arp_tpa_masked_00(self, dp): + dl_type = ether.ETH_TYPE_ARP + nw_dst = '192.168.198.233' + nw_dst_int = self.ipv4_to_int(nw_dst) + mask = '0.0.0.0' + mask_int = self.ipv4_to_int(mask) + + headers = [dp.ofproto.OXM_OF_ARP_TPA, dp.ofproto.OXM_OF_ARP_TPA_W] + self._set_verify(headers, nw_dst_int, mask_int, type_='ipv4') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_tpa_masked(nw_dst_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_arp_sha(self, dp): + dl_type = ether.ETH_TYPE_ARP + arp_sha = '3e:ec:13:9b:f3:0b' + arp_sha_bin = self.haddr_to_bin(arp_sha) + + headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] + self._set_verify(headers, arp_sha_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_sha(arp_sha_bin) + self.add_matches(dp, match) + + def test_rule_set_arp_sha_masked_ff(self, dp): + dl_type = ether.ETH_TYPE_ARP + arp_sha = '3e:ec:13:9b:f3:0b' + arp_sha_bin = self.haddr_to_bin(arp_sha) + mask = 'ff:ff:ff:ff:ff:ff' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] + self._set_verify(headers, arp_sha_bin, mask_bin, True, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_sha_masked(arp_sha_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_arp_sha_masked_f0(self, dp): + dl_type = ether.ETH_TYPE_ARP + arp_sha = '3e:ec:13:9b:f3:0b' + arp_sha_bin = self.haddr_to_bin(arp_sha) + mask = 'ff:ff:ff:ff:ff:00' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] + self._set_verify(headers, arp_sha_bin, mask_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_sha_masked(arp_sha_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_arp_sha_masked_00(self, dp): + dl_type = ether.ETH_TYPE_ARP + arp_sha = '3e:ec:13:9b:f3:0b' + arp_sha_bin = self.haddr_to_bin(arp_sha) + mask = '00:00:00:00:00:00' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ARP_SHA, dp.ofproto.OXM_OF_ARP_SHA_W] + self._set_verify(headers, arp_sha_bin, mask_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_sha_masked(arp_sha_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_arp_tha(self, dp): + dl_type = ether.ETH_TYPE_ARP + arp_tha = '83:6c:21:52:49:68' + arp_tha_bin = self.haddr_to_bin(arp_tha) + + headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] + self._set_verify(headers, arp_tha_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_tha(arp_tha_bin) + self.add_matches(dp, match) + + def test_rule_set_arp_tha_masked_ff(self, dp): + dl_type = ether.ETH_TYPE_ARP + arp_tha = '83:6c:21:52:49:68' + arp_tha_bin = self.haddr_to_bin(arp_tha) + mask = 'ff:ff:ff:ff:ff:ff' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] + self._set_verify(headers, arp_tha_bin, mask_bin, True, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_tha_masked(arp_tha_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_arp_tha_masked_f0(self, dp): + dl_type = ether.ETH_TYPE_ARP + arp_tha = '83:6c:21:52:49:68' + arp_tha_bin = self.haddr_to_bin(arp_tha) + mask = 'ff:ff:ff:ff:ff:00' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] + self._set_verify(headers, arp_tha_bin, mask_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_tha_masked(arp_tha_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_arp_tha_masked_00(self, dp): + dl_type = ether.ETH_TYPE_ARP + arp_tha = '83:6c:21:52:49:68' + arp_tha_bin = self.haddr_to_bin(arp_tha) + mask = '00:00:00:00:00:00' + mask_bin = self.haddr_to_bin(mask) + + headers = [dp.ofproto.OXM_OF_ARP_THA, dp.ofproto.OXM_OF_ARP_THA_W] + self._set_verify(headers, arp_tha_bin, mask_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_arp_tha_masked(arp_tha_bin, mask_bin) + self.add_matches(dp, match) + + def test_rule_set_ipv6_src(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_src = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' + ipv6_src_int = self.ipv6_to_int(ipv6_src) + + headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] + self._set_verify(headers, ipv6_src_int, type_='ipv6') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_src(ipv6_src_int) + self.add_matches(dp, match) + + def test_rule_set_ipv6_src_masked_ff(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_src = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' + ipv6_src_int = self.ipv6_to_int(ipv6_src) + mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' + mask_int = self.ipv6_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] + self._set_verify(headers, ipv6_src_int, mask_int, True, type_='ipv6') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_src_masked(ipv6_src_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_ipv6_src_masked_f0(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_src = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' + ipv6_src_int = self.ipv6_to_int(ipv6_src) + mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:0' + mask_int = self.ipv6_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] + self._set_verify(headers, ipv6_src_int, mask_int, type_='ipv6') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_src_masked(ipv6_src_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_ipv6_src_masked_00(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_src = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' + ipv6_src_int = self.ipv6_to_int(ipv6_src) + mask = '0:0:0:0:0:0:0:0' + mask_int = self.ipv6_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV6_SRC, dp.ofproto.OXM_OF_IPV6_SRC_W] + self._set_verify(headers, ipv6_src_int, mask_int, type_='ipv6') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_src_masked(ipv6_src_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_ipv6_dst(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_dst = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' + ipv6_dst_int = self.ipv6_to_int(ipv6_dst) + + headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] + self._set_verify(headers, ipv6_dst_int, type_='ipv6') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_dst(ipv6_dst_int) + self.add_matches(dp, match) + + def test_rule_set_ipv6_dst_masked_ff(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_dst = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' + ipv6_dst_int = self.ipv6_to_int(ipv6_dst) + mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' + mask_int = self.ipv6_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] + self._set_verify(headers, ipv6_dst_int, mask_int, True, type_='ipv6') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_dst_masked(ipv6_dst_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_ipv6_dst_masked_f0(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_dst = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' + ipv6_dst_int = self.ipv6_to_int(ipv6_dst) + mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:0' + mask_int = self.ipv6_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] + self._set_verify(headers, ipv6_dst_int, mask_int, type_='ipv6') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_dst_masked(ipv6_dst_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_ipv6_dst_masked_00(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_dst = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' + ipv6_dst_int = self.ipv6_to_int(ipv6_dst) + mask = '0:0:0:0:0:0:0:0' + mask_int = self.ipv6_to_int(mask) + + headers = [dp.ofproto.OXM_OF_IPV6_DST, dp.ofproto.OXM_OF_IPV6_DST_W] + self._set_verify(headers, ipv6_dst_int, mask_int, type_='ipv6') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_dst_masked(ipv6_dst_int, mask_int) + self.add_matches(dp, match) + + def test_rule_set_ipv6_flabel(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_label = 0xc5384 + + headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, + dp.ofproto.OXM_OF_IPV6_FLABEL_W] + self._set_verify(headers, ipv6_label) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_flabel(ipv6_label) + self.add_matches(dp, match) + + def test_rule_set_ipv6_flabel_masked_ff(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_label = 0xc5384 + mask = 0xfffff + + headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, + dp.ofproto.OXM_OF_IPV6_FLABEL_W] + self._set_verify(headers, ipv6_label, mask, True) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_flabel_masked(ipv6_label, mask) + self.add_matches(dp, match) + + def test_rule_set_ipv6_flabel_masked_f0(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_label = 0xc5384 + mask = 0xffff0 + + headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, + dp.ofproto.OXM_OF_IPV6_FLABEL_W] + self._set_verify(headers, ipv6_label, mask) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_flabel_masked(ipv6_label, mask) + self.add_matches(dp, match) + + def test_rule_set_ipv6_flabel_masked_00(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ipv6_label = 0xc5384 + mask = 0x0 + + headers = [dp.ofproto.OXM_OF_IPV6_FLABEL, + dp.ofproto.OXM_OF_IPV6_FLABEL_W] + self._set_verify(headers, ipv6_label, mask) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ipv6_flabel_masked(ipv6_label, mask) + self.add_matches(dp, match) + + def test_rule_set_icmpv6_type(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ip_proto = inet.IPPROTO_ICMPV6 + icmp_type = 129 + + headers = [dp.ofproto.OXM_OF_ICMPV6_TYPE] + self._set_verify(headers, icmp_type) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + match.set_icmpv6_type(icmp_type) + self.add_matches(dp, match) + + def test_rule_set_icmpv6_code(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ip_proto = inet.IPPROTO_ICMPV6 + icmp_type = 138 + icmp_code = 1 + + headers = [dp.ofproto.OXM_OF_ICMPV6_CODE] + self._set_verify(headers, icmp_code) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + match.set_icmpv6_type(icmp_type) + match.set_icmpv6_code(icmp_code) + self.add_matches(dp, match) + + def test_rule_set_ipv6_nd_target(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ip_proto = inet.IPPROTO_ICMPV6 + icmp_type = 135 + target = "5420:db3f:921b:3e33:2791:98f:dd7f:2e19" + target_int = self.ipv6_to_int(target) + + headers = [dp.ofproto.OXM_OF_IPV6_ND_TARGET] + self._set_verify(headers, target_int, type_='ipv6') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + match.set_icmpv6_type(icmp_type) + match.set_ipv6_nd_target(target_int) + self.add_matches(dp, match) + + def test_rule_set_ipv6_nd_sll(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ip_proto = inet.IPPROTO_ICMPV6 + icmp_type = 135 + nd_sll = "93:6d:d0:d4:e8:36" + nd_sll_bin = self.haddr_to_bin(nd_sll) + + headers = [dp.ofproto.OXM_OF_IPV6_ND_SLL] + self._set_verify(headers, nd_sll_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + match.set_icmpv6_type(icmp_type) + match.set_ipv6_nd_sll(nd_sll_bin) + self.add_matches(dp, match) + + def test_rule_set_ipv6_nd_tll(self, dp): + dl_type = ether.ETH_TYPE_IPV6 + ip_proto = inet.IPPROTO_ICMPV6 + icmp_type = 136 + nd_tll = "18:f6:66:b6:f1:b3" + nd_tll_bin = self.haddr_to_bin(nd_tll) + + headers = [dp.ofproto.OXM_OF_IPV6_ND_TLL] + self._set_verify(headers, nd_tll_bin, type_='mac') + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_ip_proto(ip_proto) + match.set_icmpv6_type(icmp_type) + match.set_ipv6_nd_tll(nd_tll_bin) + self.add_matches(dp, match) + + def test_rule_set_mpls_label(self, dp): + dl_type = 0x8847 + label = 2144 + + headers = [dp.ofproto.OXM_OF_MPLS_LABEL] + self._set_verify(headers, label) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_mpls_label(label) + self.add_matches(dp, match) + + def test_rule_set_mpls_tc(self, dp): + dl_type = 0x8847 + tc = 3 + + headers = [dp.ofproto.OXM_OF_MPLS_TC] + self._set_verify(headers, tc) + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_type(dl_type) + match.set_mpls_tc(tc) + self.add_matches(dp, match) + + def is_supported(self, t): + # Open vSwitch 1.10 does not support MPLS yet. + unsupported = [ + 'test_rule_set_mpls_label', + 'test_rule_set_mpls_tc', + ] + for u in unsupported: + if t.find(u) != -1: + return False + + return True diff --git a/tests/integrated/test_of_config.py b/tests/integrated/test_of_config.py new file mode 100644 index 00000000..654b1489 --- /dev/null +++ b/tests/integrated/test_of_config.py @@ -0,0 +1,328 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 Isaku Yamahata +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +How to run this test + +edit linc config file. LINC-Switch/rel/linc/releases/1.0/sys.config +You can find the sample config I used for the test below + +For this following config to work, the network interface +linc-port and linc-port2 must be created before hand. +(Or edit the port name depending on your environment) +An easy way is to create them as follows +# ip link add linc-port type veth peer name linc-port-peer +# ip link set linc-port up +# ip link add linc-port2 type veth peer name linc-port-peer2 +# ip link set linc-port2 up + +Then run linc +# rel/linc/bin/linc console + +Then run ryu +# PYTHONPATH=. ./bin/ryu-manager --verbose \ + tests/integrated/test_of_config.py + + +Here is my sys.config used for this test. +-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8--- +[ + {linc, + [ + {of_config, enabled}, + + {logical_switches, + [ + {switch, 0, + [ + {backend, linc_us4}, + + {controllers, + [ + {"Switch0-DefaultController", "localhost", 6633, tcp} + ]}, + + {ports, + [ + {port, 1, [{interface, "linc-port"}]}, + {port, 2, [{interface, "linc-port2"}]} + ]}, + + {queues_status, disabled}, + + {queues, + [ + ]} + ]} + ]} + ]}, + + {enetconf, + [ + {capabilities, [{base, {1, 1}}, + {startup, {1, 0}}, + {'writable-running', {1, 0}}]}, + {callback_module, linc_ofconfig}, + {sshd_ip, any}, + {sshd_port, 1830}, + {sshd_user_passwords, + [ + {"linc", "linc"} + ]} + ]}, + + {lager, + [ + {handlers, + [ + {lager_console_backend, info}, + {lager_file_backend, + [ + {"log/error.log", error, 10485760, "$D0", 5}, + {"log/console.log", info, 10485760, "$D0", 5} + ]} + ]} + ]}, + + {sasl, + [ + {sasl_error_logger, {file, "log/sasl-error.log"}}, + {errlog_type, error}, + {error_logger_mf_dir, "log/sasl"}, % Log directory + {error_logger_mf_maxbytes, 10485760}, % 10 MB max file size + {error_logger_mf_maxfiles, 5} % 5 files max + ]} +]. +-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-->8-- + +""" + +from __future__ import print_function + +import traceback + +import lxml.etree +import ncclient + +from ryu.base import app_manager +from ryu.lib.netconf import constants as nc_consts +from ryu.lib import hub +from ryu.lib import of_config +from ryu.lib.of_config import capable_switch +from ryu.lib.of_config import constants as ofc_consts + + +# Change those depending on switch configuration +HOST = '127.0.0.1' +PORT = 1830 +USERNAME = 'linc' +PASSWORD = 'linc' + +CAPABLE_SWITCH_ID = 'CapableSwitch0' +LOGICAL_SWITCH = 'LogicalSwitch0' +PORT_ID = 'LogicalSwitch0-Port2' +CONTROLLER_ID = 'Switch0-DefaultController' + +PORT_DICT = { + 'capable_switch': CAPABLE_SWITCH_ID, + 'port_id': PORT_ID, + 'logical_switch': LOGICAL_SWITCH, + 'controller_id': CONTROLLER_ID, + 'ip': HOST, +} + +SWITCH_PORT_DOWN = ''' + + + %(capable_switch)s + + + %(port_id)s + + down + false + false + false + + + + + +''' % PORT_DICT + +SWITCH_ADVERTISED = ''' + + + %(capable_switch)s + + + %(port_id)s + + + 10Mb-FD + true + copper + unsupported + + + + + + +''' % PORT_DICT + +SWITCH_CONTROLLER = ''' + + + %(capable_switch)s + + + %(logical_switch)s + + + %(controller_id)s + master + %(ip)s + 6633 + tcp + + + + + + +''' % PORT_DICT + + +def _get_schema(): + # file_name = of_config.OF_CONFIG_1_0_XSD + # file_name = of_config.OF_CONFIG_1_1_XSD + file_name = of_config.OF_CONFIG_1_1_1_XSD + return lxml.etree.XMLSchema(file=file_name) + + +class OFConfigClient(app_manager.RyuApp): + def __init__(self, *args, **kwargs): + super(OFConfigClient, self).__init__(*args, **kwargs) + self.switch = capable_switch.OFCapableSwitch( + host=HOST, port=PORT, username=USERNAME, password=PASSWORD, + unknown_host_cb=lambda host, fingeprint: True) + hub.spawn(self._do_of_config) + + def _validate(self, tree): + xmlschema = _get_schema() + try: + xmlschema.assertValid(tree) + except: + traceback.print_exc() + + def _do_get(self): + data_xml = self.switch.raw_get() + + tree = lxml.etree.fromstring(data_xml) + # print(lxml.etree.tostring(tree, pretty_print=True)) + self._validate(tree) + + name_spaces = set() + for e in tree.getiterator(): + name_spaces.add(capable_switch.get_ns_tag(e.tag)[0]) + print(name_spaces) + + return tree + + def _do_get_config(self, source): + print('source = %s' % source) + config_xml = self.switch.raw_get_config(source) + + tree = lxml.etree.fromstring(config_xml) + # print(lxml.etree.tostring(tree, pretty_print=True)) + self._validate(tree) + + def _do_edit_config(self, config): + tree = lxml.etree.fromstring(config) + self._validate(tree) + self.switch.raw_edit_config(target='running', config=config) + + def _print_ports(self, tree, ns): + for port in tree.findall('{%s}%s/{%s}%s' % (ns, ofc_consts.RESOURCES, + ns, ofc_consts.PORT)): + print(lxml.etree.tostring(port, pretty_print=True)) + + def _set_ports_down(self): + """try to set all ports down with etree operation""" + tree = self._do_get() + print(lxml.etree.tostring(tree, pretty_print=True)) + + qname = lxml.etree.QName(tree.tag) + ns = qname.namespace + self._print_ports(tree, ns) + + switch_id = tree.find('{%s}%s' % (ns, ofc_consts.ID)) + resources = tree.find('{%s}%s' % (ns, ofc_consts.RESOURCES)) + configuration = tree.find( + '{%s}%s/{%s}%s/{%s}%s' % (ns, ofc_consts.RESOURCES, + ns, ofc_consts.PORT, + ns, ofc_consts.CONFIGURATION)) + admin_state = tree.find( + '{%s}%s/{%s}%s/{%s}%s/{%s}%s' % (ns, ofc_consts.RESOURCES, + ns, ofc_consts.PORT, + ns, ofc_consts.CONFIGURATION, + ns, ofc_consts.ADMIN_STATE)) + + config_ = lxml.etree.Element( + '{%s}%s' % (ncclient.xml_.BASE_NS_1_0, nc_consts.CONFIG)) + capable_switch_ = lxml.etree.SubElement(config_, tree.tag) + switch_id_ = lxml.etree.SubElement(capable_switch_, switch_id.tag) + switch_id_.text = switch_id.text + resources_ = lxml.etree.SubElement(capable_switch_, + resources.tag) + for port in tree.findall( + '{%s}%s/{%s}%s' % (ns, ofc_consts.RESOURCES, + ns, ofc_consts.PORT)): + resource_id = port.find('{%s}%s' % (ns, ofc_consts.RESOURCE_ID)) + + port_ = lxml.etree.SubElement(resources_, port.tag) + resource_id_ = lxml.etree.SubElement(port_, resource_id.tag) + resource_id_.text = resource_id.text + configuration_ = lxml.etree.SubElement(port_, configuration.tag) + configuration_.set(ofc_consts.OPERATION, nc_consts.MERGE) + admin_state_ = lxml.etree.SubElement(configuration_, + admin_state.tag) + admin_state_.text = ofc_consts.DOWN + self._do_edit_config(lxml.etree.tostring(config_, pretty_print=True)) + + tree = self._do_get() + self._print_ports(tree, ns) + + def _do_of_config(self): + self._do_get() + self._do_get_config('running') + self._do_get_config('startup') + + # LINC doesn't support 'candidate' datastore + try: + self._do_get_config('candidate') + except ncclient.NCClientError: + traceback.print_exc() + + # use raw XML format + self._do_edit_config(SWITCH_PORT_DOWN) + self._do_edit_config(SWITCH_ADVERTISED) + self._do_edit_config(SWITCH_CONTROLLER) + + self._set_ports_down() + + self.switch.close_session() diff --git a/tests/integrated/test_request_reply_v12.py b/tests/integrated/test_request_reply_v12.py new file mode 100644 index 00000000..ea031182 --- /dev/null +++ b/tests/integrated/test_request_reply_v12.py @@ -0,0 +1,1055 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import time +import logging + +from ryu.controller import ofp_event +from ryu.controller.handler import MAIN_DISPATCHER +from ryu.controller.handler import set_ev_cls +from ryu.ofproto import ofproto_v1_2 + +from tests.integrated import tester + +LOG = logging.getLogger(__name__) + + +class RunTest(tester.TestFlowBase): + """ Test case for Request-Reply messages. + + Some tests need attached port to switch. + If use the OVS, can do it with the following commands. + # ip link add type dummy + # ovs-vsctl add-port + """ + + OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] + + def __init__(self, *args, **kwargs): + super(RunTest, self).__init__(*args, **kwargs) + + self._verify = None + self.n_tables = ofproto_v1_2.OFPTT_MAX + + def start_next_test(self, dp): + self._verify = None + self.delete_all_flows(dp) + dp.send_barrier() + if len(self.pending): + t = self.pending.pop() + if self.is_supported(t): + LOG.info(tester.LOG_TEST_START, t) + self.current = t + getattr(self, t)(dp) + else: + self.results[t] = 'SKIP (unsupported)' + self.unclear -= 1 + self.start_next_test(dp) + else: + self.print_results() + + def run_verify(self, ev): + msg = ev.msg + dp = msg.datapath + + verify_func = self.verify_default + v = "verify" + self.current[4:] + if v in dir(self): + verify_func = getattr(self, v) + + result = verify_func(dp, msg) + if result is True: + self.unclear -= 1 + + self.results[self.current] = result + self.start_next_test(dp) + + def verify_default(self, dp, msg): + type_ = self._verify + + if msg.msg_type == dp.ofproto.OFPT_STATS_REPLY: + return self.verify_stats(dp, msg.body, type_) + elif msg.msg_type == type_: + return True + else: + return 'Reply msg_type %s expected %s' \ + % (msg.msg_type, type_) + + def verify_stats(self, dp, stats, type_): + stats_types = dp.ofproto_parser.OFPStatsReply._STATS_TYPES + expect = stats_types.get(type_).__name__ + + if isinstance(stats, list): + for s in stats: + if expect == s.__class__.__name__: + return True + else: + if expect == stats.__class__.__name__: + return True + return 'Reply msg has not \'%s\' class.\n%s' % (expect, stats) + + def mod_flow(self, dp, cookie=0, cookie_mask=0, table_id=0, + command=None, idle_timeout=0, hard_timeout=0, + priority=0xff, buffer_id=0xffffffff, match=None, + actions=None, inst_type=None, out_port=None, + out_group=None, flags=0, inst=None): + + if command is None: + command = dp.ofproto.OFPFC_ADD + + if inst is None: + if inst_type is None: + inst_type = dp.ofproto.OFPIT_APPLY_ACTIONS + + inst = [] + if actions is not None: + inst = [dp.ofproto_parser.OFPInstructionActions( + inst_type, actions)] + + if match is None: + match = dp.ofproto_parser.OFPMatch() + + if out_port is None: + out_port = dp.ofproto.OFPP_ANY + + if out_group is None: + out_group = dp.ofproto.OFPG_ANY + + m = dp.ofproto_parser.OFPFlowMod(dp, cookie, cookie_mask, + table_id, command, + idle_timeout, hard_timeout, + priority, buffer_id, + out_port, out_group, + flags, match, inst) + + dp.send_msg(m) + + def get_port(self, dp): + for port_no, port in dp.ports.items(): + if port_no != dp.ofproto.OFPP_LOCAL: + return port + return None + + # Test for Reply message type + def test_desc_stats_request(self, dp): + self._verify = dp.ofproto.OFPST_DESC + m = dp.ofproto_parser.OFPDescStatsRequest(dp) + dp.send_msg(m) + + def test_flow_stats_request(self, dp): + self._verify = dp.ofproto.OFPST_FLOW + self.mod_flow(dp) + self.send_flow_stats(dp) + + def test_aggregate_stats_request(self, dp): + self._verify = dp.ofproto.OFPST_AGGREGATE + match = dp.ofproto_parser.OFPMatch() + m = dp.ofproto_parser.OFPAggregateStatsRequest( + dp, dp.ofproto.OFPTT_ALL, dp.ofproto.OFPP_ANY, + dp.ofproto.OFPG_ANY, 0, 0, match) + dp.send_msg(m) + + def test_table_stats_request(self, dp): + self._verify = dp.ofproto.OFPST_TABLE + m = dp.ofproto_parser.OFPTableStatsRequest(dp) + dp.send_msg(m) + + def test_port_stats_request(self, dp): + self._verify = dp.ofproto.OFPST_PORT + m = dp.ofproto_parser.OFPPortStatsRequest(dp, dp.ofproto.OFPP_ANY) + dp.send_msg(m) + + def test_echo_request(self, dp): + self._verify = dp.ofproto.OFPT_ECHO_REPLY + m = dp.ofproto_parser.OFPEchoRequest(dp) + dp.send_msg(m) + + def test_features_request(self, dp): + self._verify = dp.ofproto.OFPT_FEATURES_REPLY + m = dp.ofproto_parser.OFPFeaturesRequest(dp) + dp.send_msg(m) + + def test_get_config_request(self, dp): + self._verify = dp.ofproto.OFPT_GET_CONFIG_REPLY + m = dp.ofproto_parser.OFPGetConfigRequest(dp) + dp.send_msg(m) + + def test_barrier_request(self, dp): + self._verify = dp.ofproto.OFPT_BARRIER_REPLY + dp.send_barrier() + + def test_error_reply(self, dp): + ports = [0] + for p in dp.ports: + if p != dp.ofproto.OFPP_LOCAL: + ports.append(p) + + port_no = max(ports) + 1 + self._verify = dp.ofproto.OFPT_ERROR + m = dp.ofproto_parser.OFPPortMod( + dp, port_no, 'ff:ff:ff:ff:ff:ff', 0, 0, 0) + dp.send_msg(m) + + # Test for reply value + def test_flow_stats_none(self, dp): + self.send_flow_stats(dp) + + def verify_flow_stats_none(self, dp, msg): + stats = msg.body + if len(stats): + return 'Reply msg has body. %s' % (stats, ) + return True + + def test_flow_stats_reply_value(self, dp): + self._verify = [] + c = 0 + while c < self.n_tables: + # value = (talbe_id, cookie, idle_timeout, hard_timeout, priority) + v = (c, c + 1, c + 2, c + 3, c + 4) + self._verify.append(v) + self.mod_flow(dp, table_id=v[0], cookie=v[1], + idle_timeout=v[2], hard_timeout=v[3], priority=v[4]) + c += 1 + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_stats_reply_value(self, dp, msg): + c = 0 + for f in msg.body: + f_value = (f.table_id, f.cookie, f.idle_timeout, + f.hard_timeout, f.priority, ) + if f_value != self._verify[c]: + return 'param is mismatched. verify=%s, reply=%s' \ + % (self._verify[c], f_value,) + c += 1 + return len(msg.body) == self.n_tables + + def test_echo_request_has_data(self, dp): + data = 'test' + self._verify = data + m = dp.ofproto_parser.OFPEchoRequest(dp) + m.data = data + dp.send_msg(m) + + def verify_echo_request_has_data(self, dp, msg): + data = msg.data + return self._verify == data + + def test_aggregate_stats_flow_count(self, dp): + c = 0 + while c < self.n_tables: + self.mod_flow(dp, table_id=c) + c += 1 + dp.send_barrier() + match = dp.ofproto_parser.OFPMatch() + m = dp.ofproto_parser.OFPAggregateStatsRequest( + dp, dp.ofproto.OFPTT_ALL, dp.ofproto.OFPP_ANY, + dp.ofproto.OFPG_ANY, 0, 0, match) + dp.send_msg(m) + + def verify_aggregate_stats_flow_count(self, dp, msg): + stats = msg.body + return stats.flow_count == self.n_tables + + def test_aggregate_stats_flow_count_out_port(self, dp): + actions = [dp.ofproto_parser.OFPActionOutput(1, 1500)] + self.mod_flow(dp, table_id=1, actions=actions) + + actions = [dp.ofproto_parser.OFPActionOutput(2, 1500)] + self.mod_flow(dp, table_id=2, actions=actions) + dp.send_barrier() + + out_port = 2 + match = dp.ofproto_parser.OFPMatch() + m = dp.ofproto_parser.OFPAggregateStatsRequest( + dp, dp.ofproto.OFPTT_ALL, out_port, + dp.ofproto.OFPG_ANY, 0, 0, match) + dp.send_msg(m) + + def verify_aggregate_stats_flow_count_out_port(self, dp, msg): + stats = msg.body + return stats.flow_count == 1 + + def test_aggregate_stats_packet_count(self, dp): + in_port = 1 + data = 'test' + self._verify = {'packet_count': 1, + 'byte_count': len(data)} + + # add flow + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + self.mod_flow(dp, table_id=0, match=match) + + # packet out + output = dp.ofproto.OFPP_TABLE + actions = [dp.ofproto_parser.OFPActionOutput(output, 0)] + m = dp.ofproto_parser.OFPPacketOut(dp, 0xffffffff, in_port, + actions, data) + dp.send_msg(m) + dp.send_barrier() + + match = dp.ofproto_parser.OFPMatch() + m = dp.ofproto_parser.OFPAggregateStatsRequest( + dp, dp.ofproto.OFPTT_ALL, dp.ofproto.OFPP_ANY, + dp.ofproto.OFPG_ANY, 0, 0, match) + dp.send_msg(m) + + def verify_aggregate_stats_packet_count(self, dp, msg): + for name, val in self._verify.items(): + r_val = getattr(msg.body, name) + if val != r_val: + return '%s is mismatched. verify=%s, reply=%s' \ + % (name, val, r_val) + return True + + def test_set_config_nomal(self, dp): + flags = dp.ofproto.OFPC_FRAG_NORMAL + self._verify = flags + m = dp.ofproto_parser.OFPSetConfig(dp, flags, 0) + dp.send_msg(m) + dp.send_barrier() + + m = dp.ofproto_parser.OFPGetConfigRequest(dp) + dp.send_msg(m) + + def verify_set_config_nomal(self, dp, msg): + return self._verify == msg.flags + + def test_set_config_drop(self, dp): + flags = dp.ofproto.OFPC_FRAG_DROP + self._verify = flags + m = dp.ofproto_parser.OFPSetConfig(dp, flags, 0) + dp.send_msg(m) + dp.send_barrier() + + m = dp.ofproto_parser.OFPGetConfigRequest(dp) + dp.send_msg(m) + + def verify_set_config_drop(self, dp, msg): + return self._verify == msg.flags + + def test_set_config_mask(self, dp): + flags = dp.ofproto.OFPC_FRAG_MASK + self._verify = flags + m = dp.ofproto_parser.OFPSetConfig(dp, flags, 0) + dp.send_msg(m) + dp.send_barrier() + + m = dp.ofproto_parser.OFPGetConfigRequest(dp) + dp.send_msg(m) + + def verify_set_config_mask(self, dp, msg): + return self._verify == msg.flags + + def test_set_config_ttl_to_controller(self, dp): + flags = dp.ofproto.OFPC_INVALID_TTL_TO_CONTROLLER + self._verify = flags + m = dp.ofproto_parser.OFPSetConfig(dp, flags, 0) + dp.send_msg(m) + dp.send_barrier() + + m = dp.ofproto_parser.OFPGetConfigRequest(dp) + dp.send_msg(m) + + def verify_set_config_ttl_to_controller(self, dp, msg): + return self._verify == msg.flags + + def test_set_config_miss_send_len(self, dp): + flags = dp.ofproto.OFPC_FRAG_NORMAL + ms_len = 256 + self._verify = ms_len + m = dp.ofproto_parser.OFPSetConfig(dp, flags, ms_len) + dp.send_msg(m) + dp.send_barrier() + + m = dp.ofproto_parser.OFPGetConfigRequest(dp) + dp.send_msg(m) + + def verify_set_config_miss_send_len(self, dp, msg): + return self._verify == msg.miss_send_len + + def test_set_config_miss_send_len_max(self, dp): + flags = dp.ofproto.OFPC_FRAG_NORMAL + ms_len = dp.ofproto.OFPCML_MAX + self._verify = ms_len + m = dp.ofproto_parser.OFPSetConfig(dp, flags, ms_len) + dp.send_msg(m) + dp.send_barrier() + + m = dp.ofproto_parser.OFPGetConfigRequest(dp) + dp.send_msg(m) + + def verify_set_config_miss_send_len_max(self, dp, msg): + return self._verify == msg.miss_send_len + + def test_set_config_no_buffer(self, dp): + flags = dp.ofproto.OFPC_FRAG_NORMAL + ms_len = dp.ofproto.OFPCML_NO_BUFFER + self._verify = ms_len + m = dp.ofproto_parser.OFPSetConfig(dp, flags, ms_len) + dp.send_msg(m) + dp.send_barrier() + + m = dp.ofproto_parser.OFPGetConfigRequest(dp) + dp.send_msg(m) + + def verify_set_config_no_buffer(self, dp, msg): + return self._verify == msg.miss_send_len + + def _verify_flow_inst_type(self, dp, msg): + inst_type = self._verify + stats = msg.body + + for s in stats: + for i in s.instructions: + if i.type == inst_type: + return True + return 'not found inst_type[%s]' % (inst_type, ) + + def test_flow_add_apply_actions(self, dp): + inst_type = dp.ofproto.OFPIT_APPLY_ACTIONS + self._verify = inst_type + + actions = [dp.ofproto_parser.OFPActionOutput(1, 1500)] + self.mod_flow(dp, actions=actions, inst_type=inst_type) + self.send_flow_stats(dp) + + def verify_flow_add_apply_actions(self, dp, msg): + return self._verify_flow_inst_type(dp, msg) + + def test_flow_add_goto_table(self, dp): + self._verify = dp.ofproto.OFPIT_GOTO_TABLE + + inst = [dp.ofproto_parser.OFPInstructionGotoTable(1), ] + self.mod_flow(dp, inst=inst) + self.send_flow_stats(dp) + + def verify_flow_add_goto_table(self, dp, msg): + return self._verify_flow_inst_type(dp, msg) + + def _verify_flow_value(self, dp, msg): + stats = msg.body + verify = self._verify + + if len(verify) != len(stats): + return 'flow_count is mismatched. verify=%s stats=%s' \ + % (len(verify), len(stats)) + + for s in stats: + v_port = -1 + v = verify.get(s.table_id, None) + if v: + v_port = v[3].port + + s_port = s.instructions[0].actions[0].port + + if v_port != s_port: + return 'port is mismatched. table_id=%s verify=%s, stats=%s' \ + % (s.table_id, v_port, s_port) + return True + + def _add_flow_for_flow_mod_tests(self, dp): + a1 = dp.ofproto_parser.OFPActionOutput(1, 1500) + a2 = dp.ofproto_parser.OFPActionOutput(2, 1500) + + # table_id, cookie, priority, dl_dst, action) + tables = {0: [0xffff, 10, b'\xee' * 6, a1], + 1: [0xff00, 10, b'\xee' * 6, a2], + 2: [0xf000, 100, b'\xee' * 6, a1], + 3: [0x0000, 10, b'\xff' * 6, a1]} + + self._verify = tables + for table_id, val in tables.items(): + match = dp.ofproto_parser.OFPMatch() + match.set_dl_dst(val[2]) + self.mod_flow(dp, match=match, actions=[val[3]], + table_id=table_id, cookie=val[0], priority=val[1]) + dp.send_barrier() + + def test_flow_mod_table_id(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # modify flow of table_id=3 + action = dp.ofproto_parser.OFPActionOutput(3, 1500) + self._verify[3][3] = action + + table_id = 3 + self.mod_flow(dp, command=dp.ofproto.OFPFC_MODIFY, + actions=[action], table_id=table_id) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_mod_table_id(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def test_flow_mod_cookie(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # modify flow of table_id=1 + action = dp.ofproto_parser.OFPActionOutput(3, 1500) + self._verify[1][3] = action + + cookie = 0xff00 + cookie_mask = 0xffff + table_id = 1 + self.mod_flow(dp, command=dp.ofproto.OFPFC_MODIFY, + actions=[action], table_id=table_id, + cookie=cookie, cookie_mask=cookie_mask) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_mod_cookie(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def test_flow_mod_cookie_mask(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # modify flow of table_id=0,1 + action = dp.ofproto_parser.OFPActionOutput(3, 1500) + self._verify[0][3] = action + self._verify[1][3] = action + + cookie = 0xffff + cookie_mask = 0xff00 + for table_id in range(2): + self.mod_flow(dp, command=dp.ofproto.OFPFC_MODIFY, + actions=[action], table_id=table_id, + cookie=cookie, cookie_mask=cookie_mask) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_mod_cookie_mask(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def test_flow_mod_match(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # modify flow of table_id=3 + action = dp.ofproto_parser.OFPActionOutput(3, 1500) + self._verify[3][3] = action + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_dst(b'\xff' * 6) + table_id = 3 + self.mod_flow(dp, command=dp.ofproto.OFPFC_MODIFY, + actions=[action], table_id=table_id, match=match) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_mod_match(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def test_flow_mod_strict(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # modify flow of table_id=2 + action = dp.ofproto_parser.OFPActionOutput(3, 1500) + self._verify[2][3] = action + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_dst(b'\xee' * 6) + priority = 100 + table_id = 2 + self.mod_flow(dp, command=dp.ofproto.OFPFC_MODIFY_STRICT, + actions=[action], table_id=table_id, + match=match, priority=priority) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_mod_strict(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def test_flow_del_table_id(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # delete flow of table_id=3 + del self._verify[3] + + table_id = 3 + self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, + table_id=table_id) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_del_table_id(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def test_flow_del_table_id_all(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # delete all flows + self._verify = {} + + self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, + table_id=dp.ofproto.OFPTT_ALL) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_del_table_id_all(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def test_flow_del_cookie(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # delete flow of table_id=1 + del self._verify[1] + + cookie = 0xff00 + cookie_mask = 0xffff + self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, + table_id=dp.ofproto.OFPTT_ALL, + cookie=cookie, cookie_mask=cookie_mask) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_del_cookie(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def test_flow_del_cookie_mask(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # delete flow of table_id=0,1 + del self._verify[0] + del self._verify[1] + + cookie = 0xffff + cookie_mask = 0xff00 + self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, + table_id=dp.ofproto.OFPTT_ALL, + cookie=cookie, cookie_mask=cookie_mask) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_del_cookie_mask(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def test_flow_del_match(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # delete flow of table_id=3 + del self._verify[3] + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_dst(b'\xff' * 6) + self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, + table_id=dp.ofproto.OFPTT_ALL, match=match) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_del_match(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def test_flow_del_out_port(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # delete flow of table_id=1 + del self._verify[1] + + out_port = 2 + self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE, + table_id=dp.ofproto.OFPTT_ALL, out_port=out_port) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_del_out_port(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def test_flow_del_strict(self, dp): + self._add_flow_for_flow_mod_tests(dp) + + # delete flow of table_id=2 + del self._verify[2] + + match = dp.ofproto_parser.OFPMatch() + match.set_dl_dst(b'\xee' * 6) + priority = 100 + self.mod_flow(dp, command=dp.ofproto.OFPFC_DELETE_STRICT, + table_id=dp.ofproto.OFPTT_ALL, + match=match, priority=priority) + + dp.send_barrier() + self.send_flow_stats(dp) + + def verify_flow_del_strict(self, dp, msg): + return self._verify_flow_value(dp, msg) + + def _send_port_mod(self, dp, config, mask): + p = self.get_port(dp) + if not p: + err = 'need attached port to switch.' + self.results[self.current] = err + self.start_next_test(dp) + return + + self._verify = [p.port_no, config & mask] + m = dp.ofproto_parser.OFPPortMod(dp, p.port_no, p.hw_addr, + config, mask, 0) + dp.send_msg(m) + dp.send_barrier() + + # TODO: waiting to port UP|DOWN. + time.sleep(1) + m = dp.ofproto_parser.OFPFeaturesRequest(dp) + dp.send_msg(m) + + def _verify_port_mod_config(self, dp, msg): + port_no = self._verify[0] + config = self._verify[1] + + port = msg.ports[port_no] + if config != port.config: + return "config is mismatched. verify=%s, stats=%s" \ + % (bin(config), bin(port.config)) + return True + + def test_port_mod_config_01_all(self, dp): + config = 0b1100101 + mask = 0b1111111 + self._send_port_mod(dp, config, mask) + + def verify_port_mod_config_01_all(self, dp, msg): + return self._verify_port_mod_config(dp, msg) + + def test_port_mod_config_02_none(self, dp): + config = 0 + mask = 0b1111111 + self._send_port_mod(dp, config, mask) + + def verify_port_mod_config_02_none(self, dp, msg): + return self._verify_port_mod_config(dp, msg) + + def test_port_mod_config_03_mask(self, dp): + config = 0b1100101 + mask = 0b1111000 + self._send_port_mod(dp, config, mask) + + def verify_port_mod_config_03_mask(self, dp, msg): + res = self._verify_port_mod_config(dp, msg) + # reset port config + port_no = self._verify[0] + p = msg.ports[port_no] + m = dp.ofproto_parser.OFPPortMod(dp, p.port_no, p.hw_addr, + 0, 0b1111111, 0) + dp.send_msg(m) + dp.send_barrier() + return res + + def test_port_stats_port_no(self, dp): + p = self.get_port(dp) + if not p: + err = 'need attached port to switch.' + self.results[self.current] = err + self.start_next_test(dp) + return + + self._verify = p.port_no + m = dp.ofproto_parser.OFPPortStatsRequest(dp, p.port_no) + dp.send_msg(m) + + def verify_port_stats_port_no(self, dp, msg): + ports = msg.body + if len(ports) > 1: + return 'reply some ports.\n%s' % (ports) + + if ports[0].port_no != self._verify: + return 'port_no is mismatched. request=%s reply=%s' \ + % (self._verify, ports[0].port_no) + + return True + + def _add_flow_flow_removed(self, dp, reason, table_id=0, + cookie=0xff, priority=100, in_port=1, + idle_timeout=0, hard_timeout=0): + self._verify = {} + self._verify['params'] = {'reason': reason, + 'table_id': table_id, + 'cookie': cookie, + 'priority': priority} + self._verify['in_port'] = in_port + self._verify['timeout'] = idle_timeout + if hard_timeout: + if (idle_timeout == 0 or idle_timeout > hard_timeout): + self._verify['timeout'] = hard_timeout + + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + self.mod_flow(dp, match=match, cookie=cookie, + priority=priority, table_id=table_id, + idle_timeout=idle_timeout, hard_timeout=hard_timeout, + flags=dp.ofproto.OFPFF_SEND_FLOW_REM) + + def _verify_flow_removed(self, dp, msg): + params = self._verify['params'] + in_port = self._verify['in_port'] + timeout = self._verify['timeout'] + + if timeout: + duration_nsec = (msg.duration_sec * 10 ** 9) + msg.duration_nsec + timeout_nsec = timeout * 10 ** 9 + + # grace of -0.5 and +1.5 second to timeout. + l = (timeout - 0.5) * 10 ** 9 + h = (timeout + 1.5) * 10 ** 9 + if not l < duration_nsec < h: + return 'bad duration time. set=%s(nsec), duration=%s(nsec)' \ + % (timeout_nsec, duration_nsec) + + for name, val in params.items(): + r_val = getattr(msg, name) + if val != r_val: + return '%s is mismatched. verify=%s, reply=%s' \ + % (name, val, r_val) + + for f in msg.match.fields: + if f.header == ofproto_v1_2.OXM_OF_IN_PORT: + if f.value != in_port: + return 'in_port is mismatched. verify=%s, reply=%s' \ + % (in_port, f.value) + return True + + def test_flow_removed_idle_timeout(self, dp): + reason = dp.ofproto.OFPRR_IDLE_TIMEOUT + idle_timeout = 2 + self._add_flow_flow_removed(dp, reason, + idle_timeout=idle_timeout) + + def verify_flow_removed_idle_timeout(self, dp, msg): + return self._verify_flow_removed(dp, msg) + + def test_flow_removed_idle_timeout_hit(self, dp): + reason = dp.ofproto.OFPRR_IDLE_TIMEOUT + idle_timeout = 5 + in_port = 1 + sleep = 2 + + # add target flow + self._add_flow_flow_removed(dp, reason, in_port=in_port, + idle_timeout=idle_timeout) + self._verify['timeout'] = idle_timeout + sleep + + # sleep + time.sleep(sleep) + + # packet out + output = dp.ofproto.OFPP_TABLE + actions = [dp.ofproto_parser.OFPActionOutput(output, 0)] + m = dp.ofproto_parser.OFPPacketOut(dp, 0xffffffff, in_port, + actions, None) + dp.send_msg(m) + + def verify_flow_removed_idle_timeout_hit(self, dp, msg): + return self._verify_flow_removed(dp, msg) + + def test_flow_removed_hard_timeout(self, dp): + reason = dp.ofproto.OFPRR_HARD_TIMEOUT + hard_timeout = 2 + self._add_flow_flow_removed(dp, reason, + hard_timeout=hard_timeout) + + def verify_flow_removed_hard_timeout(self, dp, msg): + return self._verify_flow_removed(dp, msg) + + def test_flow_removed_hard_timeout_hit(self, dp): + reason = dp.ofproto.OFPRR_HARD_TIMEOUT + hard_timeout = 5 + in_port = 1 + sleep = 2 + + self._add_flow_flow_removed(dp, reason, in_port=in_port, + hard_timeout=hard_timeout) + dp.send_barrier() + + # sleep + time.sleep(sleep) + + # packet out + output = dp.ofproto.OFPP_TABLE + actions = [dp.ofproto_parser.OFPActionOutput(output, 0)] + m = dp.ofproto_parser.OFPPacketOut(dp, 0xffffffff, in_port, + actions, None) + dp.send_msg(m) + + def verify_flow_removed_hard_timeout_hit(self, dp, msg): + return self._verify_flow_removed(dp, msg) + + def test_flow_removed_delete(self, dp): + reason = dp.ofproto.OFPRR_DELETE + self._add_flow_flow_removed(dp, reason) + dp.send_barrier() + self.delete_all_flows(dp) + + def verify_flow_removed_delete(self, dp, msg): + return self._verify_flow_removed(dp, msg) + + def test_flow_removed_table_id(self, dp): + reason = dp.ofproto.OFPRR_DELETE + table_id = 1 + self._add_flow_flow_removed(dp, reason, table_id=table_id) + dp.send_barrier() + self.delete_all_flows(dp) + + def verify_flow_removed_table_id(self, dp, msg): + return self._verify_flow_removed(dp, msg) + + def _send_packet_out(self, dp, buffer_id=0xffffffff, + in_port=None, output=None, data=''): + if in_port is None: + in_port = dp.ofproto.OFPP_LOCAL + + if output is None: + output = dp.ofproto.OFPP_CONTROLLER + + self._verify['in_port'] = in_port + self._verify['data'] = data + + actions = [dp.ofproto_parser.OFPActionOutput(output, len(data))] + m = dp.ofproto_parser.OFPPacketOut(dp, buffer_id, in_port, + actions, data) + dp.send_msg(m) + + def _verify_packet_in(self, dp, msg): + for name, val in self._verify.items(): + if name == 'in_port': + for f in msg.match.fields: + if f.header == ofproto_v1_2.OXM_OF_IN_PORT: + r_val = f.value + else: + r_val = getattr(msg, name) + + if val != r_val: + return '%s is mismatched. verify=%s, reply=%s' \ + % (name, val, r_val) + return True + + def test_packet_in_action(self, dp): + self._verify = {} + self._verify['reason'] = dp.ofproto.OFPR_ACTION + self._send_packet_out(dp) + + def verify_packet_in_action(self, dp, msg): + return self._verify_packet_in(dp, msg) + + def test_packet_in_data(self, dp): + self._verify = {} + self._verify['reason'] = dp.ofproto.OFPR_ACTION + data = 'test' + self._send_packet_out(dp, data=data) + + def verify_packet_in_data(self, dp, msg): + return self._verify_packet_in(dp, msg) + + def test_packet_in_table_id(self, dp): + in_port = 1 + table_id = 2 + output = dp.ofproto.OFPP_TABLE + + self._verify = {} + self._verify['reason'] = dp.ofproto.OFPR_ACTION + self._verify['table_id'] = table_id + + # add flow (goto_table) + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + inst = [dp.ofproto_parser.OFPInstructionGotoTable(table_id)] + self.mod_flow(dp, inst=inst, match=match) + + # add flow (output) + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + out = dp.ofproto.OFPP_CONTROLLER + actions = [dp.ofproto_parser.OFPActionOutput(out, 0)] + self.mod_flow(dp, actions=actions, match=match, table_id=table_id) + dp.send_barrier() + + # packet out + self._send_packet_out(dp, in_port=in_port, output=output) + + def verify_packet_in_table_id(self, dp, msg): + return self._verify_packet_in(dp, msg) + + # handler + @set_ev_cls(ofp_event.EventOFPEchoReply, MAIN_DISPATCHER) + def echo_replay_handler(self, ev): + if self.current.find('echo_request') > 0: + self.run_verify(ev) + + @set_ev_cls(ofp_event.EventOFPStatsReply, MAIN_DISPATCHER) + def stats_reply_handler(self, ev): + if self.current is None: + msg = ev.msg + dp = msg.datapath + if self._verify == dp.ofproto.OFPST_TABLE: + self.table_stats = msg.body + self.start_next_test(dp) + else: + self.run_verify(ev) + + @set_ev_cls(ofp_event.EventOFPSwitchFeatures, MAIN_DISPATCHER) + def features_replay_handler(self, ev): + if self.current is None: + pass + else: + self.run_verify(ev) + + @set_ev_cls(ofp_event.EventOFPGetConfigReply, MAIN_DISPATCHER) + def get_config_replay_handler(self, ev): + self.run_verify(ev) + + @set_ev_cls(ofp_event.EventOFPBarrierReply, MAIN_DISPATCHER) + def barrier_replay_handler(self, ev): + if self.current == 'test_barrier_request': + self.run_verify(ev) + + @set_ev_cls(ofp_event.EventOFPPortStatus, MAIN_DISPATCHER) + def port_status_handler(self, ev): + pass + + @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) + def packet_in_handler(self, ev): + if self.current.find('packet_in'): + self.run_verify(ev) + + @set_ev_cls(ofp_event.EventOFPFlowRemoved, MAIN_DISPATCHER) + def flow_removed_handler(self, ev): + if self.current.find('flow_removed') > 0: + self.run_verify(ev) + + @set_ev_cls(ofp_event.EventOFPErrorMsg, MAIN_DISPATCHER) + def error_handler(self, ev): + if self.current.find('error') > 0: + self.run_verify(ev) + + def is_supported(self, t): + unsupported = [ + ] + for u in unsupported: + if t.find(u) != -1: + return False + + return True diff --git a/tests/integrated/test_vrrp_linux_multi.py b/tests/integrated/test_vrrp_linux_multi.py new file mode 100644 index 00000000..ae4d837a --- /dev/null +++ b/tests/integrated/test_vrrp_linux_multi.py @@ -0,0 +1,103 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 Isaku Yamahata +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +Usage: +PYTHONPATH=. ./bin/ryu-manager --verbose \ + ryu.services.protocols.vrrp.dumper \ + ryu.services.protocols.vrrp.sample_manager.py \ + ryu.app.rest \ + tests.integrated.test_vrrp_linux_multi + +ryu.services.protocols.vrrp.dumper is optional. +ryu.app.rest is merely to prevent ryu-manager from exiting. + + ---------------- + /--<--veth0-->| | + Ryu | linux bridge |<--veth2--> command to generate packets + \--<--veth1-->| (vrrpbr) | + ---------------- + + +# ip link add veth0 type veth peer name veth0-br +# ip link add veth1 type veth peer name veth1-br +# ip link add veth2 type veth peer name veth2-br + +# brctl addbr vrrpbr +# brctl addif vrrpbr veth0-br +# brctl addif vrrpbr veth1-br +# brctl addif vrrpbr veth2-br + + +# ip link set veth0 up +# ip link set veth0-br up +# ip link set veth1 up +# ip link set veth1-br up +# ip link set veth2 up +# ip link set veth2-br up +# ip link set vrrpbr up + +if you like, capture packets on each interfaces like +# tshark -i vrrpbr +# tshark -i veth0 +# tshark -i veth1 +# tshark -i veth2 + +virtual router mac address: 00:00:5E:00:01:{VRID} = 00:00:5E:00:01:07 +during working, send packets destined to mac address 00:00:5E:00:01:07 +from veth2 by packet generator like packeth + +NOTE: vrid: 7 and ip address: 10.0.0.1... are hardcoded below +""" + +from ryu.base import app_manager +from ryu.lib import hub +from ryu.lib import mac as lib_mac +from ryu.lib.packet import vrrp +from ryu.services.protocols.vrrp import api as vrrp_api +from ryu.services.protocols.vrrp import event as vrrp_event +from ryu.services.protocols.vrrp import monitor_linux + +from . import vrrp_common + + +class VRRPConfigApp(vrrp_common.VRRPCommon): + _IFNAME0 = 'veth0' + _IFNAME1 = 'veth1' + + def __init__(self, *args, **kwargs): + super(VRRPConfigApp, self).__init__(*args, **kwargs) + + def start(self): + hub.spawn(self._main) + + def _configure_vrrp_router(self, vrrp_version, priority, + primary_ip_address, ifname, vrid): + interface = vrrp_event.VRRPInterfaceNetworkDevice( + lib_mac.DONTCARE_STR, primary_ip_address, None, ifname) + self.logger.debug('%s', interface) + + vip = '10.0.%d.1' % vrid + ip_addresses = [vip] + config = vrrp_event.VRRPConfig( + version=vrrp_version, vrid=vrid, priority=priority, + ip_addresses=ip_addresses) + self.logger.debug('%s', config) + + rep = vrrp_api.vrrp_config(self, interface, config) + self.logger.debug('%s', rep) + + return rep diff --git a/tests/integrated/test_vrrp_linux_multi.sh b/tests/integrated/test_vrrp_linux_multi.sh new file mode 100644 index 00000000..b1dba4bc --- /dev/null +++ b/tests/integrated/test_vrrp_linux_multi.sh @@ -0,0 +1,34 @@ +#! /bin/sh + +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +ip link add veth0 type veth peer name veth0-br +ip link add veth1 type veth peer name veth1-br +ip link add veth2 type veth peer name veth2-br + +brctl addbr vrrpbr +brctl addif vrrpbr veth0-br +brctl addif vrrpbr veth1-br +brctl addif vrrpbr veth2-br + +ip link set veth0 up +ip link set veth0-br up +ip link set veth1 up +ip link set veth1-br up +ip link set veth2 up +ip link set veth2-br up +ip link set vrrpbr up diff --git a/tests/integrated/test_vrrp_multi.py b/tests/integrated/test_vrrp_multi.py new file mode 100644 index 00000000..9d586119 --- /dev/null +++ b/tests/integrated/test_vrrp_multi.py @@ -0,0 +1,143 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 Isaku Yamahata +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +""" +Usage: +PYTHONPATH=. ./bin/ryu-manager --verbose \ + ryu.topology.switches \ + ryu.services.protocols.vrrp.dumper \ + tests.integrated.test_vrrp_multi + +ryu.services.protocols.vrrp.dumper is optional. + + +---+ ---------------- + /--|OVS|<--veth-->| | + Ryu +---+ | linux bridge |<--veth--> command to generate packets + \--|OVS|<--veth-->| | + +---+ ---------------- + +configure OVSs to connect ryu +example +# brctl addbr b0 +# ip link add veth0-ovs type veth peer name veth0-br +# ip link add veth1-ovs type veth peer name veth1-br +# brctl addif b0 veth0-br +# brctl addif b0 veth1-br +# brctl show +bridge name bridge id STP enabled interfaces +b0 8000.6642e5822497 no veth0-br + veth1-br +ovs-system 0000.122038293b55 no + +# ovs-vsctl add-br s0 +# ovs-vsctl add-port s0 veth0-ovs +# ovs-vsctl add-br s1 +# ovs-vsctl add-port s1 veth1-ovs +# ovs-vsctl set-controller s0 tcp:127.0.0.1:6633 +# ovs-vsctl set bridge s0 protocols='[OpenFlow12]' +# ovs-vsctl set-controller s1 tcp:127.0.0.1:6633 +# ovs-vsctl set bridge s1 protocols='[OpenFlow12]' +# ovs-vsctl show +20c2a046-ae7e-4453-a576-11034db24985 + Manager "ptcp:6634" + Bridge "s0" + Controller "tcp:127.0.0.1:6633" + is_connected: true + Port "veth0-ovs" + Interface "veth0-ovs" + Port "s0" + Interface "s0" + type: internal + Bridge "s1" + Controller "tcp:127.0.0.1:6633" + is_connected: true + Port "veth1-ovs" + Interface "veth1-ovs" + Port "s1" + Interface "s1" + type: internal + ovs_version: "1.9.90" +# ip link veth0-br set up +# ip link veth0-ovs set up +# ip link veth1-br set up +# ip link veth1-ovs set up +# ip link b0 set up +""" + +from ryu.base import app_manager +from ryu.controller import handler +from ryu.lib import dpid as lib_dpid +from ryu.lib import hub +from ryu.lib.packet import vrrp +from ryu.services.protocols.vrrp import api as vrrp_api +from ryu.services.protocols.vrrp import event as vrrp_event +from ryu.services.protocols.vrrp import monitor_openflow +from ryu.topology import event as topo_event +from ryu.topology import api as topo_api + +from . import vrrp_common + + +class VRRPConfigApp(vrrp_common.VRRPCommon): + _IFNAME0 = 0 + _IFNAME1 = 1 + + def __init__(self, *args, **kwargs): + super(VRRPConfigApp, self).__init__(*args, **kwargs) + self.start_main = False + + @handler.set_ev_cls(topo_event.EventSwitchEnter) + def _switch_enter_handler(self, ev): + if self.start_main: + return + + switches = topo_api.get_switch(self) + if len(switches) < 2: + return + + self.start_main = True + app_mgr = app_manager.AppManager.get_instance() + self.logger.debug('%s', app_mgr.applications) + self.switches = app_mgr.applications['switches'] + hub.spawn(self._main) + + def _configure_vrrp_router(self, vrrp_version, priority, + ip_addr, switch_index, vrid): + switches = self.switches + self.logger.debug('%s', switches.dps) + dpid = sorted(switches.dps.keys())[switch_index] + self.logger.debug('%s', lib_dpid.dpid_to_str(dpid)) + self.logger.debug('%s', switches.port_state) + # hack: use the smallest port no to avoid picking OVS local port + port_no = sorted(switches.port_state[dpid].keys())[0] + self.logger.debug('%d', port_no) + port = switches.port_state[dpid][port_no] + self.logger.debug('%s', port) + mac = port.hw_addr + self.logger.debug('%s', mac) + + interface = vrrp_event.VRRPInterfaceOpenFlow( + mac, ip_addr, None, dpid, port_no) + self.logger.debug('%s', interface) + + config = vrrp_event.VRRPConfig( + version=vrrp_version, vrid=vrid, priority=priority, + ip_addresses=[ip_addr]) + self.logger.debug('%s', config) + + rep = vrrp_api.vrrp_config(self, interface, config) + self.logger.debug('%s', rep) + return rep diff --git a/tests/integrated/test_vrrp_multi.sh b/tests/integrated/test_vrrp_multi.sh new file mode 100644 index 00000000..5118cf7d --- /dev/null +++ b/tests/integrated/test_vrrp_multi.sh @@ -0,0 +1,42 @@ +#! /bin/sh + +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if [ -z "$VSCTL" ]; then + VSCTL=ovs-vsctl +fi + +# create two bridges. +# conncect them using patch ports. + +create() { + BR=$1 + LOCAL_PORT=patch$2 + PEER_PORT=patch$3 + CONT=$4 + ${VSCTL} add-br ${BR} -- set bridge ${BR} datapath_type=netdev + ${VSCTL} add-port ${BR} ${LOCAL_PORT} + ${VSCTL} set interface ${LOCAL_PORT} type=patch + ${VSCTL} set interface ${LOCAL_PORT} options:peer=${PEER_PORT} + ${VSCTL} set bridge ${BR} protocols='[OpenFlow12]' + ${VSCTL} set-controller ${BR} ${CONT} +} + +CONT=tcp:127.0.0.1:6633 + +create s0 0 1 ${CONT} +create s1 1 0 ${CONT} diff --git a/tests/integrated/tester.py b/tests/integrated/tester.py new file mode 100644 index 00000000..f052c6cc --- /dev/null +++ b/tests/integrated/tester.py @@ -0,0 +1,214 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import sys +import logging +import itertools + +from ryu import utils +from ryu.lib import mac +from ryu.base import app_manager +from ryu.controller import ofp_event +from ryu.controller import handler +from ryu.controller import dpset +from ryu.controller.handler import MAIN_DISPATCHER +from ryu.controller.handler import CONFIG_DISPATCHER +from ryu.controller.handler import set_ev_cls +from ryu.ofproto import ofproto_v1_0 +from ryu.ofproto import ofproto_v1_2 + + +LOG = logging.getLogger(__name__) + + +LOG_TEST_START = 'TEST_START: %s' +LOG_TEST_RESULTS = 'TEST_RESULTS:' +LOG_TEST_FINISH = 'TEST_FINISHED: Completed=[%s] (OK=%s NG=%s SKIP=%s)' +LOG_TEST_UNSUPPORTED = 'SKIP (unsupported)' + + +class TestFlowBase(app_manager.RyuApp): + """ + To run the tests is required for the following pair of functions. + 1. test_() + To send flows to switch. + + 2. verify_() or _verify_default() + To check flows of switch. + """ + + _CONTEXTS = {'dpset': dpset.DPSet} + + def __init__(self, *args, **kwargs): + super(TestFlowBase, self).__init__(*args, **kwargs) + self.pending = [] + self.results = {} + self.current = None + self.unclear = 0 + + for t in dir(self): + if t.startswith("test_"): + self.pending.append(t) + self.pending.sort(reverse=True) + self.unclear = len(self.pending) + + def delete_all_flows(self, dp): + if dp.ofproto == ofproto_v1_0: + match = dp.ofproto_parser.OFPMatch(dp.ofproto.OFPFW_ALL, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0) + m = dp.ofproto_parser.OFPFlowMod(dp, match, 0, + dp.ofproto.OFPFC_DELETE, + 0, 0, 0, 0, + dp.ofproto.OFPP_NONE, 0, None) + elif dp.ofproto == ofproto_v1_2: + match = dp.ofproto_parser.OFPMatch() + m = dp.ofproto_parser.OFPFlowMod(dp, 0, 0, dp.ofproto.OFPTT_ALL, + dp.ofproto.OFPFC_DELETE, + 0, 0, 0, 0xffffffff, + dp.ofproto.OFPP_ANY, + dp.ofproto.OFPG_ANY, + 0, match, []) + + dp.send_msg(m) + + def send_flow_stats(self, dp): + if dp.ofproto == ofproto_v1_0: + match = dp.ofproto_parser.OFPMatch(dp.ofproto.OFPFW_ALL, + 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0) + m = dp.ofproto_parser.OFPFlowStatsRequest(dp, 0, match, + 0, dp.ofproto.OFPP_NONE) + elif dp.ofproto == ofproto_v1_2: + match = dp.ofproto_parser.OFPMatch() + m = dp.ofproto_parser.OFPFlowStatsRequest(dp, dp.ofproto.OFPTT_ALL, + dp.ofproto.OFPP_ANY, + dp.ofproto.OFPG_ANY, + 0, 0, match) + + dp.send_msg(m) + + def verify_default(self, dp, stats): + return 'function %s() is not found.' % ("verify" + self.current[4:], ) + + def start_next_test(self, dp): + self.delete_all_flows(dp) + dp.send_barrier() + if len(self.pending): + t = self.pending.pop() + if self.is_supported(t): + LOG.info(LOG_TEST_START, t) + self.current = t + getattr(self, t)(dp) + dp.send_barrier() + self.send_flow_stats(dp) + else: + self.results[t] = LOG_TEST_UNSUPPORTED + self.unclear -= 1 + self.start_next_test(dp) + else: + self.print_results() + + def print_results(self): + LOG.info("TEST_RESULTS:") + ok = 0 + ng = 0 + skip = 0 + for t in sorted(self.results.keys()): + if self.results[t] is True: + ok += 1 + elif self.results[t] == LOG_TEST_UNSUPPORTED: + skip += 1 + else: + ng += 1 + LOG.info(" %s: %s", t, self.results[t]) + LOG.info(LOG_TEST_FINISH, self.unclear == 0, ok, ng, skip) + + @handler.set_ev_cls(ofp_event.EventOFPFlowStatsReply, + handler.MAIN_DISPATCHER) + def flow_reply_handler(self, ev): + self.run_verify(ev) + + @handler.set_ev_cls(ofp_event.EventOFPStatsReply, + handler.MAIN_DISPATCHER) + def stats_reply_handler(self, ev): + self.run_verify(ev) + + def run_verify(self, ev): + msg = ev.msg + dp = msg.datapath + + verify_func = self.verify_default + v = "verify" + self.current[4:] + if hasattr(self, v): + verify_func = getattr(self, v) + + result = verify_func(dp, msg.body) + if result is True: + self.unclear -= 1 + + self.results[self.current] = result + self.start_next_test(dp) + + @handler.set_ev_cls(dpset.EventDP) + def handler_datapath(self, ev): + if ev.enter: + self.start_next_test(ev.dp) + + @set_ev_cls(ofp_event.EventOFPBarrierReply, MAIN_DISPATCHER) + def barrier_replay_handler(self, ev): + pass + + def haddr_to_str(self, addr): + return mac.haddr_to_str(addr) + + def haddr_to_bin(self, string): + return mac.haddr_to_bin(string) + + def haddr_masked(self, haddr_bin, mask_bin): + return mac.haddr_bitand(haddr_bin, mask_bin) + + def ipv4_to_str(self, integre): + ip_list = [str((integre >> (24 - (n * 8)) & 255)) for n in range(4)] + return '.'.join(ip_list) + + def ipv4_to_int(self, string): + ip = string.split('.') + assert len(ip) == 4 + i = 0 + for b in ip: + b = int(b) + i = (i << 8) | b + return i + + def ipv4_masked(self, ip_int, mask_int): + return ip_int & mask_int + + def ipv6_to_str(self, integres): + return ':'.join(hex(x)[2:] for x in integres) + + def ipv6_to_int(self, string): + ip = string.split(':') + assert len(ip) == 8 + return [int(x, 16) for x in ip] + + def ipv6_masked(self, ipv6_int, mask_int): + return [x & y for (x, y) in + itertools.izip(ipv6_int, mask_int)] + + def is_supported(self, t): + return True diff --git a/tests/integrated/vrrp_common.py b/tests/integrated/vrrp_common.py new file mode 100644 index 00000000..58621f45 --- /dev/null +++ b/tests/integrated/vrrp_common.py @@ -0,0 +1,221 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 Isaku Yamahata +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import time +import random + +from ryu.base import app_manager +from ryu.lib import hub +from ryu.lib import mac as lib_mac +from ryu.lib.packet import vrrp +from ryu.services.protocols.vrrp import api as vrrp_api +from ryu.services.protocols.vrrp import event as vrrp_event + + +_VRID = 7 +_PRIMARY_IP_ADDRESS0 = '10.0.0.2' +_PRIMARY_IP_ADDRESS1 = '10.0.0.3' + + +class VRRPCommon(app_manager.RyuApp): + _IFNAME0 = None + _IFNAME1 = None + + def __init__(self, *args, **kwargs): + super(VRRPCommon, self).__init__(*args, **kwargs) + + def _main(self): + self._main_version(vrrp.VRRP_VERSION_V3) + self._main_version(vrrp.VRRP_VERSION_V2) + print("done!") + + def _main_version(self, vrrp_version): + self._main_version_priority(vrrp_version, + vrrp.VRRP_PRIORITY_ADDRESS_OWNER) + self._main_version_priority(vrrp_version, + vrrp.VRRP_PRIORITY_BACKUP_MAX) + self._main_version_priority(vrrp_version, + vrrp.VRRP_PRIORITY_BACKUP_DEFAULT) + self._main_version_priority(vrrp_version, + vrrp.VRRP_PRIORITY_BACKUP_MIN) + + def _main_version_priority(self, vrrp_version, priority): + self._main_version_priority_sleep(vrrp_version, priority, False) + self._main_version_priority_sleep(vrrp_version, priority, True) + + def _check(self, vrrp_api, instances): + while True: + while True: + rep = vrrp_api.vrrp_list(self) + if len(rep.instance_list) >= len(instances) * 2: + if any(i.state == vrrp_event.VRRP_STATE_INITIALIZE + for i in rep.instance_list): + continue + break + print('%s / %s' % (len(rep.instance_list), len(instances) * 2)) + time.sleep(1) + +# for i in rep.instance_list: +# print('%s %s %s %s %s' % (i.instance_name, +# i.monitor_name, +# i.config, +# i.interface, +# i.state)) + assert len(rep.instance_list) == len(instances) * 2 + num_of_master = 0 + d = dict(((i.instance_name, i) for i in rep.instance_list)) + bad = 0 + for i in rep.instance_list: + assert i.state in (vrrp_event.VRRP_STATE_MASTER, + vrrp_event.VRRP_STATE_BACKUP) + if i.state == vrrp_event.VRRP_STATE_MASTER: + num_of_master += 1 + + vr = instances[i.config.vrid] + if (vr[0].config.priority > vr[1].config.priority and + i.instance_name == vr[1].instance_name) or \ + (vr[0].config.priority < vr[1].config.priority and + i.instance_name == vr[0].instance_name): + if i.state == vrrp_event.VRRP_STATE_MASTER: + print("bad master:") + print('%s %s' % (d[vr[0].instance_name].state, + d[vr[0].instance_name].config.priority)) + print('%s %s' % (d[vr[1].instance_name].state, + d[vr[1].instance_name].config.priority)) + bad += 1 +# assert i.state != vrrp_event.VRRP_STATE_MASTER + if bad > 0: + # this could be a transient state + print("%s bad masters" % bad) + time.sleep(1) + continue + if num_of_master >= len(instances): + assert num_of_master == len(instances) + break + print('%s / %s' % (num_of_master, len(instances))) + time.sleep(1) + continue + + def _main_version_priority_sleep(self, vrrp_version, priority, do_sleep): + app_mgr = app_manager.AppManager.get_instance() + self.logger.debug('%s', app_mgr.applications) + vrrp_mgr = app_mgr.applications['VRRPManager'] + + step = 5 + instances = {} + for vrid in range(1, 256, step): + if vrid == _VRID: + continue + print("vrid %s" % vrid) + l = {} + prio = max(vrrp.VRRP_PRIORITY_BACKUP_MIN, + min(vrrp.VRRP_PRIORITY_BACKUP_MAX, vrid)) + rep0 = self._configure_vrrp_router(vrrp_version, + prio, + _PRIMARY_IP_ADDRESS0, + self._IFNAME0, + vrid) + assert rep0.instance_name is not None + l[0] = rep0 + prio = max(vrrp.VRRP_PRIORITY_BACKUP_MIN, + min(vrrp.VRRP_PRIORITY_BACKUP_MAX, 256 - vrid)) + rep1 = self._configure_vrrp_router(vrrp_version, + prio, + _PRIMARY_IP_ADDRESS1, + self._IFNAME1, + vrid) + assert rep1.instance_name is not None + l[1] = rep1 + instances[vrid] = l + + print("vrid %s" % _VRID) + l = {} + rep0 = self._configure_vrrp_router(vrrp_version, priority, + _PRIMARY_IP_ADDRESS0, + self._IFNAME0, _VRID) + assert rep0.instance_name is not None + l[0] = rep0 + rep1 = self._configure_vrrp_router( + vrrp_version, vrrp.VRRP_PRIORITY_BACKUP_DEFAULT, + _PRIMARY_IP_ADDRESS1, self._IFNAME1, _VRID) + assert rep1.instance_name is not None + l[1] = rep1 + instances[_VRID] = l + + self.logger.debug('%s', vrrp_mgr._instances) + + if do_sleep: + print("priority %s" % priority) + print("waiting for instances starting") + + self._check(vrrp_api, instances) + + for vrid in instances.keys(): + if vrid == _VRID: + continue + which = vrid & 1 + new_priority = int(random.uniform(vrrp.VRRP_PRIORITY_BACKUP_MIN, + vrrp.VRRP_PRIORITY_BACKUP_MAX)) + i = instances[vrid][which] + vrrp_api.vrrp_config_change(self, i.instance_name, + priority=new_priority) + i.config.priority = new_priority + + if do_sleep: + print("priority shuffled") + + self._check(vrrp_api, instances) + + for vrid in instances.keys(): + if vrid == _VRID: + continue + which = vrid & 1 + vrrp_api.vrrp_shutdown(self, instances[vrid][which].instance_name) + vrrp_api.vrrp_shutdown(self, instances[_VRID][0].instance_name) + + if do_sleep: + print("shutting down instances") + while True: + rep = vrrp_api.vrrp_list(self) + if len(rep.instance_list) <= len(instances): + break + print("left %s" % len(rep.instance_list)) + time.sleep(1) + assert len(rep.instance_list) == len(instances) + print("waiting for the rest becoming master") + while True: + rep = vrrp_api.vrrp_list(self) + if all(i.state == vrrp_event.VRRP_STATE_MASTER + for i in rep.instance_list): + break + time.sleep(1) + + vrrp_api.vrrp_shutdown(self, instances[_VRID][1].instance_name) + for vrid in instances.keys(): + if vrid == _VRID: + continue + which = 1 - (vrid & 1) + vrrp_api.vrrp_shutdown(self, instances[vrid][which].instance_name) + + print("waiting for instances shutting down") + while True: + rep = vrrp_api.vrrp_list(self) + if not rep.instance_list: + break + print("left %s" % len(rep.instance_list)) + time.sleep(1) diff --git a/tests/mininet/l2/mpls/PopMPLS_mpls.mn b/tests/mininet/l2/mpls/PopMPLS_mpls.mn new file mode 100644 index 00000000..45fa9f96 --- /dev/null +++ b/tests/mininet/l2/mpls/PopMPLS_mpls.mn @@ -0,0 +1,6 @@ +TEST_NAME=MPLS-PopMPLS +DUMP_HOST=h2 +DUMP_IF=h2-eth0 +RYU_APP=test_mpls +PCAP_MZ="-t tcp -M 80 -P $TEST_NAME -c 3 -r" +PCAP_FILTER="! mpls && ip.proto==TCP" diff --git a/tests/mininet/l2/mpls/PushMPLS_ip.mn b/tests/mininet/l2/mpls/PushMPLS_ip.mn new file mode 100644 index 00000000..2634e788 --- /dev/null +++ b/tests/mininet/l2/mpls/PushMPLS_ip.mn @@ -0,0 +1,6 @@ +TEST_NAME=IP-PushMPLS +DUMP_HOST=h2 +DUMP_IF=h2-eth0 +RYU_APP=test_mpls +PCAP_MZ="-t tcp -P $TEST_NAME -c 3 -b 00:00:00:00:00:02" +PCAP_FILTER="mpls && ip.proto==TCP" diff --git a/tests/mininet/l2/mpls/PushMPLS_mpls.mn b/tests/mininet/l2/mpls/PushMPLS_mpls.mn new file mode 100644 index 00000000..5ac1702f --- /dev/null +++ b/tests/mininet/l2/mpls/PushMPLS_mpls.mn @@ -0,0 +1,6 @@ +TEST_NAME=MPLS-PushMPLS +DUMP_HOST=h2 +DUMP_IF=h2-eth0 +RYU_APP=test_mpls +PCAP_MZ="-t tcp -M 100 -P $TEST_NAME -c 3 -r" +PCAP_FILTER="mpls.label==100 && mpls.label==200 && ip.proto==TCP" diff --git a/tests/mininet/l2/mpls/test_mpls.py b/tests/mininet/l2/mpls/test_mpls.py new file mode 100644 index 00000000..3090a08c --- /dev/null +++ b/tests/mininet/l2/mpls/test_mpls.py @@ -0,0 +1,127 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import struct + +from ryu.base import app_manager +from ryu.controller import ofp_event +from ryu.controller import dpset +from ryu.controller.handler import MAIN_DISPATCHER +from ryu.controller.handler import set_ev_cls +from ryu.ofproto import ofproto_v1_2 +from ryu.ofproto import ether +from ryu.lib.mac import haddr_to_str + + +LOG = logging.getLogger(__name__) + + +class RunTestMininet(app_manager.RyuApp): + + _CONTEXTS = {'dpset': dpset.DPSet} + OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] + + def __init__(self, *args, **kwargs): + super(RunTestMininet, self).__init__(*args, **kwargs) + + def _add_flow(self, dp, match, actions): + inst = [dp.ofproto_parser.OFPInstructionActions( + dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] + + mod = dp.ofproto_parser.OFPFlowMod( + dp, cookie=0, cookie_mask=0, table_id=0, + command=dp.ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0, + priority=0xff, buffer_id=0xffffffff, + out_port=dp.ofproto.OFPP_ANY, out_group=dp.ofproto.OFPG_ANY, + flags=0, match=match, instructions=inst) + + dp.send_msg(mod) + + def _define_flow(self, dp): + in_port = 1 + out_port = 2 + + eth_IP = ether.ETH_TYPE_IP + eth_MPLS = ether.ETH_TYPE_MPLS + + # MPLS(80) -> PopMPLS + LOG.debug("--- add_flow PopMPLS") + m_label = 80 + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + match.set_dl_type(eth_MPLS) + match.set_mpls_label(m_label) + actions = [dp.ofproto_parser.OFPActionPopMpls(eth_IP), + dp.ofproto_parser.OFPActionOutput(out_port, 0)] + self._add_flow(dp, match, actions) + + # IP -> PushMPLS(90) + LOG.debug("--- add_flow PushMPLS") + s_label = 90 + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + match.set_dl_type(eth_IP) + f = dp.ofproto_parser.OFPMatchField.make( + dp.ofproto.OXM_OF_MPLS_LABEL, s_label) + actions = [dp.ofproto_parser.OFPActionPushMpls(eth_MPLS), + dp.ofproto_parser.OFPActionSetField(f), + dp.ofproto_parser.OFPActionOutput(out_port, 0)] + self._add_flow(dp, match, actions) + + # MPLS(100) -> PushMPLS(200) + LOG.debug("--- add_flow PushMPLS") + m_label = 100 + s_label = 200 + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + match.set_dl_type(eth_MPLS) + match.set_mpls_label(m_label) + f = dp.ofproto_parser.OFPMatchField.make( + dp.ofproto.OXM_OF_MPLS_LABEL, s_label) + actions = [dp.ofproto_parser.OFPActionPushMpls(eth_MPLS), + dp.ofproto_parser.OFPActionSetField(f), + dp.ofproto_parser.OFPActionOutput(out_port, 0)] + self._add_flow(dp, match, actions) + + # MPLS(1000):MPLS -> PopMPLS + # LOG.debug("--- add_flow PopMPLS") + # SKIP: ovs not supported + m_label = 1000 + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + match.set_dl_type(eth_MPLS) + match.set_mpls_label(m_label) + actions = [dp.ofproto_parser.OFPActionPopMpls(eth_MPLS), + dp.ofproto_parser.OFPActionOutput(out_port, 0)] + # self._add_flow(dp, match, actions) + + @set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) + def handler_datapath(self, ev): + if ev.enter: + self._define_flow(ev.dp) + + @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) + def packet_in_handler(self, ev): + msg = ev.msg + dst, src, eth_type = struct.unpack_from('!6s6sH', buffer(msg.data), 0) + in_port = msg.match.fields[0].value + + LOG.info("----------------------------------------") + LOG.info("* PacketIn") + LOG.info("in_port=%d, eth_type: %s", in_port, hex(eth_type)) + LOG.info("packet reason=%d buffer_id=%d", msg.reason, msg.buffer_id) + LOG.info("packet in datapath_id=%s src=%s dst=%s", + msg.datapath.id, haddr_to_str(src), haddr_to_str(dst)) diff --git a/tests/mininet/l2/vlan/PopVLAN_vlan.mn b/tests/mininet/l2/vlan/PopVLAN_vlan.mn new file mode 100644 index 00000000..f1d1c6dd --- /dev/null +++ b/tests/mininet/l2/vlan/PopVLAN_vlan.mn @@ -0,0 +1,6 @@ +TEST_NAME=VLAN-PopVLAN +DUMP_HOST=h2 +DUMP_IF=h2-eth0 +RYU_APP=test_vlan +PCAP_MZ="-t tcp -Q 8 -P $TEST_NAME -c 3 -r" +PCAP_FILTER="! vlan && ip.proto==TCP" diff --git a/tests/mininet/l2/vlan/PopVLAN_vlanvlan.mn b/tests/mininet/l2/vlan/PopVLAN_vlanvlan.mn new file mode 100644 index 00000000..90444a75 --- /dev/null +++ b/tests/mininet/l2/vlan/PopVLAN_vlanvlan.mn @@ -0,0 +1,6 @@ +TEST_NAME=VLAN:VLAN-PopVLAN +DUMP_HOST=h2 +DUMP_IF=h2-eth0 +RYU_APP=test_vlan +PCAP_MZ="-t tcp -Q 100,99 -P $TEST_NAME -c 3 -r" +PCAP_FILTER="vlan.id!=100 && vlan.id==99 && ip.proto==TCP" diff --git a/tests/mininet/l2/vlan/PushVLAN_icmp.mn b/tests/mininet/l2/vlan/PushVLAN_icmp.mn new file mode 100644 index 00000000..439ad233 --- /dev/null +++ b/tests/mininet/l2/vlan/PushVLAN_icmp.mn @@ -0,0 +1,6 @@ +TEST_NAME=ICMP-PushVLAN +DUMP_HOST=h2 +DUMP_IF=h2-eth0 +RYU_APP=test_vlan +PCAP_MZ="-t icmp ping -P $TEST_NAME -c 3 -r -b 00:00:00:00:00:02" +PCAP_FILTER="vlan && icmp.type==8" diff --git a/tests/mininet/l2/vlan/test_vlan.py b/tests/mininet/l2/vlan/test_vlan.py new file mode 100644 index 00000000..0b1be7fc --- /dev/null +++ b/tests/mininet/l2/vlan/test_vlan.py @@ -0,0 +1,130 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import struct + +from ryu.base import app_manager +from ryu.controller import ofp_event +from ryu.controller import dpset +from ryu.controller.handler import MAIN_DISPATCHER +from ryu.controller.handler import set_ev_cls +from ryu.ofproto import ofproto_v1_2 +from ryu.ofproto import ether +from ryu.ofproto import inet +from ryu.lib.mac import haddr_to_str + + +LOG = logging.getLogger(__name__) + + +class RunTestMininet(app_manager.RyuApp): + + _CONTEXTS = {'dpset': dpset.DPSet} + OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] + + def __init__(self, *args, **kwargs): + super(RunTestMininet, self).__init__(*args, **kwargs) + + def _add_flow(self, dp, match, actions): + inst = [dp.ofproto_parser.OFPInstructionActions( + dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] + + mod = dp.ofproto_parser.OFPFlowMod( + dp, cookie=0, cookie_mask=0, table_id=0, + command=dp.ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0, + priority=0xff, buffer_id=0xffffffff, + out_port=dp.ofproto.OFPP_ANY, out_group=dp.ofproto.OFPG_ANY, + flags=0, match=match, instructions=inst) + + dp.send_msg(mod) + + def _define_flow(self, dp): + in_port = 1 + out_port = 2 + + eth_IP = ether.ETH_TYPE_IP + eth_VLAN = ether.ETH_TYPE_8021Q + ip_ICMP = inet.IPPROTO_ICMP + + # VLAN(8) -> PopVLAN + LOG.debug("--- add_flow VLAN(8) to PopVLAN") + m_vid = 8 + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + match.set_dl_type(eth_IP) + match.set_vlan_vid(m_vid) + actions = [dp.ofproto_parser.OFPActionPopVlan(), + dp.ofproto_parser.OFPActionOutput(out_port, 0)] + self._add_flow(dp, match, actions) + + # ICMP -> PushVLAN(9) + LOG.debug("--- add_flow ICMP to PushVLAN(9)") + s_vid = 9 + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + match.set_dl_type(eth_IP) + match.set_ip_proto(ip_ICMP) + f = dp.ofproto_parser.OFPMatchField.make( + dp.ofproto.OXM_OF_VLAN_VID, s_vid) + actions = [dp.ofproto_parser.OFPActionPushVlan(eth_VLAN), + dp.ofproto_parser.OFPActionSetField(f), + dp.ofproto_parser.OFPActionOutput(out_port, 0)] + self._add_flow(dp, match, actions) + + # VLAN(10) -> PushVLAN(20) + # LOG.debug("--- add_flow VLAN(10) to PushVLAN(100)") + # SKIP: ovs not supported + m_vid = 10 + s_vid = 20 + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + match.set_dl_type(eth_IP) + match.set_vlan_vid(m_vid) + f = dp.ofproto_parser.OFPMatchField.make( + dp.ofproto.OXM_OF_VLAN_VID, s_vid) + actions = [dp.ofproto_parser.OFPActionPushVlan(eth_VLAN), + dp.ofproto_parser.OFPActionSetField(f), + dp.ofproto_parser.OFPActionOutput(out_port, 0)] + # self._add_flow(dp, match, actions) + + # VLAN(100):VLAN -> PopVLAN + LOG.debug("--- add_flow VLAN(100):VLAN to PopVLAN") + m_vid = 100 + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + match.set_dl_type(eth_VLAN) + match.set_vlan_vid(m_vid) + actions = [dp.ofproto_parser.OFPActionPopVlan(), + dp.ofproto_parser.OFPActionOutput(out_port, 0)] + self._add_flow(dp, match, actions) + + @set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) + def handler_datapath(self, ev): + if ev.enter: + self._define_flow(ev.dp) + + @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) + def packet_in_handler(self, ev): + msg = ev.msg + dst, src, eth_type = struct.unpack_from('!6s6sH', buffer(msg.data), 0) + in_port = msg.match.fields[0].value + + LOG.info("----------------------------------------") + LOG.info("* PacketIn") + LOG.info("in_port=%d, eth_type: %s", in_port, hex(eth_type)) + LOG.info("packet reason=%d buffer_id=%d", msg.reason, msg.buffer_id) + LOG.info("packet in datapath_id=%s src=%s dst=%s", + msg.datapath.id, haddr_to_str(src), haddr_to_str(dst)) diff --git a/tests/mininet/l3/icmp/ICMP_ping.mn b/tests/mininet/l3/icmp/ICMP_ping.mn new file mode 100644 index 00000000..f558693d --- /dev/null +++ b/tests/mininet/l3/icmp/ICMP_ping.mn @@ -0,0 +1,6 @@ +TEST_NAME=ICMP-Req +DUMP_HOST=h2 +DUMP_IF=h2-eth0 +RYU_APP=test_icmp +PCAP_MZ="-t icmp ping -c 3 -r -b 00:00:00:00:00:00" +PCAP_FILTER="icmp.type==8" diff --git a/tests/mininet/l3/icmp/ICMP_reply.mn b/tests/mininet/l3/icmp/ICMP_reply.mn new file mode 100644 index 00000000..eb6bc8b6 --- /dev/null +++ b/tests/mininet/l3/icmp/ICMP_reply.mn @@ -0,0 +1,6 @@ +TEST_NAME=ICMP-Reply +DUMP_HOST=h1 +DUMP_IF=h1-eth0 +RYU_APP=test_icmp +PCAP_MZ="-t icmp ping -c 3 -r -B h2" +PCAP_FILTER="icmp.type==0" diff --git a/tests/mininet/l3/icmp/test_icmp.py b/tests/mininet/l3/icmp/test_icmp.py new file mode 100644 index 00000000..090f83e5 --- /dev/null +++ b/tests/mininet/l3/icmp/test_icmp.py @@ -0,0 +1,84 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import struct + +from ryu.base import app_manager +from ryu.controller import ofp_event +from ryu.controller import dpset +from ryu.controller.handler import MAIN_DISPATCHER +from ryu.controller.handler import set_ev_cls +from ryu.ofproto import ofproto_v1_2 +from ryu.lib.mac import haddr_to_str + + +LOG = logging.getLogger(__name__) + + +class RunTestMininet(app_manager.RyuApp): + + _CONTEXTS = {'dpset': dpset.DPSet} + OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] + + def __init__(self, *args, **kwargs): + super(RunTestMininet, self).__init__(*args, **kwargs) + + def _add_flow(self, dp, match, actions): + inst = [dp.ofproto_parser.OFPInstructionActions( + dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] + + mod = dp.ofproto_parser.OFPFlowMod( + dp, cookie=0, cookie_mask=0, table_id=0, + command=dp.ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0, + priority=0xff, buffer_id=0xffffffff, + out_port=dp.ofproto.OFPP_ANY, out_group=dp.ofproto.OFPG_ANY, + flags=0, match=match, instructions=inst) + + dp.send_msg(mod) + + def _define_flow(self, dp): + in_port = 1 + out_port = 2 + + # port:1 -> port:2 + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + actions = [dp.ofproto_parser.OFPActionOutput(out_port, 0)] + self._add_flow(dp, match, actions) + + # port:1 -> port:2 + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(out_port) + actions = [dp.ofproto_parser.OFPActionOutput(in_port, 0)] + self._add_flow(dp, match, actions) + + @set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) + def handler_datapath(self, ev): + if ev.enter: + self._define_flow(ev.dp) + + @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) + def packet_in_handler(self, ev): + msg = ev.msg + dst, src, eth_type = struct.unpack_from('!6s6sH', buffer(msg.data), 0) + in_port = msg.match.fields[0].value + + LOG.info("----------------------------------------") + LOG.info("* PacketIn") + LOG.info("in_port=%d, eth_type: %s", in_port, hex(eth_type)) + LOG.info("packet reason=%d buffer_id=%d", msg.reason, msg.buffer_id) + LOG.info("packet in datapath_id=%s src=%s dst=%s", + msg.datapath.id, haddr_to_str(src), haddr_to_str(dst)) diff --git a/tests/mininet/l3/ip_ttl/DecNwTtl.mn b/tests/mininet/l3/ip_ttl/DecNwTtl.mn new file mode 100644 index 00000000..60cd4623 --- /dev/null +++ b/tests/mininet/l3/ip_ttl/DecNwTtl.mn @@ -0,0 +1,6 @@ +TEST_NAME=DecNwTtl +DUMP_HOST=h2 +DUMP_IF=h2-eth0 +RYU_APP=test_ip_ttl +PCAP_MZ="-t icmp ttl=64 -P $TEST_NAME -c 3 -b 00:00:00:00:00:02" +PCAP_FILTER="icmp && ip.ttl==63" diff --git a/tests/mininet/l3/ip_ttl/test_ip_ttl.py b/tests/mininet/l3/ip_ttl/test_ip_ttl.py new file mode 100644 index 00000000..f6f00ab9 --- /dev/null +++ b/tests/mininet/l3/ip_ttl/test_ip_ttl.py @@ -0,0 +1,84 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import struct + +from ryu.base import app_manager +from ryu.controller import ofp_event +from ryu.controller import dpset +from ryu.controller.handler import MAIN_DISPATCHER +from ryu.controller.handler import set_ev_cls +from ryu.ofproto import ofproto_v1_2 +from ryu.ofproto import ether +from ryu.lib.mac import haddr_to_str + + +LOG = logging.getLogger(__name__) + + +class RunTestMininet(app_manager.RyuApp): + + _CONTEXTS = {'dpset': dpset.DPSet} + OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] + + def __init__(self, *args, **kwargs): + super(RunTestMininet, self).__init__(*args, **kwargs) + + def _add_flow(self, dp, match, actions): + inst = [dp.ofproto_parser.OFPInstructionActions( + dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] + + mod = dp.ofproto_parser.OFPFlowMod( + dp, cookie=0, cookie_mask=0, table_id=0, + command=dp.ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0, + priority=0xff, buffer_id=0xffffffff, + out_port=dp.ofproto.OFPP_ANY, out_group=dp.ofproto.OFPG_ANY, + flags=0, match=match, instructions=inst) + + dp.send_msg(mod) + + def _define_flow(self, dp): + in_port = 1 + out_port = 2 + + eth_IP = ether.ETH_TYPE_IP + + # ICMP -> DecNwTtl + LOG.debug("--- add_flow DecNwTtl") + match = dp.ofproto_parser.OFPMatch() + match.set_in_port(in_port) + match.set_dl_type(eth_IP) + actions = [dp.ofproto_parser.OFPActionDecNwTtl(), + dp.ofproto_parser.OFPActionOutput(out_port, 0)] + self._add_flow(dp, match, actions) + + @set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) + def handler_datapath(self, ev): + if ev.enter: + self._define_flow(ev.dp) + + @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) + def packet_in_handler(self, ev): + msg = ev.msg + dst, src, eth_type = struct.unpack_from('!6s6sH', buffer(msg.data), 0) + in_port = msg.match.fields[0].value + + LOG.info("----------------------------------------") + LOG.info("* PacketIn") + LOG.info("in_port=%d, eth_type: %s", in_port, hex(eth_type)) + LOG.info("packet reason=%d buffer_id=%d", msg.reason, msg.buffer_id) + LOG.info("packet in datapath_id=%s src=%s dst=%s", + msg.datapath.id, haddr_to_str(src), haddr_to_str(dst)) diff --git a/tests/mininet/packet_lib/arp/ARP_gratuitous.mn b/tests/mininet/packet_lib/arp/ARP_gratuitous.mn new file mode 100644 index 00000000..ca7a30ae --- /dev/null +++ b/tests/mininet/packet_lib/arp/ARP_gratuitous.mn @@ -0,0 +1,7 @@ +# test-GratuitousARP-request +TEST_NAME=GARP-Request +DUMP_HOST=h1 +DUMP_IF=h1-eth0 +RYU_APP=test_arp +PCAP_MZ="-S" +PCAP_FILTER="arp.isgratuitous && arp.src.proto_ipv4==10.0.0.100 && arp.src.hw_mac==fe:ee:ee:ee:ee:ef" diff --git a/tests/mininet/packet_lib/arp/ARP_reply.mn b/tests/mininet/packet_lib/arp/ARP_reply.mn new file mode 100644 index 00000000..3969cba1 --- /dev/null +++ b/tests/mininet/packet_lib/arp/ARP_reply.mn @@ -0,0 +1,7 @@ +# test-ARP-reply +TEST_NAME=ARP-Reply +DUMP_HOST=h1 +DUMP_IF=h1-eth0 +RYU_APP=test_arp +PCAP_MZ="-t arp request,targetip=10.0.0.100 -c 3 -r" +PCAP_FILTER="arp.opcode==reply && arp.src.proto_ipv4==10.0.0.100 && arp.src.hw_mac==fe:ee:ee:ee:ee:ef" diff --git a/tests/mininet/packet_lib/arp/ARP_request.mn b/tests/mininet/packet_lib/arp/ARP_request.mn new file mode 100644 index 00000000..b44450ef --- /dev/null +++ b/tests/mininet/packet_lib/arp/ARP_request.mn @@ -0,0 +1,7 @@ +# test-ARP-request +TEST_NAME=ARP-Request +DUMP_HOST=h1 +DUMP_IF=h1-eth0 +RYU_APP=test_arp +PCAP_MZ="-t arp request,targetip=10.0.0.1" +PCAP_FILTER="arp.opcode==request && arp.src.proto_ipv4==10.0.0.100 && arp.dst.proto_ipv4==10.0.0.1 && arp.src.hw_mac==fe:ee:ee:ee:ee:ef" diff --git a/tests/mininet/packet_lib/arp/test_arp.py b/tests/mininet/packet_lib/arp/test_arp.py new file mode 100644 index 00000000..39948f54 --- /dev/null +++ b/tests/mininet/packet_lib/arp/test_arp.py @@ -0,0 +1,199 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import logging +import array +import netaddr + +from ryu.base import app_manager +from ryu.controller import dpset +from ryu.controller import ofp_event +from ryu.controller import handler +from ryu.ofproto import ofproto_v1_2 +from ryu.ofproto import ether +from ryu.ofproto import inet +from ryu.lib import mac +from ryu.lib.packet import packet +from ryu.lib.packet import ethernet +from ryu.lib.packet import arp +from ryu.lib.packet import ipv4 +from ryu.lib.packet import icmp + + +LOG = logging.getLogger(__name__) + + +class RunTestMininet(app_manager.RyuApp): + + _CONTEXTS = {'dpset': dpset.DPSet} + OFP_VERSIONS = [ofproto_v1_2.OFP_VERSION] + + ZERO_MAC = mac.haddr_to_bin('00:00:00:00:00:00') + BROADCAST_MAC = mac.haddr_to_bin('ff:ff:ff:ff:ff:ff') + RYU_MAC = mac.haddr_to_bin('fe:ee:ee:ee:ee:ef') + HOST_MAC = mac.haddr_to_bin('00:00:00:00:00:01') + RYU_IP = int(netaddr.IPAddress('10.0.0.100')) + HOST_IP = int(netaddr.IPAddress('10.0.0.1')) + + def __init__(self, *args, **kwargs): + super(RunTestMininet, self).__init__(*args, **kwargs) + + def _send_msg(self, dp, data): + buffer_id = 0xffffffff + in_port = dp.ofproto.OFPP_LOCAL + actions = [dp.ofproto_parser.OFPActionOutput(1, 0)] + msg = dp.ofproto_parser.OFPPacketOut( + dp, buffer_id, in_port, actions, data) + dp.send_msg(msg) + + def _add_flow(self, dp, match, actions): + inst = [dp.ofproto_parser.OFPInstructionActions( + dp.ofproto.OFPIT_APPLY_ACTIONS, actions)] + mod = dp.ofproto_parser.OFPFlowMod( + dp, cookie=0, cookie_mask=0, table_id=0, + command=dp.ofproto.OFPFC_ADD, idle_timeout=0, hard_timeout=0, + priority=0xff, buffer_id=0xffffffff, + out_port=dp.ofproto.OFPP_ANY, out_group=dp.ofproto.OFPG_ANY, + flags=0, match=match, instructions=inst) + dp.send_msg(mod) + + def _find_protocol(self, pkt, name): + for p in pkt.protocols: + if hasattr(p, 'protocol_name'): + if p.protocol_name == name: + return p + + def _get_protocols(self, pkt): + protocols = {} + for p in pkt: + if hasattr(p, 'protocol_name'): + protocols[p.protocol_name] = p + else: + protocols['payload'] = p + return protocols + + def _build_ether(self, ethertype, dst_mac=HOST_MAC): + e = ethernet.ethernet(dst_mac, self.RYU_MAC, ethertype) + return e + + def _build_arp(self, opcode, dst_ip=HOST_IP): + if opcode == arp.ARP_REQUEST: + _eth_dst_mac = self.BROADCAST_MAC + _arp_dst_mac = self.ZERO_MAC + elif opcode == arp.ARP_REPLY: + _eth_dst_mac = self.HOST_MAC + _arp_dst_mac = self.HOST_MAC + + e = self._build_ether(ether.ETH_TYPE_ARP, _eth_dst_mac) + a = arp.arp(hwtype=1, proto=ether.ETH_TYPE_IP, hlen=6, plen=4, + opcode=opcode, src_mac=self.RYU_MAC, src_ip=self.RYU_IP, + dst_mac=_arp_dst_mac, dst_ip=dst_ip) + p = packet.Packet() + p.add_protocol(e) + p.add_protocol(a) + p.serialize() + + return p + + def _build_echo(self, _type, echo): + e = self._build_ether(ether.ETH_TYPE_IP) + ip = ipv4.ipv4(version=4, header_length=5, tos=0, total_length=84, + identification=0, flags=0, offset=0, ttl=64, + proto=inet.IPPROTO_ICMP, csum=0, + src=self.RYU_IP, dst=self.HOST_IP) + ping = icmp.icmp(_type, code=0, csum=0, data=echo) + + p = packet.Packet() + p.add_protocol(e) + p.add_protocol(ip) + p.add_protocol(ping) + p.serialize() + return p + + def _garp(self): + p = self._build_arp(arp.ARP_REQUEST, self.RYU_IP) + return p.data + + def _arp_request(self): + p = self._build_arp(arp.ARP_REQUEST, self.HOST_IP) + return p.data + + def _arp_reply(self): + p = self._build_arp(arp.ARP_REPLY, self.HOST_IP) + return p.data + + def _echo_request(self, echo): + p = self._build_echo(icmp.ICMP_ECHO_REQUEST, echo) + return p.data + + def _echo_reply(self, echo): + p = self._build_echo(icmp.ICMP_ECHO_REPLY, echo) + return p.data + + @handler.set_ev_cls(ofp_event.EventOFPPacketIn, handler.MAIN_DISPATCHER) + def packet_in_handler(self, ev): + msg = ev.msg + dp = msg.datapath + + pkt = packet.Packet(array.array('B', msg.data)) + p_arp = self._find_protocol(pkt, "arp") + p_icmp = self._find_protocol(pkt, "icmp") + p_ipv4 = self._find_protocol(pkt, "ipv4") + + if p_arp: + src_ip = str(netaddr.IPAddress(p_arp.src_ip)) + dst_ip = str(netaddr.IPAddress(p_arp.dst_ip)) + if p_arp.opcode == arp.ARP_REQUEST: + LOG.debug("--- PacketIn: ARP_Request: %s->%s", src_ip, dst_ip) + if p_arp.dst_ip == self.RYU_IP: + LOG.debug("--- send Pkt: ARP_Reply") + data = self._arp_reply() + self._send_msg(dp, data) + elif p_arp.dst_ip == self.HOST_IP: + LOG.debug(" PacketIn: GARP") + LOG.debug("--- send Pkt: ARP_Request") + data = self._arp_request() + self._send_msg(dp, data) + elif p_arp.opcode == arp.ARP_REPLY: + LOG.debug("--- PacketIn: ARP_Reply: %s->%s", src_ip, dst_ip) + LOG.debug("--- send Pkt: Echo_Request") + echo = icmp.echo(id_=66, seq=1) + data = self._echo_request(echo) + self._send_msg(dp, data) + + if p_icmp: + src = str(netaddr.IPAddress(p_ipv4.src)) + dst = str(netaddr.IPAddress(p_ipv4.dst)) + if p_icmp.type == icmp.ICMP_ECHO_REQUEST: + LOG.debug("--- PacketIn: Echo_Request: %s->%s", src, dst) + if p_ipv4.dst == self.RYU_IP: + LOG.debug("--- send Pkt: Echo_Reply") + echo = p_icmp.data + echo.data = bytearray(echo.data) + data = self._echo_reply(echo) + self._send_msg(dp, data) + elif p_icmp.type == icmp.ICMP_ECHO_REPLY: + LOG.debug("--- PacketIn: Echo_Reply: %s->%s", src, dst) + + @handler.set_ev_cls(dpset.EventDP, dpset.DPSET_EV_DISPATCHER) + def handler_datapath(self, ev): + if ev.enter: + dp = ev.dp + + LOG.debug("--- send Pkt: Gratuitous ARP_Request") + data = self._garp() + self._send_msg(dp, data) diff --git a/tests/mininet/run_mnet-test.sh b/tests/mininet/run_mnet-test.sh new file mode 100755 index 00000000..c1ecbe23 --- /dev/null +++ b/tests/mininet/run_mnet-test.sh @@ -0,0 +1,274 @@ +#!/bin/sh + +RUN_DIR=`dirname $0` +CMD_NAME=`basename $0 .sh` +CMD_PATH=`readlink -f $0` +CMD_DIR=`dirname $CMD_PATH` +DUMP_SEC=10 +DUMP_DELAY=2 +DUMP_DIR=/tmp/test-mn/dump +TEST_LIST= +TEST_SUFFIX=.mn +MN_PRE_FILE=/tmp/test-mn/mn-pre +MN_POST_FILE=/tmp/test-mn/mn-post +PKG_LIST="tshark tcpreplay mz" +RTN=0 + +# usage +usage() { + echo "Usage: $0 [OPTION] [TEST DIR or FILE]..." + echo "" + echo "Run Ryu's test in mininet" + echo "ex.) $ $0 l2 l3/icmp/ICMP_ping.mn" + echo "" + echo "Options:" + echo " -h, --help show this help message and exit" + exit 0 +} + +# set default environment +set_env() { + POST_IF=h1-eth0 + DUMP_HOST=h2 + DUMP_IF=h2-eth0 + TEST_NAME= + DUMP_FILE= + RYU_APP= + RYU_LOG= + PCAP_MZ= + PCAP_FILE= + PCAP_FILTER= + PCAP_COM= + CACHE_HIT= +} + +# making mininet-test-pre-file +mn_pre() { + exec 3>&1 + exec >$MN_PRE_FILE + echo "sh echo '----------------------------------'" + echo "sh echo '(pre) mininet topology dump.'" + echo "sh echo '----------------------------------'" + echo "dump" + echo "net" + echo "sh echo '----------------------------------'" + echo "sh echo '(pre) tshark start.'" + echo "sh echo '----------------------------------'" + echo "$DUMP_HOST tshark -i $DUMP_IF -a duration:$DUMP_SEC -w $DUMP_FILE &" + echo "sh sleep $DUMP_DELAY" + echo "sh echo '----------------------------------'" + exec 1>&3 +} + +# making mininet-test-post-file +mn_post() { + exec 3>&1 + exec >$MN_POST_FILE + echo "sh ovs-vsctl del-controller s1" + echo "sh ovs-vsctl set bridge s1 protocols='[OpenFlow10,OpenFlow12]'" + echo "sh ovs-vsctl set-controller s1 tcp:127.0.0.1" + echo "sh echo '----------------------------------'" + echo "sh echo '(post) packet sending...'" + echo "sh echo '----------------------------------'" + echo $PCAP_COM + echo "sh sleep 1" + echo "sh echo '----------------------------------'" + echo "sh echo '(post) dump flows.'" + echo "sh echo '----------------------------------'" + echo "sh ovs-ofctl dump-flows s1" + echo "sh echo '----------------------------------'" + exec 1>&3 +} + +# ovs cache-hit incremental check +ovs_cache_hit() { + expr `sudo ovs-dpctl show|sed -n 's|lookups: hit:||gp'|awk '{print $1}'` - ${1:-0} +} + +# starting ryu-manager +run_ryu() { + ERRSTAT=0 + ERRTAG="run_ryu() :" + + echo "Inf: RYU_APP=$RYU_APP" + echo "Inf: ryu-manager starting..." + ryu-manager --verbose $RYU_APP 2>$DUMP_DIR/$RYU_LOG & + PID_RYU=$! + sleep 1 + [ -d /proc/$PID_RYU ] || err $ERRTAG "failed to start ryu-manager." + + return $ERRSTAT +} + +# starting mininet and test-script +run_mn() { + echo "Info: mininet starting..." + sudo mn --mac --test none --pre $MN_PRE_FILE --post $MN_POST_FILE \ + --controller remote 127.0.0.1 +} + +# cleaning after mininet +clean_mn() { + wait_ryu + rm -f $MN_PRE_FILE $MN_POST_FILE +} + +# check packet and chache-hit +check() { + PACKET=`tshark -r $DUMP_FILE -R "$PCAP_FILTER" 2>/dev/null` + if [ ! "$PACKET" ]; then + RESULT=NG + REASON="(unmatched packet. please check $DUMP_FILE)" + elif [ "$CACHE_HIT" ] && [ `ovs_cache_hit $CACHE_HIT` -eq 0 ]; then + RESULT=NG + REASON="(ovs cache hit miss.)" + else + RESULT=OK; REASON= + fi + echo + echo "TEST ${TEST_NAME} : $RESULT $REASON" +} + +# stoping ryu-manager +wait_ryu() { + kill -2 $PID_RYU + wait $PID_RYU +} + +# test-main +test_mn() { + DUMP_FILE=$DUMP_DIR/$DUMP_FILE + touch $DUMP_FILE + sudo chmod o+w $DUMP_FILE + [ "$CACHE_HIT" ] && CACHE_HIT=`ovs_cache_hit 0` + mn_pre + mn_post + run_ryu; [ $? -ne 0 ] && return 1 + run_mn; [ $? -ne 0 ] && return 1 + check + + return 0 +} + +err() { + echo Error: $* + ERRSTAT=1 +} + +mnfile_check() { + test=`basename $1 $TEST_SUFFIX` + file=`readlink -f $1` + TEST_DIR=`dirname $file` + ERRSTAT=0 + ERRTAG="mnfile_check() :" + + # test-file check + if [ ! -r $file ]; then + err $ERRTAG "cannot open the file: $file" + return $ERRSTAT + fi + + . $file || err $ERRTAG "failed to include $file" + + # parameter check + [ "$RYU_APP" ] || err $ERRTAG: "RYU_APP is not defined" + [ "$PCAP_FILE" -o "$PCAP_MZ" ] || err $ERRTAG: "PCAP_FILE or PCAP_MZ is not defined" + [ "$PCAP_FILTER" ] || err $ERRTAG "PCAP_FILTER is not defined" + [ "$TEST_NAME" ] || TEST_NAME=$test + [ "$DUMP_FILE" ] || DUMP_FILE=$test.dump + [ "$RYU_LOG" ] || RYU_LOG=ryu-manager.$test.log + [ $ERRSTAT -ne 0 ] && return $ERRSTAT + + # pcap check (pcap-file or mz-option) + if [ "$PCAP_FILE" ]; then + PCAP_FILE=$TEST_DIR/$PCAP_FILE + [ -r $PCAP_FILE ] || err $ERRTAG "PCAP_FILE[$PCAP_FILE] cannot read" + PCAP_COM="h1 tcpreplay -l 3 -i $POST_IF $PCAP_FILE" + elif [ "$PCAP_MZ" ]; then + PCAP_COM="h1 mz $POST_IF $PCAP_MZ" + fi + [ $ERRSTAT -ne 0 ] && return $ERRSTAT + + # ryu-app check + [ -r $TEST_DIR/$RYU_APP -o -r $TEST_DIR/${RYU_APP}.py ] && RYU_APP=$TEST_DIR/$RYU_APP + + return $ERRSTAT +} + +arg_check() { + ARGLIST= + ERRTAG="argcheck() :" + + case "$1" in + -h|--help) usage;; + esac + + if [ $# -ne 0 ]; then + ARGLIST=$* + else + ARGLIST=`find . -type f -name "*$TEST_SUFFIX"` + fi + + for arg in $ARGLIST; do + if [ -d $arg ]; then + file=`find $arg -type f -name "*$TEST_SUFFIX"` + elif [ -f $arg ]; then + file=$arg + else + err $ERRTAG "$arg is not found" + file= + fi + + TEST_LIST="$TEST_LIST $file" + done +} + +pkg_check() { + no_pkg= + for pkg in $PKG_LIST; do + [ ! `which $pkg` ] && no_pkg="$no_pkg $pkg" + done + for pkg in $no_pkg; do + echo "Error: Package [ $pkg ] is not found. Please install." + done + [ "$no_pkg" ] && exit 1 +} + +### main +[ -d $DUMP_DIR ] || mkdir -p $DUMP_DIR + +pkg_check +arg_check $* +echo "\n---------- test target ----------" +for testfile in $TEST_LIST; do echo $testfile; done + +count=0 +for testfile in $TEST_LIST; do + echo "\n---------- test [$testfile] start ----------" + set_env + mnfile_check $testfile && test_mn + case $? in + 0) msg="finished : $RESULT" ;; + *) msg="skipped with error"; RESULT="skip" ;; + esac + eval RESULT_${count}=\$RESULT + eval REASON_${count}=\$REASON + count=`expr $count + 1` + num=`eval echo \\${num_$RESULT:-0}` + eval num_${RESULT}=`expr $num + 1` + [ "$RESULT" != "OK" ] && RTN=1 + clean_mn + echo "\n---------- test [$testfile] $msg ----------" +done + +# output summary results +echo "\n---------- test results ----------" +count=0 +for testfile in $TEST_LIST; do + eval echo \$testfile : \$RESULT_${count} \$REASON_${count} + count=`expr $count + 1` +done +echo "----------------------------------" +echo "Ran $count tests. Result: ${num_OK:+OK=}$num_OK ${num_NG:+NG=}$num_NG ${num_skip:+skip=}$num_skip" + +exit $RTN diff --git a/tests/packet_data/bgp4/bgp4-keepalive.pcap b/tests/packet_data/bgp4/bgp4-keepalive.pcap new file mode 100644 index 00000000..355e9dab Binary files /dev/null and b/tests/packet_data/bgp4/bgp4-keepalive.pcap differ diff --git a/tests/packet_data/bgp4/bgp4-open.pcap b/tests/packet_data/bgp4/bgp4-open.pcap new file mode 100644 index 00000000..1ef507bb Binary files /dev/null and b/tests/packet_data/bgp4/bgp4-open.pcap differ diff --git a/tests/packet_data/bgp4/bgp4-update.pcap b/tests/packet_data/bgp4/bgp4-update.pcap new file mode 100644 index 00000000..37354938 Binary files /dev/null and b/tests/packet_data/bgp4/bgp4-update.pcap differ diff --git a/tests/packet_data/bgp4/bgp4-update_ipv6.pcap b/tests/packet_data/bgp4/bgp4-update_ipv6.pcap new file mode 100644 index 00000000..49ed4d9e Binary files /dev/null and b/tests/packet_data/bgp4/bgp4-update_ipv6.pcap differ diff --git a/tests/packet_data/bgp4/bgp4-update_vpnv6.pcap b/tests/packet_data/bgp4/bgp4-update_vpnv6.pcap new file mode 100644 index 00000000..07e5ebb3 Binary files /dev/null and b/tests/packet_data/bgp4/bgp4-update_vpnv6.pcap differ diff --git a/tests/packet_data/bgp4/evpn_esi_arbitrary.pcap b/tests/packet_data/bgp4/evpn_esi_arbitrary.pcap new file mode 100644 index 00000000..490ee839 Binary files /dev/null and b/tests/packet_data/bgp4/evpn_esi_arbitrary.pcap differ diff --git a/tests/packet_data/bgp4/evpn_esi_as_based.pcap b/tests/packet_data/bgp4/evpn_esi_as_based.pcap new file mode 100644 index 00000000..d17183a7 Binary files /dev/null and b/tests/packet_data/bgp4/evpn_esi_as_based.pcap differ diff --git a/tests/packet_data/bgp4/evpn_esi_l2_bridge.pcap b/tests/packet_data/bgp4/evpn_esi_l2_bridge.pcap new file mode 100644 index 00000000..0f8d3f95 Binary files /dev/null and b/tests/packet_data/bgp4/evpn_esi_l2_bridge.pcap differ diff --git a/tests/packet_data/bgp4/evpn_esi_lacp.pcap b/tests/packet_data/bgp4/evpn_esi_lacp.pcap new file mode 100644 index 00000000..833109b5 Binary files /dev/null and b/tests/packet_data/bgp4/evpn_esi_lacp.pcap differ diff --git a/tests/packet_data/bgp4/evpn_esi_mac_base.pcap b/tests/packet_data/bgp4/evpn_esi_mac_base.pcap new file mode 100644 index 00000000..3b6fa798 Binary files /dev/null and b/tests/packet_data/bgp4/evpn_esi_mac_base.pcap differ diff --git a/tests/packet_data/bgp4/evpn_esi_router_id.pcap b/tests/packet_data/bgp4/evpn_esi_router_id.pcap new file mode 100644 index 00000000..b69ce620 Binary files /dev/null and b/tests/packet_data/bgp4/evpn_esi_router_id.pcap differ diff --git a/tests/packet_data/bgp4/evpn_nlri_eth_a-d.pcap b/tests/packet_data/bgp4/evpn_nlri_eth_a-d.pcap new file mode 100644 index 00000000..434c898a Binary files /dev/null and b/tests/packet_data/bgp4/evpn_nlri_eth_a-d.pcap differ diff --git a/tests/packet_data/bgp4/evpn_nlri_eth_seg.pcap b/tests/packet_data/bgp4/evpn_nlri_eth_seg.pcap new file mode 100644 index 00000000..a99804b3 Binary files /dev/null and b/tests/packet_data/bgp4/evpn_nlri_eth_seg.pcap differ diff --git a/tests/packet_data/bgp4/evpn_nlri_inc_multi_eth_tag.pcap b/tests/packet_data/bgp4/evpn_nlri_inc_multi_eth_tag.pcap new file mode 100644 index 00000000..293722db Binary files /dev/null and b/tests/packet_data/bgp4/evpn_nlri_inc_multi_eth_tag.pcap differ diff --git a/tests/packet_data/bgp4/evpn_nlri_ip_prefix.pcap b/tests/packet_data/bgp4/evpn_nlri_ip_prefix.pcap new file mode 100644 index 00000000..f1598ee8 Binary files /dev/null and b/tests/packet_data/bgp4/evpn_nlri_ip_prefix.pcap differ diff --git a/tests/packet_data/bgp4/evpn_nlri_mac_ip_ad.pcap b/tests/packet_data/bgp4/evpn_nlri_mac_ip_ad.pcap new file mode 100644 index 00000000..f9152e80 Binary files /dev/null and b/tests/packet_data/bgp4/evpn_nlri_mac_ip_ad.pcap differ diff --git a/tests/packet_data/bgp4/flowspec_action_redirect.pcap b/tests/packet_data/bgp4/flowspec_action_redirect.pcap new file mode 100644 index 00000000..70d65ee4 Binary files /dev/null and b/tests/packet_data/bgp4/flowspec_action_redirect.pcap differ diff --git a/tests/packet_data/bgp4/flowspec_action_traffic_action.pcap b/tests/packet_data/bgp4/flowspec_action_traffic_action.pcap new file mode 100644 index 00000000..952723ea Binary files /dev/null and b/tests/packet_data/bgp4/flowspec_action_traffic_action.pcap differ diff --git a/tests/packet_data/bgp4/flowspec_action_traffic_marking.pcap b/tests/packet_data/bgp4/flowspec_action_traffic_marking.pcap new file mode 100644 index 00000000..8f00c0f9 Binary files /dev/null and b/tests/packet_data/bgp4/flowspec_action_traffic_marking.pcap differ diff --git a/tests/packet_data/bgp4/flowspec_action_traffic_rate.pcap b/tests/packet_data/bgp4/flowspec_action_traffic_rate.pcap new file mode 100644 index 00000000..9f20f5e6 Binary files /dev/null and b/tests/packet_data/bgp4/flowspec_action_traffic_rate.pcap differ diff --git a/tests/packet_data/bgp4/flowspec_nlri_ipv4.pcap b/tests/packet_data/bgp4/flowspec_nlri_ipv4.pcap new file mode 100644 index 00000000..885a106a Binary files /dev/null and b/tests/packet_data/bgp4/flowspec_nlri_ipv4.pcap differ diff --git a/tests/packet_data/bgp4/flowspec_nlri_ipv6.pcap b/tests/packet_data/bgp4/flowspec_nlri_ipv6.pcap new file mode 100644 index 00000000..82534a61 Binary files /dev/null and b/tests/packet_data/bgp4/flowspec_nlri_ipv6.pcap differ diff --git a/tests/packet_data/bgp4/flowspec_nlri_l2vpn.pcap b/tests/packet_data/bgp4/flowspec_nlri_l2vpn.pcap new file mode 100644 index 00000000..5236c831 Binary files /dev/null and b/tests/packet_data/bgp4/flowspec_nlri_l2vpn.pcap differ diff --git a/tests/packet_data/bgp4/flowspec_nlri_vpn4.pcap b/tests/packet_data/bgp4/flowspec_nlri_vpn4.pcap new file mode 100644 index 00000000..236110db Binary files /dev/null and b/tests/packet_data/bgp4/flowspec_nlri_vpn4.pcap differ diff --git a/tests/packet_data/bgp4/flowspec_nlri_vpn6.pcap b/tests/packet_data/bgp4/flowspec_nlri_vpn6.pcap new file mode 100644 index 00000000..cdf4c1c0 Binary files /dev/null and b/tests/packet_data/bgp4/flowspec_nlri_vpn6.pcap differ diff --git a/tests/packet_data/mrt/rib.20161101.0000_pick.bz2 b/tests/packet_data/mrt/rib.20161101.0000_pick.bz2 new file mode 100644 index 00000000..0e02ef2d Binary files /dev/null and b/tests/packet_data/mrt/rib.20161101.0000_pick.bz2 differ diff --git a/tests/packet_data/mrt/updates.20161101.0000.bz2 b/tests/packet_data/mrt/updates.20161101.0000.bz2 new file mode 100644 index 00000000..6caefe23 Binary files /dev/null and b/tests/packet_data/mrt/updates.20161101.0000.bz2 differ diff --git a/tests/packet_data/of10/1-1-ofp_packet_out.packet b/tests/packet_data/of10/1-1-ofp_packet_out.packet new file mode 100644 index 00000000..8093e84c Binary files /dev/null and b/tests/packet_data/of10/1-1-ofp_packet_out.packet differ diff --git a/tests/packet_data/of10/1-2-ofp_flow_mod.packet b/tests/packet_data/of10/1-2-ofp_flow_mod.packet new file mode 100644 index 00000000..881f4946 Binary files /dev/null and b/tests/packet_data/of10/1-2-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of10/1-4-ofp_packet_in.packet b/tests/packet_data/of10/1-4-ofp_packet_in.packet new file mode 100644 index 00000000..9321feb6 Binary files /dev/null and b/tests/packet_data/of10/1-4-ofp_packet_in.packet differ diff --git a/tests/packet_data/of10/1-5-features_request.packet b/tests/packet_data/of10/1-5-features_request.packet new file mode 100644 index 00000000..2faaf406 Binary files /dev/null and b/tests/packet_data/of10/1-5-features_request.packet differ diff --git a/tests/packet_data/of10/1-6-ofp_switch_features.packet b/tests/packet_data/of10/1-6-ofp_switch_features.packet new file mode 100644 index 00000000..31f17df3 Binary files /dev/null and b/tests/packet_data/of10/1-6-ofp_switch_features.packet differ diff --git a/tests/packet_data/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet b/tests/packet_data/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet new file mode 100644 index 00000000..8093e84c Binary files /dev/null and b/tests/packet_data/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet differ diff --git a/tests/packet_data/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet b/tests/packet_data/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet new file mode 100644 index 00000000..f2f6c279 Binary files /dev/null and b/tests/packet_data/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet differ diff --git a/tests/packet_data/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet b/tests/packet_data/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet new file mode 100644 index 00000000..38e0a2a2 Binary files /dev/null and b/tests/packet_data/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet differ diff --git a/tests/packet_data/of10/ovs-ofctl-of10-action_pop_mpls.packet b/tests/packet_data/of10/ovs-ofctl-of10-action_pop_mpls.packet new file mode 100644 index 00000000..49c4a862 Binary files /dev/null and b/tests/packet_data/of10/ovs-ofctl-of10-action_pop_mpls.packet differ diff --git a/tests/packet_data/of10/ovs-ofctl-of10-action_push_mpls.packet b/tests/packet_data/of10/ovs-ofctl-of10-action_push_mpls.packet new file mode 100644 index 00000000..fc478e1f Binary files /dev/null and b/tests/packet_data/of10/ovs-ofctl-of10-action_push_mpls.packet differ diff --git a/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_label.packet b/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_label.packet new file mode 100644 index 00000000..4c529139 Binary files /dev/null and b/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_label.packet differ diff --git a/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_tc.packet b/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_tc.packet new file mode 100644 index 00000000..0b6dc347 Binary files /dev/null and b/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_tc.packet differ diff --git a/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet b/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet new file mode 100644 index 00000000..424f9a74 Binary files /dev/null and b/tests/packet_data/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet differ diff --git a/tests/packet_data/of12/3-0-ofp_desc_stats_reply.packet b/tests/packet_data/of12/3-0-ofp_desc_stats_reply.packet new file mode 100644 index 00000000..17cfd664 Binary files /dev/null and b/tests/packet_data/of12/3-0-ofp_desc_stats_reply.packet differ diff --git a/tests/packet_data/of12/3-1-ofp_packet_out.packet b/tests/packet_data/of12/3-1-ofp_packet_out.packet new file mode 100644 index 00000000..a9ebe1ef Binary files /dev/null and b/tests/packet_data/of12/3-1-ofp_packet_out.packet differ diff --git a/tests/packet_data/of12/3-10-ofp_hello.packet b/tests/packet_data/of12/3-10-ofp_hello.packet new file mode 100644 index 00000000..8894b8ce Binary files /dev/null and b/tests/packet_data/of12/3-10-ofp_hello.packet differ diff --git a/tests/packet_data/of12/3-11-ofp_flow_stats_request.packet b/tests/packet_data/of12/3-11-ofp_flow_stats_request.packet new file mode 100644 index 00000000..4c825f93 Binary files /dev/null and b/tests/packet_data/of12/3-11-ofp_flow_stats_request.packet differ diff --git a/tests/packet_data/of12/3-12-ofp_flow_stats_reply.packet b/tests/packet_data/of12/3-12-ofp_flow_stats_reply.packet new file mode 100644 index 00000000..73f7221e Binary files /dev/null and b/tests/packet_data/of12/3-12-ofp_flow_stats_reply.packet differ diff --git a/tests/packet_data/of12/3-13-ofp_echo_request.packet b/tests/packet_data/of12/3-13-ofp_echo_request.packet new file mode 100644 index 00000000..f67baba2 Binary files /dev/null and b/tests/packet_data/of12/3-13-ofp_echo_request.packet differ diff --git a/tests/packet_data/of12/3-14-ofp_echo_reply.packet b/tests/packet_data/of12/3-14-ofp_echo_reply.packet new file mode 100644 index 00000000..f227be12 Binary files /dev/null and b/tests/packet_data/of12/3-14-ofp_echo_reply.packet differ diff --git a/tests/packet_data/of12/3-15-ofp_error_msg.packet b/tests/packet_data/of12/3-15-ofp_error_msg.packet new file mode 100644 index 00000000..21111bd3 Binary files /dev/null and b/tests/packet_data/of12/3-15-ofp_error_msg.packet differ diff --git a/tests/packet_data/of12/3-16-ofp_experimenter.packet b/tests/packet_data/of12/3-16-ofp_experimenter.packet new file mode 100644 index 00000000..f9524ca5 Binary files /dev/null and b/tests/packet_data/of12/3-16-ofp_experimenter.packet differ diff --git a/tests/packet_data/of12/3-17-ofp_barrier_request.packet b/tests/packet_data/of12/3-17-ofp_barrier_request.packet new file mode 100644 index 00000000..17a6f76a Binary files /dev/null and b/tests/packet_data/of12/3-17-ofp_barrier_request.packet differ diff --git a/tests/packet_data/of12/3-18-ofp_barrier_reply.packet b/tests/packet_data/of12/3-18-ofp_barrier_reply.packet new file mode 100644 index 00000000..8cd2f9e7 Binary files /dev/null and b/tests/packet_data/of12/3-18-ofp_barrier_reply.packet differ diff --git a/tests/packet_data/of12/3-19-ofp_role_request.packet b/tests/packet_data/of12/3-19-ofp_role_request.packet new file mode 100644 index 00000000..db2f24f5 Binary files /dev/null and b/tests/packet_data/of12/3-19-ofp_role_request.packet differ diff --git a/tests/packet_data/of12/3-2-ofp_flow_mod.packet b/tests/packet_data/of12/3-2-ofp_flow_mod.packet new file mode 100644 index 00000000..f54ec6da Binary files /dev/null and b/tests/packet_data/of12/3-2-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of12/3-20-ofp_role_reply.packet b/tests/packet_data/of12/3-20-ofp_role_reply.packet new file mode 100644 index 00000000..3e850878 Binary files /dev/null and b/tests/packet_data/of12/3-20-ofp_role_reply.packet differ diff --git a/tests/packet_data/of12/3-21-ofp_group_mod.packet b/tests/packet_data/of12/3-21-ofp_group_mod.packet new file mode 100644 index 00000000..0b45c318 Binary files /dev/null and b/tests/packet_data/of12/3-21-ofp_group_mod.packet differ diff --git a/tests/packet_data/of12/3-22-ofp_port_mod.packet b/tests/packet_data/of12/3-22-ofp_port_mod.packet new file mode 100644 index 00000000..7bbbb6a5 Binary files /dev/null and b/tests/packet_data/of12/3-22-ofp_port_mod.packet differ diff --git a/tests/packet_data/of12/3-23-ofp_table_mod.packet b/tests/packet_data/of12/3-23-ofp_table_mod.packet new file mode 100644 index 00000000..b6d68a30 Binary files /dev/null and b/tests/packet_data/of12/3-23-ofp_table_mod.packet differ diff --git a/tests/packet_data/of12/3-24-ofp_desc_stats_request.packet b/tests/packet_data/of12/3-24-ofp_desc_stats_request.packet new file mode 100644 index 00000000..c59f6366 Binary files /dev/null and b/tests/packet_data/of12/3-24-ofp_desc_stats_request.packet differ diff --git a/tests/packet_data/of12/3-25-ofp_aggregate_stats_request.packet b/tests/packet_data/of12/3-25-ofp_aggregate_stats_request.packet new file mode 100644 index 00000000..05416ffd Binary files /dev/null and b/tests/packet_data/of12/3-25-ofp_aggregate_stats_request.packet differ diff --git a/tests/packet_data/of12/3-26-ofp_aggregate_stats_reply.packet b/tests/packet_data/of12/3-26-ofp_aggregate_stats_reply.packet new file mode 100644 index 00000000..43c89051 Binary files /dev/null and b/tests/packet_data/of12/3-26-ofp_aggregate_stats_reply.packet differ diff --git a/tests/packet_data/of12/3-27-ofp_table_stats_request.packet b/tests/packet_data/of12/3-27-ofp_table_stats_request.packet new file mode 100644 index 00000000..0d426129 Binary files /dev/null and b/tests/packet_data/of12/3-27-ofp_table_stats_request.packet differ diff --git a/tests/packet_data/of12/3-28-ofp_table_stats_reply.packet b/tests/packet_data/of12/3-28-ofp_table_stats_reply.packet new file mode 100644 index 00000000..60e76442 Binary files /dev/null and b/tests/packet_data/of12/3-28-ofp_table_stats_reply.packet differ diff --git a/tests/packet_data/of12/3-29-ofp_port_stats_request.packet b/tests/packet_data/of12/3-29-ofp_port_stats_request.packet new file mode 100644 index 00000000..cebaac69 Binary files /dev/null and b/tests/packet_data/of12/3-29-ofp_port_stats_request.packet differ diff --git a/tests/packet_data/of12/3-3-ofp_flow_mod.packet b/tests/packet_data/of12/3-3-ofp_flow_mod.packet new file mode 100644 index 00000000..a3541cc4 Binary files /dev/null and b/tests/packet_data/of12/3-3-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of12/3-30-ofp_port_stats_reply.packet b/tests/packet_data/of12/3-30-ofp_port_stats_reply.packet new file mode 100644 index 00000000..77d9369f Binary files /dev/null and b/tests/packet_data/of12/3-30-ofp_port_stats_reply.packet differ diff --git a/tests/packet_data/of12/3-31-ofp_group_features_stats_request.packet b/tests/packet_data/of12/3-31-ofp_group_features_stats_request.packet new file mode 100644 index 00000000..9d11b936 Binary files /dev/null and b/tests/packet_data/of12/3-31-ofp_group_features_stats_request.packet differ diff --git a/tests/packet_data/of12/3-32-ofp_group_features_stats_reply.packet b/tests/packet_data/of12/3-32-ofp_group_features_stats_reply.packet new file mode 100644 index 00000000..d1f41595 Binary files /dev/null and b/tests/packet_data/of12/3-32-ofp_group_features_stats_reply.packet differ diff --git a/tests/packet_data/of12/3-33-ofp_group_desc_stats_request.packet b/tests/packet_data/of12/3-33-ofp_group_desc_stats_request.packet new file mode 100644 index 00000000..1eef2113 Binary files /dev/null and b/tests/packet_data/of12/3-33-ofp_group_desc_stats_request.packet differ diff --git a/tests/packet_data/of12/3-34-ofp_group_desc_stats_reply.packet b/tests/packet_data/of12/3-34-ofp_group_desc_stats_reply.packet new file mode 100644 index 00000000..e17a933a Binary files /dev/null and b/tests/packet_data/of12/3-34-ofp_group_desc_stats_reply.packet differ diff --git a/tests/packet_data/of12/3-35-ofp_queue_get_config_request.packet b/tests/packet_data/of12/3-35-ofp_queue_get_config_request.packet new file mode 100644 index 00000000..66e380d6 Binary files /dev/null and b/tests/packet_data/of12/3-35-ofp_queue_get_config_request.packet differ diff --git a/tests/packet_data/of12/3-36-ofp_queue_get_config_reply.packet b/tests/packet_data/of12/3-36-ofp_queue_get_config_reply.packet new file mode 100644 index 00000000..757308ee Binary files /dev/null and b/tests/packet_data/of12/3-36-ofp_queue_get_config_reply.packet differ diff --git a/tests/packet_data/of12/3-37-ofp_queue_stats_request.packet b/tests/packet_data/of12/3-37-ofp_queue_stats_request.packet new file mode 100644 index 00000000..0d274478 Binary files /dev/null and b/tests/packet_data/of12/3-37-ofp_queue_stats_request.packet differ diff --git a/tests/packet_data/of12/3-38-ofp_queue_stats_reply.packet b/tests/packet_data/of12/3-38-ofp_queue_stats_reply.packet new file mode 100644 index 00000000..72a8af36 Binary files /dev/null and b/tests/packet_data/of12/3-38-ofp_queue_stats_reply.packet differ diff --git a/tests/packet_data/of12/3-39-ofp_port_status.packet b/tests/packet_data/of12/3-39-ofp_port_status.packet new file mode 100644 index 00000000..7e3689ac Binary files /dev/null and b/tests/packet_data/of12/3-39-ofp_port_status.packet differ diff --git a/tests/packet_data/of12/3-4-ofp_packet_in.packet b/tests/packet_data/of12/3-4-ofp_packet_in.packet new file mode 100644 index 00000000..295e4d45 Binary files /dev/null and b/tests/packet_data/of12/3-4-ofp_packet_in.packet differ diff --git a/tests/packet_data/of12/3-40-ofp_flow_removed.packet b/tests/packet_data/of12/3-40-ofp_flow_removed.packet new file mode 100644 index 00000000..330e429b Binary files /dev/null and b/tests/packet_data/of12/3-40-ofp_flow_removed.packet differ diff --git a/tests/packet_data/of12/3-41-ofp_error_msg_experimenter.packet b/tests/packet_data/of12/3-41-ofp_error_msg_experimenter.packet new file mode 100644 index 00000000..4b7c9bf4 Binary files /dev/null and b/tests/packet_data/of12/3-41-ofp_error_msg_experimenter.packet differ diff --git a/tests/packet_data/of12/3-5-ofp_features_request.packet b/tests/packet_data/of12/3-5-ofp_features_request.packet new file mode 100644 index 00000000..6a81e9b5 Binary files /dev/null and b/tests/packet_data/of12/3-5-ofp_features_request.packet differ diff --git a/tests/packet_data/of12/3-59-ofp_packet_in.packet b/tests/packet_data/of12/3-59-ofp_packet_in.packet new file mode 100644 index 00000000..e4a92b2a Binary files /dev/null and b/tests/packet_data/of12/3-59-ofp_packet_in.packet differ diff --git a/tests/packet_data/of12/3-6-ofp_features_reply.packet b/tests/packet_data/of12/3-6-ofp_features_reply.packet new file mode 100644 index 00000000..9e6128dc Binary files /dev/null and b/tests/packet_data/of12/3-6-ofp_features_reply.packet differ diff --git a/tests/packet_data/of12/3-60-ofp_flow_mod.packet b/tests/packet_data/of12/3-60-ofp_flow_mod.packet new file mode 100644 index 00000000..13566ebe Binary files /dev/null and b/tests/packet_data/of12/3-60-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of12/3-61-ofp_group_stats_request.packet b/tests/packet_data/of12/3-61-ofp_group_stats_request.packet new file mode 100644 index 00000000..523f4f13 Binary files /dev/null and b/tests/packet_data/of12/3-61-ofp_group_stats_request.packet differ diff --git a/tests/packet_data/of12/3-62-ofp_group_stats_reply.packet b/tests/packet_data/of12/3-62-ofp_group_stats_reply.packet new file mode 100644 index 00000000..33a5c52c Binary files /dev/null and b/tests/packet_data/of12/3-62-ofp_group_stats_reply.packet differ diff --git a/tests/packet_data/of12/3-7-ofp_set_config.packet b/tests/packet_data/of12/3-7-ofp_set_config.packet new file mode 100644 index 00000000..77e2d785 Binary files /dev/null and b/tests/packet_data/of12/3-7-ofp_set_config.packet differ diff --git a/tests/packet_data/of12/3-8-ofp_get_config_request.packet b/tests/packet_data/of12/3-8-ofp_get_config_request.packet new file mode 100644 index 00000000..ba897a54 Binary files /dev/null and b/tests/packet_data/of12/3-8-ofp_get_config_request.packet differ diff --git a/tests/packet_data/of12/3-9-ofp_get_config_reply.packet b/tests/packet_data/of12/3-9-ofp_get_config_reply.packet new file mode 100644 index 00000000..ebaf895b Binary files /dev/null and b/tests/packet_data/of12/3-9-ofp_get_config_reply.packet differ diff --git a/tests/packet_data/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet b/tests/packet_data/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet new file mode 100644 index 00000000..a9ebe1ef Binary files /dev/null and b/tests/packet_data/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet differ diff --git a/tests/packet_data/of13/4-0-ofp_desc_reply.packet b/tests/packet_data/of13/4-0-ofp_desc_reply.packet new file mode 100644 index 00000000..edfaa375 Binary files /dev/null and b/tests/packet_data/of13/4-0-ofp_desc_reply.packet differ diff --git a/tests/packet_data/of13/4-1-ofp_packet_out.packet b/tests/packet_data/of13/4-1-ofp_packet_out.packet new file mode 100644 index 00000000..cf6689f8 Binary files /dev/null and b/tests/packet_data/of13/4-1-ofp_packet_out.packet differ diff --git a/tests/packet_data/of13/4-10-ofp_hello.packet b/tests/packet_data/of13/4-10-ofp_hello.packet new file mode 100644 index 00000000..644b4130 Binary files /dev/null and b/tests/packet_data/of13/4-10-ofp_hello.packet differ diff --git a/tests/packet_data/of13/4-11-ofp_flow_stats_request.packet b/tests/packet_data/of13/4-11-ofp_flow_stats_request.packet new file mode 100644 index 00000000..6b9e0a90 Binary files /dev/null and b/tests/packet_data/of13/4-11-ofp_flow_stats_request.packet differ diff --git a/tests/packet_data/of13/4-12-ofp_flow_stats_reply.packet b/tests/packet_data/of13/4-12-ofp_flow_stats_reply.packet new file mode 100644 index 00000000..c7c1ac88 Binary files /dev/null and b/tests/packet_data/of13/4-12-ofp_flow_stats_reply.packet differ diff --git a/tests/packet_data/of13/4-13-ofp_echo_request.packet b/tests/packet_data/of13/4-13-ofp_echo_request.packet new file mode 100644 index 00000000..d8d8bc42 Binary files /dev/null and b/tests/packet_data/of13/4-13-ofp_echo_request.packet differ diff --git a/tests/packet_data/of13/4-14-ofp_echo_reply.packet b/tests/packet_data/of13/4-14-ofp_echo_reply.packet new file mode 100644 index 00000000..2ac9c0d5 Binary files /dev/null and b/tests/packet_data/of13/4-14-ofp_echo_reply.packet differ diff --git a/tests/packet_data/of13/4-15-ofp_error_msg.packet b/tests/packet_data/of13/4-15-ofp_error_msg.packet new file mode 100644 index 00000000..196dad1e Binary files /dev/null and b/tests/packet_data/of13/4-15-ofp_error_msg.packet differ diff --git a/tests/packet_data/of13/4-16-ofp_experimenter.packet b/tests/packet_data/of13/4-16-ofp_experimenter.packet new file mode 100644 index 00000000..0b6e2dd2 Binary files /dev/null and b/tests/packet_data/of13/4-16-ofp_experimenter.packet differ diff --git a/tests/packet_data/of13/4-17-ofp_barrier_request.packet b/tests/packet_data/of13/4-17-ofp_barrier_request.packet new file mode 100644 index 00000000..4acb2096 Binary files /dev/null and b/tests/packet_data/of13/4-17-ofp_barrier_request.packet differ diff --git a/tests/packet_data/of13/4-18-ofp_barrier_reply.packet b/tests/packet_data/of13/4-18-ofp_barrier_reply.packet new file mode 100644 index 00000000..04376c07 Binary files /dev/null and b/tests/packet_data/of13/4-18-ofp_barrier_reply.packet differ diff --git a/tests/packet_data/of13/4-19-ofp_role_request.packet b/tests/packet_data/of13/4-19-ofp_role_request.packet new file mode 100644 index 00000000..e2f3b381 Binary files /dev/null and b/tests/packet_data/of13/4-19-ofp_role_request.packet differ diff --git a/tests/packet_data/of13/4-2-ofp_flow_mod.packet b/tests/packet_data/of13/4-2-ofp_flow_mod.packet new file mode 100644 index 00000000..0c2029bd Binary files /dev/null and b/tests/packet_data/of13/4-2-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of13/4-20-ofp_role_reply.packet b/tests/packet_data/of13/4-20-ofp_role_reply.packet new file mode 100644 index 00000000..3f5ba399 Binary files /dev/null and b/tests/packet_data/of13/4-20-ofp_role_reply.packet differ diff --git a/tests/packet_data/of13/4-21-ofp_group_mod.packet b/tests/packet_data/of13/4-21-ofp_group_mod.packet new file mode 100644 index 00000000..39554777 Binary files /dev/null and b/tests/packet_data/of13/4-21-ofp_group_mod.packet differ diff --git a/tests/packet_data/of13/4-22-ofp_port_mod.packet b/tests/packet_data/of13/4-22-ofp_port_mod.packet new file mode 100644 index 00000000..be7044e1 Binary files /dev/null and b/tests/packet_data/of13/4-22-ofp_port_mod.packet differ diff --git a/tests/packet_data/of13/4-23-ofp_table_mod.packet b/tests/packet_data/of13/4-23-ofp_table_mod.packet new file mode 100644 index 00000000..02b8b020 Binary files /dev/null and b/tests/packet_data/of13/4-23-ofp_table_mod.packet differ diff --git a/tests/packet_data/of13/4-24-ofp_desc_request.packet b/tests/packet_data/of13/4-24-ofp_desc_request.packet new file mode 100644 index 00000000..b6de0577 Binary files /dev/null and b/tests/packet_data/of13/4-24-ofp_desc_request.packet differ diff --git a/tests/packet_data/of13/4-25-ofp_aggregate_stats_request.packet b/tests/packet_data/of13/4-25-ofp_aggregate_stats_request.packet new file mode 100644 index 00000000..645ddacf Binary files /dev/null and b/tests/packet_data/of13/4-25-ofp_aggregate_stats_request.packet differ diff --git a/tests/packet_data/of13/4-26-ofp_aggregate_stats_reply.packet b/tests/packet_data/of13/4-26-ofp_aggregate_stats_reply.packet new file mode 100644 index 00000000..3d5cd801 Binary files /dev/null and b/tests/packet_data/of13/4-26-ofp_aggregate_stats_reply.packet differ diff --git a/tests/packet_data/of13/4-27-ofp_table_stats_request.packet b/tests/packet_data/of13/4-27-ofp_table_stats_request.packet new file mode 100644 index 00000000..6fec06a4 Binary files /dev/null and b/tests/packet_data/of13/4-27-ofp_table_stats_request.packet differ diff --git a/tests/packet_data/of13/4-28-ofp_table_stats_reply.packet b/tests/packet_data/of13/4-28-ofp_table_stats_reply.packet new file mode 100644 index 00000000..1da72ab0 Binary files /dev/null and b/tests/packet_data/of13/4-28-ofp_table_stats_reply.packet differ diff --git a/tests/packet_data/of13/4-29-ofp_port_stats_request.packet b/tests/packet_data/of13/4-29-ofp_port_stats_request.packet new file mode 100644 index 00000000..d1116401 Binary files /dev/null and b/tests/packet_data/of13/4-29-ofp_port_stats_request.packet differ diff --git a/tests/packet_data/of13/4-3-ofp_flow_mod.packet b/tests/packet_data/of13/4-3-ofp_flow_mod.packet new file mode 100644 index 00000000..8952a5be Binary files /dev/null and b/tests/packet_data/of13/4-3-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of13/4-30-ofp_port_stats_reply.packet b/tests/packet_data/of13/4-30-ofp_port_stats_reply.packet new file mode 100644 index 00000000..8b8c182c Binary files /dev/null and b/tests/packet_data/of13/4-30-ofp_port_stats_reply.packet differ diff --git a/tests/packet_data/of13/4-31-ofp_group_features_request.packet b/tests/packet_data/of13/4-31-ofp_group_features_request.packet new file mode 100644 index 00000000..2175bb52 Binary files /dev/null and b/tests/packet_data/of13/4-31-ofp_group_features_request.packet differ diff --git a/tests/packet_data/of13/4-32-ofp_group_features_reply.packet b/tests/packet_data/of13/4-32-ofp_group_features_reply.packet new file mode 100644 index 00000000..6f7715cd Binary files /dev/null and b/tests/packet_data/of13/4-32-ofp_group_features_reply.packet differ diff --git a/tests/packet_data/of13/4-33-ofp_group_desc_request.packet b/tests/packet_data/of13/4-33-ofp_group_desc_request.packet new file mode 100644 index 00000000..35add41d Binary files /dev/null and b/tests/packet_data/of13/4-33-ofp_group_desc_request.packet differ diff --git a/tests/packet_data/of13/4-34-ofp_group_desc_reply.packet b/tests/packet_data/of13/4-34-ofp_group_desc_reply.packet new file mode 100644 index 00000000..f3796cc1 Binary files /dev/null and b/tests/packet_data/of13/4-34-ofp_group_desc_reply.packet differ diff --git a/tests/packet_data/of13/4-35-ofp_queue_get_config_request.packet b/tests/packet_data/of13/4-35-ofp_queue_get_config_request.packet new file mode 100644 index 00000000..13072c85 Binary files /dev/null and b/tests/packet_data/of13/4-35-ofp_queue_get_config_request.packet differ diff --git a/tests/packet_data/of13/4-36-ofp_queue_get_config_reply.packet b/tests/packet_data/of13/4-36-ofp_queue_get_config_reply.packet new file mode 100644 index 00000000..898f0b3f Binary files /dev/null and b/tests/packet_data/of13/4-36-ofp_queue_get_config_reply.packet differ diff --git a/tests/packet_data/of13/4-37-ofp_queue_stats_request.packet b/tests/packet_data/of13/4-37-ofp_queue_stats_request.packet new file mode 100644 index 00000000..4baf6d70 Binary files /dev/null and b/tests/packet_data/of13/4-37-ofp_queue_stats_request.packet differ diff --git a/tests/packet_data/of13/4-38-ofp_queue_stats_reply.packet b/tests/packet_data/of13/4-38-ofp_queue_stats_reply.packet new file mode 100644 index 00000000..ad6d1971 Binary files /dev/null and b/tests/packet_data/of13/4-38-ofp_queue_stats_reply.packet differ diff --git a/tests/packet_data/of13/4-39-ofp_port_status.packet b/tests/packet_data/of13/4-39-ofp_port_status.packet new file mode 100644 index 00000000..63280c7d Binary files /dev/null and b/tests/packet_data/of13/4-39-ofp_port_status.packet differ diff --git a/tests/packet_data/of13/4-4-ofp_packet_in.packet b/tests/packet_data/of13/4-4-ofp_packet_in.packet new file mode 100644 index 00000000..ebd12b51 Binary files /dev/null and b/tests/packet_data/of13/4-4-ofp_packet_in.packet differ diff --git a/tests/packet_data/of13/4-40-ofp_flow_removed.packet b/tests/packet_data/of13/4-40-ofp_flow_removed.packet new file mode 100644 index 00000000..677c2c4a Binary files /dev/null and b/tests/packet_data/of13/4-40-ofp_flow_removed.packet differ diff --git a/tests/packet_data/of13/4-41-ofp_error_msg_experimenter.packet b/tests/packet_data/of13/4-41-ofp_error_msg_experimenter.packet new file mode 100644 index 00000000..6d866b9a Binary files /dev/null and b/tests/packet_data/of13/4-41-ofp_error_msg_experimenter.packet differ diff --git a/tests/packet_data/of13/4-42-ofp_get_async_request.packet b/tests/packet_data/of13/4-42-ofp_get_async_request.packet new file mode 100644 index 00000000..4bffb26f Binary files /dev/null and b/tests/packet_data/of13/4-42-ofp_get_async_request.packet differ diff --git a/tests/packet_data/of13/4-43-ofp_get_async_reply.packet b/tests/packet_data/of13/4-43-ofp_get_async_reply.packet new file mode 100644 index 00000000..39897a94 Binary files /dev/null and b/tests/packet_data/of13/4-43-ofp_get_async_reply.packet differ diff --git a/tests/packet_data/of13/4-44-ofp_set_async.packet b/tests/packet_data/of13/4-44-ofp_set_async.packet new file mode 100644 index 00000000..de0aa1a4 Binary files /dev/null and b/tests/packet_data/of13/4-44-ofp_set_async.packet differ diff --git a/tests/packet_data/of13/4-45-ofp_meter_mod.packet b/tests/packet_data/of13/4-45-ofp_meter_mod.packet new file mode 100644 index 00000000..1ffbcf7e Binary files /dev/null and b/tests/packet_data/of13/4-45-ofp_meter_mod.packet differ diff --git a/tests/packet_data/of13/4-46-ofp_flow_mod.packet b/tests/packet_data/of13/4-46-ofp_flow_mod.packet new file mode 100644 index 00000000..496f1da0 Binary files /dev/null and b/tests/packet_data/of13/4-46-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of13/4-47-ofp_meter_config_request.packet b/tests/packet_data/of13/4-47-ofp_meter_config_request.packet new file mode 100644 index 00000000..21a11e10 Binary files /dev/null and b/tests/packet_data/of13/4-47-ofp_meter_config_request.packet differ diff --git a/tests/packet_data/of13/4-48-ofp_meter_config_reply.packet b/tests/packet_data/of13/4-48-ofp_meter_config_reply.packet new file mode 100644 index 00000000..3f443269 Binary files /dev/null and b/tests/packet_data/of13/4-48-ofp_meter_config_reply.packet differ diff --git a/tests/packet_data/of13/4-49-ofp_meter_stats_request.packet b/tests/packet_data/of13/4-49-ofp_meter_stats_request.packet new file mode 100644 index 00000000..3b321aff Binary files /dev/null and b/tests/packet_data/of13/4-49-ofp_meter_stats_request.packet differ diff --git a/tests/packet_data/of13/4-5-ofp_features_request.packet b/tests/packet_data/of13/4-5-ofp_features_request.packet new file mode 100644 index 00000000..7bb2775a Binary files /dev/null and b/tests/packet_data/of13/4-5-ofp_features_request.packet differ diff --git a/tests/packet_data/of13/4-50-ofp_meter_stats_reply.packet b/tests/packet_data/of13/4-50-ofp_meter_stats_reply.packet new file mode 100644 index 00000000..2317fc55 Binary files /dev/null and b/tests/packet_data/of13/4-50-ofp_meter_stats_reply.packet differ diff --git a/tests/packet_data/of13/4-51-ofp_meter_features_request.packet b/tests/packet_data/of13/4-51-ofp_meter_features_request.packet new file mode 100644 index 00000000..c4007bfb Binary files /dev/null and b/tests/packet_data/of13/4-51-ofp_meter_features_request.packet differ diff --git a/tests/packet_data/of13/4-52-ofp_meter_features_reply.packet b/tests/packet_data/of13/4-52-ofp_meter_features_reply.packet new file mode 100644 index 00000000..fd9e3808 Binary files /dev/null and b/tests/packet_data/of13/4-52-ofp_meter_features_reply.packet differ diff --git a/tests/packet_data/of13/4-53-ofp_port_desc_request.packet b/tests/packet_data/of13/4-53-ofp_port_desc_request.packet new file mode 100644 index 00000000..0d859f1d Binary files /dev/null and b/tests/packet_data/of13/4-53-ofp_port_desc_request.packet differ diff --git a/tests/packet_data/of13/4-54-ofp_port_desc_reply.packet b/tests/packet_data/of13/4-54-ofp_port_desc_reply.packet new file mode 100644 index 00000000..e30e9ae1 Binary files /dev/null and b/tests/packet_data/of13/4-54-ofp_port_desc_reply.packet differ diff --git a/tests/packet_data/of13/4-55-ofp_table_features_request.packet b/tests/packet_data/of13/4-55-ofp_table_features_request.packet new file mode 100644 index 00000000..52b9d3b1 Binary files /dev/null and b/tests/packet_data/of13/4-55-ofp_table_features_request.packet differ diff --git a/tests/packet_data/of13/4-56-ofp_table_features_reply.packet b/tests/packet_data/of13/4-56-ofp_table_features_reply.packet new file mode 100644 index 00000000..3a467f42 Binary files /dev/null and b/tests/packet_data/of13/4-56-ofp_table_features_reply.packet differ diff --git a/tests/packet_data/of13/4-57-ofp_group_stats_request.packet b/tests/packet_data/of13/4-57-ofp_group_stats_request.packet new file mode 100644 index 00000000..f59329e0 Binary files /dev/null and b/tests/packet_data/of13/4-57-ofp_group_stats_request.packet differ diff --git a/tests/packet_data/of13/4-58-ofp_group_stats_reply.packet b/tests/packet_data/of13/4-58-ofp_group_stats_reply.packet new file mode 100644 index 00000000..fe5a549a Binary files /dev/null and b/tests/packet_data/of13/4-58-ofp_group_stats_reply.packet differ diff --git a/tests/packet_data/of13/4-59-ofp_packet_in.packet b/tests/packet_data/of13/4-59-ofp_packet_in.packet new file mode 100644 index 00000000..f0879a37 Binary files /dev/null and b/tests/packet_data/of13/4-59-ofp_packet_in.packet differ diff --git a/tests/packet_data/of13/4-6-ofp_features_reply.packet b/tests/packet_data/of13/4-6-ofp_features_reply.packet new file mode 100644 index 00000000..a9536330 Binary files /dev/null and b/tests/packet_data/of13/4-6-ofp_features_reply.packet differ diff --git a/tests/packet_data/of13/4-60-ofp_flow_mod.packet b/tests/packet_data/of13/4-60-ofp_flow_mod.packet new file mode 100644 index 00000000..0ca98351 Binary files /dev/null and b/tests/packet_data/of13/4-60-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of13/4-61-ofp_experimenter_request.packet b/tests/packet_data/of13/4-61-ofp_experimenter_request.packet new file mode 100644 index 00000000..2ee17648 Binary files /dev/null and b/tests/packet_data/of13/4-61-ofp_experimenter_request.packet differ diff --git a/tests/packet_data/of13/4-62-ofp_experimenter_reply.packet b/tests/packet_data/of13/4-62-ofp_experimenter_reply.packet new file mode 100644 index 00000000..1f826829 Binary files /dev/null and b/tests/packet_data/of13/4-62-ofp_experimenter_reply.packet differ diff --git a/tests/packet_data/of13/4-63-onf_flow_monitor_request.packet b/tests/packet_data/of13/4-63-onf_flow_monitor_request.packet new file mode 100644 index 00000000..bf6d50e1 Binary files /dev/null and b/tests/packet_data/of13/4-63-onf_flow_monitor_request.packet differ diff --git a/tests/packet_data/of13/4-7-ofp_set_config.packet b/tests/packet_data/of13/4-7-ofp_set_config.packet new file mode 100644 index 00000000..43602b3e Binary files /dev/null and b/tests/packet_data/of13/4-7-ofp_set_config.packet differ diff --git a/tests/packet_data/of13/4-8-ofp_get_config_request.packet b/tests/packet_data/of13/4-8-ofp_get_config_request.packet new file mode 100644 index 00000000..78ad5019 Binary files /dev/null and b/tests/packet_data/of13/4-8-ofp_get_config_request.packet differ diff --git a/tests/packet_data/of13/4-9-ofp_get_config_reply.packet b/tests/packet_data/of13/4-9-ofp_get_config_reply.packet new file mode 100644 index 00000000..b23f7bf3 Binary files /dev/null and b/tests/packet_data/of13/4-9-ofp_get_config_reply.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-echo_reply.packet b/tests/packet_data/of13/libofproto-OFP13-echo_reply.packet new file mode 100644 index 00000000..e54d3802 Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-echo_reply.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-echo_request.packet b/tests/packet_data/of13/libofproto-OFP13-echo_request.packet new file mode 100644 index 00000000..a13c95dd Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-echo_request.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-error_msg.packet b/tests/packet_data/of13/libofproto-OFP13-error_msg.packet new file mode 100644 index 00000000..33b43ca1 Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-error_msg.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-features_reply.packet b/tests/packet_data/of13/libofproto-OFP13-features_reply.packet new file mode 100644 index 00000000..1e5dee82 Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-features_reply.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-flow_mod.packet b/tests/packet_data/of13/libofproto-OFP13-flow_mod.packet new file mode 100644 index 00000000..8c86982f Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-flow_mod.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-flow_mod.truncated64 b/tests/packet_data/of13/libofproto-OFP13-flow_mod.truncated64 new file mode 100644 index 00000000..e69de29b diff --git a/tests/packet_data/of13/libofproto-OFP13-flow_mod_conjunction.packet b/tests/packet_data/of13/libofproto-OFP13-flow_mod_conjunction.packet new file mode 100644 index 00000000..e7e0154b Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-flow_mod_conjunction.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-flow_mod_match_conj.packet b/tests/packet_data/of13/libofproto-OFP13-flow_mod_match_conj.packet new file mode 100644 index 00000000..c377092d Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-flow_mod_match_conj.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-flow_removed.packet b/tests/packet_data/of13/libofproto-OFP13-flow_removed.packet new file mode 100644 index 00000000..c98a8f2b Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-flow_removed.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-get_config_reply.packet b/tests/packet_data/of13/libofproto-OFP13-get_config_reply.packet new file mode 100644 index 00000000..b23f7bf3 Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-get_config_reply.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-hello.packet b/tests/packet_data/of13/libofproto-OFP13-hello.packet new file mode 100644 index 00000000..60b3118a Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-hello.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-meter_mod.packet b/tests/packet_data/of13/libofproto-OFP13-meter_mod.packet new file mode 100644 index 00000000..60870dda Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-meter_mod.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet b/tests/packet_data/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet new file mode 100644 index 00000000..cf6689f8 Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-packet_in.packet b/tests/packet_data/of13/libofproto-OFP13-packet_in.packet new file mode 100644 index 00000000..817b51c0 Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-packet_in.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-port_mod.packet b/tests/packet_data/of13/libofproto-OFP13-port_mod.packet new file mode 100644 index 00000000..105a27ee Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-port_mod.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-port_status.packet b/tests/packet_data/of13/libofproto-OFP13-port_status.packet new file mode 100644 index 00000000..7a2c14c4 Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-port_status.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-set_config.packet b/tests/packet_data/of13/libofproto-OFP13-set_config.packet new file mode 100644 index 00000000..43602b3e Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-set_config.packet differ diff --git a/tests/packet_data/of13/libofproto-OFP13-table_mod.packet b/tests/packet_data/of13/libofproto-OFP13-table_mod.packet new file mode 100644 index 00000000..02b8b020 Binary files /dev/null and b/tests/packet_data/of13/libofproto-OFP13-table_mod.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_conjunction.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_conjunction.packet new file mode 100644 index 00000000..ba029b2c Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_conjunction.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_controller.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_controller.packet new file mode 100644 index 00000000..8fba9040 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_controller.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_controller2.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_controller2.packet new file mode 100644 index 00000000..7e6b046f Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_controller2.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_ct.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_ct.packet new file mode 100644 index 00000000..5eb733f9 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_ct.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_ct_exec.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_ct_exec.packet new file mode 100644 index 00000000..3f0b3431 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_ct_exec.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat.packet new file mode 100644 index 00000000..e210a38c Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat_v6.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat_v6.packet new file mode 100644 index 00000000..94b2aaa9 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_ct_nat_v6.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet new file mode 100644 index 00000000..c4308ccb Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_fintimeout.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_fintimeout.packet new file mode 100644 index 00000000..78c3eab4 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_fintimeout.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_learn.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_learn.packet new file mode 100644 index 00000000..39c71e20 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_learn.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_note.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_note.packet new file mode 100644 index 00000000..9a1491c9 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_note.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_output_trunc.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_output_trunc.packet new file mode 100644 index 00000000..491cf4c3 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_output_trunc.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_resubmit.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_resubmit.packet new file mode 100644 index 00000000..690b978b Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_resubmit.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_sample.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_sample.packet new file mode 100644 index 00000000..c5167ba2 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_sample.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_sample2.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_sample2.packet new file mode 100644 index 00000000..444f094b Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_sample2.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_stack_pop.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_stack_pop.packet new file mode 100644 index 00000000..d6f99e2c Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_stack_pop.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-action_stack_push.packet b/tests/packet_data/of13/ovs-ofctl-of13-action_stack_push.packet new file mode 100644 index 00000000..e5d38a32 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-action_stack_push.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-match_conj.packet b/tests/packet_data/of13/ovs-ofctl-of13-match_conj.packet new file mode 100644 index 00000000..1f9c57cd Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-match_conj.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-match_load_nx_register.packet b/tests/packet_data/of13/ovs-ofctl-of13-match_load_nx_register.packet new file mode 100644 index 00000000..03ce7374 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-match_load_nx_register.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-match_move_nx_register.packet b/tests/packet_data/of13/ovs-ofctl-of13-match_move_nx_register.packet new file mode 100644 index 00000000..eb9cf8a6 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-match_move_nx_register.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark.packet b/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark.packet new file mode 100644 index 00000000..46ea0dc9 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark.packet differ diff --git a/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet b/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet new file mode 100644 index 00000000..26db6b92 Binary files /dev/null and b/tests/packet_data/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet differ diff --git a/tests/packet_data/of14/5-0-ofp_desc_reply.packet b/tests/packet_data/of14/5-0-ofp_desc_reply.packet new file mode 100644 index 00000000..8d676ce4 Binary files /dev/null and b/tests/packet_data/of14/5-0-ofp_desc_reply.packet differ diff --git a/tests/packet_data/of14/5-1-ofp_packet_out.packet b/tests/packet_data/of14/5-1-ofp_packet_out.packet new file mode 100644 index 00000000..207712f1 Binary files /dev/null and b/tests/packet_data/of14/5-1-ofp_packet_out.packet differ diff --git a/tests/packet_data/of14/5-10-ofp_hello.packet b/tests/packet_data/of14/5-10-ofp_hello.packet new file mode 100644 index 00000000..a91b5871 Binary files /dev/null and b/tests/packet_data/of14/5-10-ofp_hello.packet differ diff --git a/tests/packet_data/of14/5-11-ofp_flow_stats_request.packet b/tests/packet_data/of14/5-11-ofp_flow_stats_request.packet new file mode 100644 index 00000000..f3ddcb7e Binary files /dev/null and b/tests/packet_data/of14/5-11-ofp_flow_stats_request.packet differ diff --git a/tests/packet_data/of14/5-12-ofp_flow_stats_reply.packet b/tests/packet_data/of14/5-12-ofp_flow_stats_reply.packet new file mode 100644 index 00000000..aa6462c5 Binary files /dev/null and b/tests/packet_data/of14/5-12-ofp_flow_stats_reply.packet differ diff --git a/tests/packet_data/of14/5-13-ofp_echo_request.packet b/tests/packet_data/of14/5-13-ofp_echo_request.packet new file mode 100644 index 00000000..b3f04d75 Binary files /dev/null and b/tests/packet_data/of14/5-13-ofp_echo_request.packet differ diff --git a/tests/packet_data/of14/5-14-ofp_echo_reply.packet b/tests/packet_data/of14/5-14-ofp_echo_reply.packet new file mode 100644 index 00000000..74dcf540 Binary files /dev/null and b/tests/packet_data/of14/5-14-ofp_echo_reply.packet differ diff --git a/tests/packet_data/of14/5-15-ofp_error_msg.packet b/tests/packet_data/of14/5-15-ofp_error_msg.packet new file mode 100644 index 00000000..a7888dbd Binary files /dev/null and b/tests/packet_data/of14/5-15-ofp_error_msg.packet differ diff --git a/tests/packet_data/of14/5-16-ofp_experimenter.packet b/tests/packet_data/of14/5-16-ofp_experimenter.packet new file mode 100644 index 00000000..3ccc04a9 Binary files /dev/null and b/tests/packet_data/of14/5-16-ofp_experimenter.packet differ diff --git a/tests/packet_data/of14/5-17-ofp_barrier_request.packet b/tests/packet_data/of14/5-17-ofp_barrier_request.packet new file mode 100644 index 00000000..7cbd74b9 Binary files /dev/null and b/tests/packet_data/of14/5-17-ofp_barrier_request.packet differ diff --git a/tests/packet_data/of14/5-18-ofp_barrier_reply.packet b/tests/packet_data/of14/5-18-ofp_barrier_reply.packet new file mode 100644 index 00000000..16d7a23a Binary files /dev/null and b/tests/packet_data/of14/5-18-ofp_barrier_reply.packet differ diff --git a/tests/packet_data/of14/5-19-ofp_role_request.packet b/tests/packet_data/of14/5-19-ofp_role_request.packet new file mode 100644 index 00000000..b6d780be Binary files /dev/null and b/tests/packet_data/of14/5-19-ofp_role_request.packet differ diff --git a/tests/packet_data/of14/5-2-ofp_flow_mod.packet b/tests/packet_data/of14/5-2-ofp_flow_mod.packet new file mode 100644 index 00000000..f07e8e53 Binary files /dev/null and b/tests/packet_data/of14/5-2-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of14/5-20-ofp_role_reply.packet b/tests/packet_data/of14/5-20-ofp_role_reply.packet new file mode 100644 index 00000000..3c7f5f74 Binary files /dev/null and b/tests/packet_data/of14/5-20-ofp_role_reply.packet differ diff --git a/tests/packet_data/of14/5-21-ofp_group_mod.packet b/tests/packet_data/of14/5-21-ofp_group_mod.packet new file mode 100644 index 00000000..63f6efbb Binary files /dev/null and b/tests/packet_data/of14/5-21-ofp_group_mod.packet differ diff --git a/tests/packet_data/of14/5-22-ofp_port_mod.packet b/tests/packet_data/of14/5-22-ofp_port_mod.packet new file mode 100644 index 00000000..2f733044 Binary files /dev/null and b/tests/packet_data/of14/5-22-ofp_port_mod.packet differ diff --git a/tests/packet_data/of14/5-23-ofp_table_mod.packet b/tests/packet_data/of14/5-23-ofp_table_mod.packet new file mode 100644 index 00000000..8df2590c Binary files /dev/null and b/tests/packet_data/of14/5-23-ofp_table_mod.packet differ diff --git a/tests/packet_data/of14/5-24-ofp_desc_request.packet b/tests/packet_data/of14/5-24-ofp_desc_request.packet new file mode 100644 index 00000000..b6440fba Binary files /dev/null and b/tests/packet_data/of14/5-24-ofp_desc_request.packet differ diff --git a/tests/packet_data/of14/5-25-ofp_aggregate_stats_request.packet b/tests/packet_data/of14/5-25-ofp_aggregate_stats_request.packet new file mode 100644 index 00000000..1adfc206 Binary files /dev/null and b/tests/packet_data/of14/5-25-ofp_aggregate_stats_request.packet differ diff --git a/tests/packet_data/of14/5-26-ofp_aggregate_stats_reply.packet b/tests/packet_data/of14/5-26-ofp_aggregate_stats_reply.packet new file mode 100644 index 00000000..6e1dcff5 Binary files /dev/null and b/tests/packet_data/of14/5-26-ofp_aggregate_stats_reply.packet differ diff --git a/tests/packet_data/of14/5-27-ofp_table_stats_request.packet b/tests/packet_data/of14/5-27-ofp_table_stats_request.packet new file mode 100644 index 00000000..909fd9e9 Binary files /dev/null and b/tests/packet_data/of14/5-27-ofp_table_stats_request.packet differ diff --git a/tests/packet_data/of14/5-28-ofp_table_stats_reply.packet b/tests/packet_data/of14/5-28-ofp_table_stats_reply.packet new file mode 100644 index 00000000..66234198 Binary files /dev/null and b/tests/packet_data/of14/5-28-ofp_table_stats_reply.packet differ diff --git a/tests/packet_data/of14/5-29-ofp_port_stats_request.packet b/tests/packet_data/of14/5-29-ofp_port_stats_request.packet new file mode 100644 index 00000000..86c828f3 Binary files /dev/null and b/tests/packet_data/of14/5-29-ofp_port_stats_request.packet differ diff --git a/tests/packet_data/of14/5-3-ofp_flow_mod.packet b/tests/packet_data/of14/5-3-ofp_flow_mod.packet new file mode 100644 index 00000000..130f8d14 Binary files /dev/null and b/tests/packet_data/of14/5-3-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of14/5-30-ofp_port_stats_reply.packet b/tests/packet_data/of14/5-30-ofp_port_stats_reply.packet new file mode 100644 index 00000000..0fd4fea9 Binary files /dev/null and b/tests/packet_data/of14/5-30-ofp_port_stats_reply.packet differ diff --git a/tests/packet_data/of14/5-31-ofp_group_features_request.packet b/tests/packet_data/of14/5-31-ofp_group_features_request.packet new file mode 100644 index 00000000..8bd123d0 Binary files /dev/null and b/tests/packet_data/of14/5-31-ofp_group_features_request.packet differ diff --git a/tests/packet_data/of14/5-32-ofp_group_features_reply.packet b/tests/packet_data/of14/5-32-ofp_group_features_reply.packet new file mode 100644 index 00000000..909b7fa4 Binary files /dev/null and b/tests/packet_data/of14/5-32-ofp_group_features_reply.packet differ diff --git a/tests/packet_data/of14/5-33-ofp_group_desc_request.packet b/tests/packet_data/of14/5-33-ofp_group_desc_request.packet new file mode 100644 index 00000000..2a86948f Binary files /dev/null and b/tests/packet_data/of14/5-33-ofp_group_desc_request.packet differ diff --git a/tests/packet_data/of14/5-34-ofp_group_desc_reply.packet b/tests/packet_data/of14/5-34-ofp_group_desc_reply.packet new file mode 100644 index 00000000..9b00061a Binary files /dev/null and b/tests/packet_data/of14/5-34-ofp_group_desc_reply.packet differ diff --git a/tests/packet_data/of14/5-35-ofp_queue_stats_request.packet b/tests/packet_data/of14/5-35-ofp_queue_stats_request.packet new file mode 100644 index 00000000..7c52c9b4 Binary files /dev/null and b/tests/packet_data/of14/5-35-ofp_queue_stats_request.packet differ diff --git a/tests/packet_data/of14/5-36-ofp_queue_stats_reply.packet b/tests/packet_data/of14/5-36-ofp_queue_stats_reply.packet new file mode 100644 index 00000000..c0a5dd8c Binary files /dev/null and b/tests/packet_data/of14/5-36-ofp_queue_stats_reply.packet differ diff --git a/tests/packet_data/of14/5-37-ofp_port_status.packet b/tests/packet_data/of14/5-37-ofp_port_status.packet new file mode 100644 index 00000000..e8c67823 Binary files /dev/null and b/tests/packet_data/of14/5-37-ofp_port_status.packet differ diff --git a/tests/packet_data/of14/5-38-ofp_flow_removed.packet b/tests/packet_data/of14/5-38-ofp_flow_removed.packet new file mode 100644 index 00000000..b8e35600 Binary files /dev/null and b/tests/packet_data/of14/5-38-ofp_flow_removed.packet differ diff --git a/tests/packet_data/of14/5-39-ofp_error_msg_experimenter.packet b/tests/packet_data/of14/5-39-ofp_error_msg_experimenter.packet new file mode 100644 index 00000000..fed58222 Binary files /dev/null and b/tests/packet_data/of14/5-39-ofp_error_msg_experimenter.packet differ diff --git a/tests/packet_data/of14/5-4-ofp_packet_in.packet b/tests/packet_data/of14/5-4-ofp_packet_in.packet new file mode 100644 index 00000000..35a91000 Binary files /dev/null and b/tests/packet_data/of14/5-4-ofp_packet_in.packet differ diff --git a/tests/packet_data/of14/5-40-ofp_get_async_request.packet b/tests/packet_data/of14/5-40-ofp_get_async_request.packet new file mode 100644 index 00000000..b6e2c616 Binary files /dev/null and b/tests/packet_data/of14/5-40-ofp_get_async_request.packet differ diff --git a/tests/packet_data/of14/5-41-ofp_get_async_reply.packet b/tests/packet_data/of14/5-41-ofp_get_async_reply.packet new file mode 100644 index 00000000..01ad90f6 Binary files /dev/null and b/tests/packet_data/of14/5-41-ofp_get_async_reply.packet differ diff --git a/tests/packet_data/of14/5-42-ofp_set_async.packet b/tests/packet_data/of14/5-42-ofp_set_async.packet new file mode 100644 index 00000000..0b3facf7 Binary files /dev/null and b/tests/packet_data/of14/5-42-ofp_set_async.packet differ diff --git a/tests/packet_data/of14/5-43-ofp_meter_mod.packet b/tests/packet_data/of14/5-43-ofp_meter_mod.packet new file mode 100644 index 00000000..1e488764 Binary files /dev/null and b/tests/packet_data/of14/5-43-ofp_meter_mod.packet differ diff --git a/tests/packet_data/of14/5-44-ofp_flow_mod.packet b/tests/packet_data/of14/5-44-ofp_flow_mod.packet new file mode 100644 index 00000000..6f66406d Binary files /dev/null and b/tests/packet_data/of14/5-44-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of14/5-45-ofp_meter_config_request.packet b/tests/packet_data/of14/5-45-ofp_meter_config_request.packet new file mode 100644 index 00000000..af96b87e Binary files /dev/null and b/tests/packet_data/of14/5-45-ofp_meter_config_request.packet differ diff --git a/tests/packet_data/of14/5-46-ofp_meter_config_reply.packet b/tests/packet_data/of14/5-46-ofp_meter_config_reply.packet new file mode 100644 index 00000000..9611e8c4 Binary files /dev/null and b/tests/packet_data/of14/5-46-ofp_meter_config_reply.packet differ diff --git a/tests/packet_data/of14/5-47-ofp_meter_stats_request.packet b/tests/packet_data/of14/5-47-ofp_meter_stats_request.packet new file mode 100644 index 00000000..68145074 Binary files /dev/null and b/tests/packet_data/of14/5-47-ofp_meter_stats_request.packet differ diff --git a/tests/packet_data/of14/5-48-ofp_meter_stats_reply.packet b/tests/packet_data/of14/5-48-ofp_meter_stats_reply.packet new file mode 100644 index 00000000..b20f1784 Binary files /dev/null and b/tests/packet_data/of14/5-48-ofp_meter_stats_reply.packet differ diff --git a/tests/packet_data/of14/5-49-ofp_meter_features_request.packet b/tests/packet_data/of14/5-49-ofp_meter_features_request.packet new file mode 100644 index 00000000..72b79cf1 Binary files /dev/null and b/tests/packet_data/of14/5-49-ofp_meter_features_request.packet differ diff --git a/tests/packet_data/of14/5-5-ofp_features_request.packet b/tests/packet_data/of14/5-5-ofp_features_request.packet new file mode 100644 index 00000000..bc360d55 Binary files /dev/null and b/tests/packet_data/of14/5-5-ofp_features_request.packet differ diff --git a/tests/packet_data/of14/5-50-ofp_meter_features_reply.packet b/tests/packet_data/of14/5-50-ofp_meter_features_reply.packet new file mode 100644 index 00000000..9d138430 Binary files /dev/null and b/tests/packet_data/of14/5-50-ofp_meter_features_reply.packet differ diff --git a/tests/packet_data/of14/5-51-ofp_port_desc_request.packet b/tests/packet_data/of14/5-51-ofp_port_desc_request.packet new file mode 100644 index 00000000..5aaa40d1 Binary files /dev/null and b/tests/packet_data/of14/5-51-ofp_port_desc_request.packet differ diff --git a/tests/packet_data/of14/5-52-ofp_port_desc_reply.packet b/tests/packet_data/of14/5-52-ofp_port_desc_reply.packet new file mode 100644 index 00000000..c844eef3 Binary files /dev/null and b/tests/packet_data/of14/5-52-ofp_port_desc_reply.packet differ diff --git a/tests/packet_data/of14/5-53-ofp_table_features_request.packet b/tests/packet_data/of14/5-53-ofp_table_features_request.packet new file mode 100644 index 00000000..7a7317aa Binary files /dev/null and b/tests/packet_data/of14/5-53-ofp_table_features_request.packet differ diff --git a/tests/packet_data/of14/5-54-ofp_table_features_reply.packet b/tests/packet_data/of14/5-54-ofp_table_features_reply.packet new file mode 100644 index 00000000..6b622a36 Binary files /dev/null and b/tests/packet_data/of14/5-54-ofp_table_features_reply.packet differ diff --git a/tests/packet_data/of14/5-55-ofp_group_stats_request.packet b/tests/packet_data/of14/5-55-ofp_group_stats_request.packet new file mode 100644 index 00000000..a3ab88c1 Binary files /dev/null and b/tests/packet_data/of14/5-55-ofp_group_stats_request.packet differ diff --git a/tests/packet_data/of14/5-56-ofp_group_stats_reply.packet b/tests/packet_data/of14/5-56-ofp_group_stats_reply.packet new file mode 100644 index 00000000..2a19c4b6 Binary files /dev/null and b/tests/packet_data/of14/5-56-ofp_group_stats_reply.packet differ diff --git a/tests/packet_data/of14/5-57-ofp_packet_in.packet b/tests/packet_data/of14/5-57-ofp_packet_in.packet new file mode 100644 index 00000000..f313389d Binary files /dev/null and b/tests/packet_data/of14/5-57-ofp_packet_in.packet differ diff --git a/tests/packet_data/of14/5-58-ofp_flow_mod.packet b/tests/packet_data/of14/5-58-ofp_flow_mod.packet new file mode 100644 index 00000000..456e89ad Binary files /dev/null and b/tests/packet_data/of14/5-58-ofp_flow_mod.packet differ diff --git a/tests/packet_data/of14/5-59-ofp_experimenter_request.packet b/tests/packet_data/of14/5-59-ofp_experimenter_request.packet new file mode 100644 index 00000000..c41652e2 Binary files /dev/null and b/tests/packet_data/of14/5-59-ofp_experimenter_request.packet differ diff --git a/tests/packet_data/of14/5-6-ofp_features_reply.packet b/tests/packet_data/of14/5-6-ofp_features_reply.packet new file mode 100644 index 00000000..1236be2d Binary files /dev/null and b/tests/packet_data/of14/5-6-ofp_features_reply.packet differ diff --git a/tests/packet_data/of14/5-60-ofp_experimenter_reply.packet b/tests/packet_data/of14/5-60-ofp_experimenter_reply.packet new file mode 100644 index 00000000..4f2bdc6b Binary files /dev/null and b/tests/packet_data/of14/5-60-ofp_experimenter_reply.packet differ diff --git a/tests/packet_data/of14/5-61-ofp_table_desc_request.packet b/tests/packet_data/of14/5-61-ofp_table_desc_request.packet new file mode 100644 index 00000000..5e728623 Binary files /dev/null and b/tests/packet_data/of14/5-61-ofp_table_desc_request.packet differ diff --git a/tests/packet_data/of14/5-62-ofp_table_desc_reply.packet b/tests/packet_data/of14/5-62-ofp_table_desc_reply.packet new file mode 100644 index 00000000..2f7b6e2e Binary files /dev/null and b/tests/packet_data/of14/5-62-ofp_table_desc_reply.packet differ diff --git a/tests/packet_data/of14/5-63-ofp_queue_desc_request.packet b/tests/packet_data/of14/5-63-ofp_queue_desc_request.packet new file mode 100644 index 00000000..78e584d8 Binary files /dev/null and b/tests/packet_data/of14/5-63-ofp_queue_desc_request.packet differ diff --git a/tests/packet_data/of14/5-64-ofp_queue_desc_reply.packet b/tests/packet_data/of14/5-64-ofp_queue_desc_reply.packet new file mode 100644 index 00000000..d9f6f11b Binary files /dev/null and b/tests/packet_data/of14/5-64-ofp_queue_desc_reply.packet differ diff --git a/tests/packet_data/of14/5-65-ofp_role_status.packet b/tests/packet_data/of14/5-65-ofp_role_status.packet new file mode 100644 index 00000000..cd753a30 Binary files /dev/null and b/tests/packet_data/of14/5-65-ofp_role_status.packet differ diff --git a/tests/packet_data/of14/5-66-ofp_flow_monitor_request.packet b/tests/packet_data/of14/5-66-ofp_flow_monitor_request.packet new file mode 100644 index 00000000..1f8d8598 Binary files /dev/null and b/tests/packet_data/of14/5-66-ofp_flow_monitor_request.packet differ diff --git a/tests/packet_data/of14/5-67-ofp_flow_monitor_reply.packet b/tests/packet_data/of14/5-67-ofp_flow_monitor_reply.packet new file mode 100644 index 00000000..b50fe8f5 Binary files /dev/null and b/tests/packet_data/of14/5-67-ofp_flow_monitor_reply.packet differ diff --git a/tests/packet_data/of14/5-68-ofp_table_status.packet b/tests/packet_data/of14/5-68-ofp_table_status.packet new file mode 100644 index 00000000..f630ccc2 Binary files /dev/null and b/tests/packet_data/of14/5-68-ofp_table_status.packet differ diff --git a/tests/packet_data/of14/5-69-ofp_bundle_ctrl_msg.packet b/tests/packet_data/of14/5-69-ofp_bundle_ctrl_msg.packet new file mode 100644 index 00000000..8df1e6f8 Binary files /dev/null and b/tests/packet_data/of14/5-69-ofp_bundle_ctrl_msg.packet differ diff --git a/tests/packet_data/of14/5-7-ofp_set_config.packet b/tests/packet_data/of14/5-7-ofp_set_config.packet new file mode 100644 index 00000000..0d22cd5a Binary files /dev/null and b/tests/packet_data/of14/5-7-ofp_set_config.packet differ diff --git a/tests/packet_data/of14/5-70-ofp_bundle_add_msg.packet b/tests/packet_data/of14/5-70-ofp_bundle_add_msg.packet new file mode 100644 index 00000000..5565f8d3 Binary files /dev/null and b/tests/packet_data/of14/5-70-ofp_bundle_add_msg.packet differ diff --git a/tests/packet_data/of14/5-71-ofp_requestforward.packet b/tests/packet_data/of14/5-71-ofp_requestforward.packet new file mode 100644 index 00000000..d06e8b4a Binary files /dev/null and b/tests/packet_data/of14/5-71-ofp_requestforward.packet differ diff --git a/tests/packet_data/of14/5-8-ofp_get_config_request.packet b/tests/packet_data/of14/5-8-ofp_get_config_request.packet new file mode 100644 index 00000000..9e930df3 Binary files /dev/null and b/tests/packet_data/of14/5-8-ofp_get_config_request.packet differ diff --git a/tests/packet_data/of14/5-9-ofp_get_config_reply.packet b/tests/packet_data/of14/5-9-ofp_get_config_reply.packet new file mode 100644 index 00000000..f63f6c29 Binary files /dev/null and b/tests/packet_data/of14/5-9-ofp_get_config_reply.packet differ diff --git a/tests/packet_data/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet b/tests/packet_data/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet new file mode 100644 index 00000000..207712f1 Binary files /dev/null and b/tests/packet_data/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_reply.packet b/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_reply.packet new file mode 100644 index 00000000..bbb51918 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_request.packet b/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_request.packet new file mode 100644 index 00000000..5abee5b4 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-aggregate_stats_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-barrier_reply.packet b/tests/packet_data/of15/libofproto-OFP15-barrier_reply.packet new file mode 100644 index 00000000..fc15112c Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-barrier_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-barrier_request.packet b/tests/packet_data/of15/libofproto-OFP15-barrier_request.packet new file mode 100644 index 00000000..cda0a443 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-barrier_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-bundle_add.packet b/tests/packet_data/of15/libofproto-OFP15-bundle_add.packet new file mode 100644 index 00000000..744af0fd Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-bundle_add.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-bundle_ctrl.packet b/tests/packet_data/of15/libofproto-OFP15-bundle_ctrl.packet new file mode 100644 index 00000000..34b2f3bf Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-bundle_ctrl.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-bundle_features_reply.packet b/tests/packet_data/of15/libofproto-OFP15-bundle_features_reply.packet new file mode 100644 index 00000000..450081e6 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-bundle_features_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-bundle_features_request.packet b/tests/packet_data/of15/libofproto-OFP15-bundle_features_request.packet new file mode 100644 index 00000000..8d078ef2 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-bundle_features_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-controller_status.packet b/tests/packet_data/of15/libofproto-OFP15-controller_status.packet new file mode 100644 index 00000000..9b63794e Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-controller_status.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-controller_status_reply.packet b/tests/packet_data/of15/libofproto-OFP15-controller_status_reply.packet new file mode 100644 index 00000000..e859f9b0 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-controller_status_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-controller_status_request.packet b/tests/packet_data/of15/libofproto-OFP15-controller_status_request.packet new file mode 100644 index 00000000..4c741757 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-controller_status_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-desc_reply.packet b/tests/packet_data/of15/libofproto-OFP15-desc_reply.packet new file mode 100644 index 00000000..261333c4 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-desc_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-desc_request.packet b/tests/packet_data/of15/libofproto-OFP15-desc_request.packet new file mode 100644 index 00000000..11b39877 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-desc_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-echo_reply.packet b/tests/packet_data/of15/libofproto-OFP15-echo_reply.packet new file mode 100644 index 00000000..70d03566 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-echo_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-echo_request.packet b/tests/packet_data/of15/libofproto-OFP15-echo_request.packet new file mode 100644 index 00000000..a72ee3aa Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-echo_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-error_msg.packet b/tests/packet_data/of15/libofproto-OFP15-error_msg.packet new file mode 100644 index 00000000..596762d8 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-error_msg.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-error_msg_experimenter.packet b/tests/packet_data/of15/libofproto-OFP15-error_msg_experimenter.packet new file mode 100644 index 00000000..3fba70c2 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-error_msg_experimenter.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-experimenter.packet b/tests/packet_data/of15/libofproto-OFP15-experimenter.packet new file mode 100644 index 00000000..c96393aa Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-experimenter.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-experimenter_reply.packet b/tests/packet_data/of15/libofproto-OFP15-experimenter_reply.packet new file mode 100644 index 00000000..9575ae9b Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-experimenter_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-experimenter_request.packet b/tests/packet_data/of15/libofproto-OFP15-experimenter_request.packet new file mode 100644 index 00000000..739437cb Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-experimenter_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-features_reply.packet b/tests/packet_data/of15/libofproto-OFP15-features_reply.packet new file mode 100644 index 00000000..6893fd57 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-features_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-features_request.packet b/tests/packet_data/of15/libofproto-OFP15-features_request.packet new file mode 100644 index 00000000..8d7159e5 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-features_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-flow_desc_reply.packet b/tests/packet_data/of15/libofproto-OFP15-flow_desc_reply.packet new file mode 100644 index 00000000..4bf534cf Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-flow_desc_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-flow_desc_request.packet b/tests/packet_data/of15/libofproto-OFP15-flow_desc_request.packet new file mode 100644 index 00000000..a5a5bc11 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-flow_desc_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-flow_mod.packet b/tests/packet_data/of15/libofproto-OFP15-flow_mod.packet new file mode 100644 index 00000000..d70a062c Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-flow_mod.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-flow_mod_conjunction.packet b/tests/packet_data/of15/libofproto-OFP15-flow_mod_conjunction.packet new file mode 100644 index 00000000..6fee113a Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-flow_mod_conjunction.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-flow_mod_match_conj.packet b/tests/packet_data/of15/libofproto-OFP15-flow_mod_match_conj.packet new file mode 100644 index 00000000..4bc17eef Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-flow_mod_match_conj.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-flow_monitor_reply.packet b/tests/packet_data/of15/libofproto-OFP15-flow_monitor_reply.packet new file mode 100644 index 00000000..94129c1c Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-flow_monitor_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-flow_monitor_request.packet b/tests/packet_data/of15/libofproto-OFP15-flow_monitor_request.packet new file mode 100644 index 00000000..203af31f Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-flow_monitor_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-flow_removed.packet b/tests/packet_data/of15/libofproto-OFP15-flow_removed.packet new file mode 100644 index 00000000..1df2b2ed Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-flow_removed.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-flow_stats_reply.packet b/tests/packet_data/of15/libofproto-OFP15-flow_stats_reply.packet new file mode 100644 index 00000000..5ca44bbd Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-flow_stats_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-flow_stats_request.packet b/tests/packet_data/of15/libofproto-OFP15-flow_stats_request.packet new file mode 100644 index 00000000..8481a1bb Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-flow_stats_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-get_async_reply.packet b/tests/packet_data/of15/libofproto-OFP15-get_async_reply.packet new file mode 100644 index 00000000..aa14b1e2 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-get_async_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-get_async_request.packet b/tests/packet_data/of15/libofproto-OFP15-get_async_request.packet new file mode 100644 index 00000000..b8672b82 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-get_async_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-get_config_reply.packet b/tests/packet_data/of15/libofproto-OFP15-get_config_reply.packet new file mode 100644 index 00000000..6e7b6191 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-get_config_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-get_config_request.packet b/tests/packet_data/of15/libofproto-OFP15-get_config_request.packet new file mode 100644 index 00000000..15fc95f0 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-get_config_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-group_desc_reply.packet b/tests/packet_data/of15/libofproto-OFP15-group_desc_reply.packet new file mode 100644 index 00000000..6420c149 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-group_desc_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-group_desc_request.packet b/tests/packet_data/of15/libofproto-OFP15-group_desc_request.packet new file mode 100644 index 00000000..ee6ee7ce Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-group_desc_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-group_features_reply.packet b/tests/packet_data/of15/libofproto-OFP15-group_features_reply.packet new file mode 100644 index 00000000..14ddc120 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-group_features_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-group_features_request.packet b/tests/packet_data/of15/libofproto-OFP15-group_features_request.packet new file mode 100644 index 00000000..90805651 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-group_features_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-group_mod.packet b/tests/packet_data/of15/libofproto-OFP15-group_mod.packet new file mode 100644 index 00000000..65761562 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-group_mod.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-group_stats_reply.packet b/tests/packet_data/of15/libofproto-OFP15-group_stats_reply.packet new file mode 100644 index 00000000..4853628d Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-group_stats_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-group_stats_request.packet b/tests/packet_data/of15/libofproto-OFP15-group_stats_request.packet new file mode 100644 index 00000000..3c8dd862 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-group_stats_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-hello.packet b/tests/packet_data/of15/libofproto-OFP15-hello.packet new file mode 100644 index 00000000..3afdec41 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-hello.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-meter_desc_reply.packet b/tests/packet_data/of15/libofproto-OFP15-meter_desc_reply.packet new file mode 100644 index 00000000..026199ae Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-meter_desc_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-meter_desc_request.packet b/tests/packet_data/of15/libofproto-OFP15-meter_desc_request.packet new file mode 100644 index 00000000..3a008900 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-meter_desc_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-meter_features_reply.packet b/tests/packet_data/of15/libofproto-OFP15-meter_features_reply.packet new file mode 100644 index 00000000..b7e5a935 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-meter_features_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-meter_features_request.packet b/tests/packet_data/of15/libofproto-OFP15-meter_features_request.packet new file mode 100644 index 00000000..d85918df Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-meter_features_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-meter_mod.packet b/tests/packet_data/of15/libofproto-OFP15-meter_mod.packet new file mode 100644 index 00000000..2f25474f Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-meter_mod.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-meter_stats_reply.packet b/tests/packet_data/of15/libofproto-OFP15-meter_stats_reply.packet new file mode 100644 index 00000000..2db08d65 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-meter_stats_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-meter_stats_request.packet b/tests/packet_data/of15/libofproto-OFP15-meter_stats_request.packet new file mode 100644 index 00000000..6cec3f59 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-meter_stats_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-packet_in.packet b/tests/packet_data/of15/libofproto-OFP15-packet_in.packet new file mode 100644 index 00000000..7a6aab01 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-packet_in.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-packet_out.packet b/tests/packet_data/of15/libofproto-OFP15-packet_out.packet new file mode 100644 index 00000000..b3569026 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-packet_out.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-port_desc_reply.packet b/tests/packet_data/of15/libofproto-OFP15-port_desc_reply.packet new file mode 100644 index 00000000..c687e5cd Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-port_desc_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-port_desc_request.packet b/tests/packet_data/of15/libofproto-OFP15-port_desc_request.packet new file mode 100644 index 00000000..cf9ecc6e Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-port_desc_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-port_mod.packet b/tests/packet_data/of15/libofproto-OFP15-port_mod.packet new file mode 100644 index 00000000..1aab2c48 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-port_mod.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-port_stats_reply.packet b/tests/packet_data/of15/libofproto-OFP15-port_stats_reply.packet new file mode 100644 index 00000000..9d190d01 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-port_stats_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-port_stats_request.packet b/tests/packet_data/of15/libofproto-OFP15-port_stats_request.packet new file mode 100644 index 00000000..af7d6892 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-port_stats_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-port_status.packet b/tests/packet_data/of15/libofproto-OFP15-port_status.packet new file mode 100644 index 00000000..1d2d5305 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-port_status.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-queue_desc_reply.packet b/tests/packet_data/of15/libofproto-OFP15-queue_desc_reply.packet new file mode 100644 index 00000000..d8f8e318 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-queue_desc_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-queue_desc_request.packet b/tests/packet_data/of15/libofproto-OFP15-queue_desc_request.packet new file mode 100644 index 00000000..960dbeff Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-queue_desc_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-queue_stats_reply.packet b/tests/packet_data/of15/libofproto-OFP15-queue_stats_reply.packet new file mode 100644 index 00000000..11744f90 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-queue_stats_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-queue_stats_request.packet b/tests/packet_data/of15/libofproto-OFP15-queue_stats_request.packet new file mode 100644 index 00000000..416a6185 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-queue_stats_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-requestforward.packet b/tests/packet_data/of15/libofproto-OFP15-requestforward.packet new file mode 100644 index 00000000..153a99f2 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-requestforward.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-role_reply.packet b/tests/packet_data/of15/libofproto-OFP15-role_reply.packet new file mode 100644 index 00000000..c92ba974 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-role_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-role_request.packet b/tests/packet_data/of15/libofproto-OFP15-role_request.packet new file mode 100644 index 00000000..82c99197 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-role_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-role_status.packet b/tests/packet_data/of15/libofproto-OFP15-role_status.packet new file mode 100644 index 00000000..de85d1f8 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-role_status.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-set_async.packet b/tests/packet_data/of15/libofproto-OFP15-set_async.packet new file mode 100644 index 00000000..9fbfd415 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-set_async.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-set_config.packet b/tests/packet_data/of15/libofproto-OFP15-set_config.packet new file mode 100644 index 00000000..eb3ed3dd Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-set_config.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-table_desc_reply.packet b/tests/packet_data/of15/libofproto-OFP15-table_desc_reply.packet new file mode 100644 index 00000000..4177a743 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-table_desc_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-table_desc_request.packet b/tests/packet_data/of15/libofproto-OFP15-table_desc_request.packet new file mode 100644 index 00000000..c2a47776 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-table_desc_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-table_features_reply.packet b/tests/packet_data/of15/libofproto-OFP15-table_features_reply.packet new file mode 100644 index 00000000..ce826483 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-table_features_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-table_features_request.packet b/tests/packet_data/of15/libofproto-OFP15-table_features_request.packet new file mode 100644 index 00000000..706d8756 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-table_features_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-table_mod.packet b/tests/packet_data/of15/libofproto-OFP15-table_mod.packet new file mode 100644 index 00000000..884fc42b Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-table_mod.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-table_stats_reply.packet b/tests/packet_data/of15/libofproto-OFP15-table_stats_reply.packet new file mode 100644 index 00000000..6693467f Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-table_stats_reply.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-table_stats_request.packet b/tests/packet_data/of15/libofproto-OFP15-table_stats_request.packet new file mode 100644 index 00000000..aae25d76 Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-table_stats_request.packet differ diff --git a/tests/packet_data/of15/libofproto-OFP15-table_status.packet b/tests/packet_data/of15/libofproto-OFP15-table_status.packet new file mode 100644 index 00000000..3410d23c Binary files /dev/null and b/tests/packet_data/of15/libofproto-OFP15-table_status.packet differ diff --git a/tests/packet_data/pcap/big_endian.pcap b/tests/packet_data/pcap/big_endian.pcap new file mode 100644 index 00000000..1387f5dd Binary files /dev/null and b/tests/packet_data/pcap/big_endian.pcap differ diff --git a/tests/packet_data/pcap/geneve_unknown.pcap b/tests/packet_data/pcap/geneve_unknown.pcap new file mode 100644 index 00000000..dc65d944 Binary files /dev/null and b/tests/packet_data/pcap/geneve_unknown.pcap differ diff --git a/tests/packet_data/pcap/gre_full_options.pcap b/tests/packet_data/pcap/gre_full_options.pcap new file mode 100644 index 00000000..cabf5199 Binary files /dev/null and b/tests/packet_data/pcap/gre_full_options.pcap differ diff --git a/tests/packet_data/pcap/gre_no_option.pcap b/tests/packet_data/pcap/gre_no_option.pcap new file mode 100644 index 00000000..258126ba Binary files /dev/null and b/tests/packet_data/pcap/gre_no_option.pcap differ diff --git a/tests/packet_data/pcap/gre_nvgre_option.pcap b/tests/packet_data/pcap/gre_nvgre_option.pcap new file mode 100644 index 00000000..fb1b2980 Binary files /dev/null and b/tests/packet_data/pcap/gre_nvgre_option.pcap differ diff --git a/tests/packet_data/pcap/little_endian.pcap b/tests/packet_data/pcap/little_endian.pcap new file mode 100644 index 00000000..11072bdd Binary files /dev/null and b/tests/packet_data/pcap/little_endian.pcap differ diff --git a/tests/packet_data/pcap/openflow_flowmod.pcap b/tests/packet_data/pcap/openflow_flowmod.pcap new file mode 100644 index 00000000..e72a0425 Binary files /dev/null and b/tests/packet_data/pcap/openflow_flowmod.pcap differ diff --git a/tests/packet_data/pcap/openflow_flowstats_req.pcap b/tests/packet_data/pcap/openflow_flowstats_req.pcap new file mode 100644 index 00000000..7ce270d5 Binary files /dev/null and b/tests/packet_data/pcap/openflow_flowstats_req.pcap differ diff --git a/tests/packet_data/pcap/openflow_invalid_version.pcap b/tests/packet_data/pcap/openflow_invalid_version.pcap new file mode 100644 index 00000000..2c22675b Binary files /dev/null and b/tests/packet_data/pcap/openflow_invalid_version.pcap differ diff --git a/tests/packet_data/pcap/zebra_v2.pcap b/tests/packet_data/pcap/zebra_v2.pcap new file mode 100644 index 00000000..b5ca677b Binary files /dev/null and b/tests/packet_data/pcap/zebra_v2.pcap differ diff --git a/tests/packet_data/pcap/zebra_v3.pcap b/tests/packet_data/pcap/zebra_v3.pcap new file mode 100644 index 00000000..f2e01a91 Binary files /dev/null and b/tests/packet_data/pcap/zebra_v3.pcap differ diff --git a/tests/packet_data_generator/Makefile b/tests/packet_data_generator/Makefile new file mode 100644 index 00000000..be1e8d85 --- /dev/null +++ b/tests/packet_data_generator/Makefile @@ -0,0 +1,5 @@ + +generate: + rebar get-deps + rebar compile + erl -pa ebin deps/*/ebin -s x x -s init stop diff --git a/tests/packet_data_generator/rebar.config b/tests/packet_data_generator/rebar.config new file mode 100644 index 00000000..e060319c --- /dev/null +++ b/tests/packet_data_generator/rebar.config @@ -0,0 +1,29 @@ +%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +%% Copyright (C) 2013 YAMAMOTO Takashi +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +%% implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +{deps, + [{of_protocol, ".*", +% {git, "https://github.com/FlowForwarding/of_protocol.git", +% "5d6a938bcac91d03e4542845bc014a271bab363a"}}, +% use local branch for merge of upstream v5 branch with pull 66 and 71 +% https://github.com/FlowForwarding/of_protocol/tree/v5 +% https://github.com/FlowForwarding/of_protocol/pull/66 +% https://github.com/FlowForwarding/of_protocol/pull/71 + {git, "https://github.com/horms/of_protocol.git", + "6764e8f0ed5c4dee913310bf2bd908ab1768603e"}}, + {flower, ".*", + {git, "http://github.com/travelping/flower.git", + "d783d8f722cb1eb2fa598d4521b309cfcc703fdb"}}]}. diff --git a/tests/packet_data_generator/src/er.app.src b/tests/packet_data_generator/src/er.app.src new file mode 100644 index 00000000..5252b564 --- /dev/null +++ b/tests/packet_data_generator/src/er.app.src @@ -0,0 +1,24 @@ +%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +%% Copyright (C) 2013 YAMAMOTO Takashi +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +%% implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +{application, er, + [{description, "generate test data"}, + {vsn, "1.0"}, + {applications, + [kernel, + stdlib, + of_protocol]}]}. + diff --git a/tests/packet_data_generator/src/x.erl b/tests/packet_data_generator/src/x.erl new file mode 100644 index 00000000..1b624e8f --- /dev/null +++ b/tests/packet_data_generator/src/x.erl @@ -0,0 +1,63 @@ +%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +%% Copyright (C) 2013 YAMAMOTO Takashi +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +%% implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +-module(x). +-export([do/2, x/0]). + +% eg. 1 -> of10 +ofp_version_string(Vers) -> + ["of", integer_to_list(9 + Vers)]. + +do(skip, {OFPVersion, N}) -> + {OFPVersion, N + 1}; +do(Body, {OFPVersion, N}) -> + Mod = case OFPVersion of + 1 -> x_flower_packet; + _ -> x_of_protocol + end, + Name = case Body of + B when is_tuple(B) -> + atom_to_list(element(1, B)); + _ -> + atom_to_list(Body) + end, + io:format("processing ~B ~B ~s~n", [OFPVersion, N, Name]), + Msg = Mod:message(OFPVersion, 0, Body), + case Mod:encode(Msg) of + {ok, BinMsg} -> ok; + {error, Error} -> io:format("~p ~p~n", [Error, Msg]), BinMsg = hoge + end, + {ok, F} = file:open(["../packet_data/", + ofp_version_string(OFPVersion), "/", integer_to_list(OFPVersion), "-", + integer_to_list(N), "-", Name, ".packet"], [write, binary]), + + % sanity check + % this is fragile because of order of flags. + % ofp flags are unorderd but of_protocol keeps them in a list. + {ok, Msg2, <<>>} = Mod:decode(BinMsg), + {OFPVersion, 0, Body2} = Mod:message_extract(Msg2), + case Body == Body2 of + false -> io:format("~p~n", [Body]), io:format("~p~n", [Body2]); + _ -> hoge + end, + Body = Body2, + + ok = file:write(F, BinMsg), + ok = file:close(F), + {OFPVersion, N + 1}. + +x() -> + lists:map(fun(Mod) -> Mod:x() end, [x1, x3, x4, x5]). diff --git a/tests/packet_data_generator/src/x1.erl b/tests/packet_data_generator/src/x1.erl new file mode 100644 index 00000000..6935e021 --- /dev/null +++ b/tests/packet_data_generator/src/x1.erl @@ -0,0 +1,90 @@ +%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +%% Copyright (C) 2013 YAMAMOTO Takashi +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +%% implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +-module(x1). +-export([x/0]). + +-include_lib("flower/include/flower_packet.hrl"). + +cookie(Bin) -> + <> = Bin, + Int. + +x() -> + List = [ + skip, + #ofp_packet_out{ + buffer_id = ?OFP_NO_BUFFER,in_port = controller, + actions = + [#ofp_action_output{port = all,max_len = 65535}], + data = + <<242,11,164,208,63,112,242,11,164,125,248,234,8,0,69,0, + 0,84,248,26,0,0,255,1,175,139,10,0,0,1,10,0,0,2,8,0,2, + 8,247,96,0,0,49,214,2,0,0,0,0,0,171,141,45,49,0,0,0,0, + 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43,44,45,46,47,0,0,0,0,0,0, + 0,0>>}, + #ofp_flow_mod{ + cookie = cookie(<<0,0,0,0,0,0,0,0>>), + command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = all,flags = [], + match = + #ofp_match{ + wildcards = 16#3ffff7, + dl_dst = <<"\362\v\244}\370\352">>, + % XXX ryu and flower have different defaults for the + % followin fields. + in_port = 0, + dl_src = <<0:6/unit:8>> + }, + actions = [#ofp_action_output{port = 6,max_len = 65535}]}, + skip, + #ofp_packet_in{ + buffer_id = 2,total_len=42,reason = action,in_port = 99, + data = + <<255,255,255,255,255,255,242,11,164,125,248,234,8,6,0, + 1,8,0,6,4,0,1,242,11,164,125,248,234,10,0,0,1,0,0,0,0, + 0,0,10,0,0,3>>}, + + features_request, + #ofp_switch_features{ % features_reply + datapath_id = 16#ff12345678,n_buffers = 0,n_tables = 255, + capabilities = + [arp_match_ip,ip_reasm,stp,flow_stats], + actions = + [enqueue,set_nw_src,set_vlan_vid,output], + ports = + [#ofp_phy_port{ + port_no = 7,hw_addr = <<"\362\v\244\320?p">>, + name = <<"Port7">>, + config = [], + state = [stp_block], + curr = [autoneg,copper,'100mb_fd'], + advertised = [autoneg,copper], + supported = [autoneg,copper,'100mb_fd'], + peer = [autoneg,copper,'100mb_fd']}, + #ofp_phy_port{ + port_no = 6,hw_addr = <<"\362\v\244}\370\352">>, + name = <<"Port6">>, + config = [], + state = [stp_listen], + curr = [autoneg,copper,'100mb_fd'], + advertised = [autoneg,copper], + supported = [autoneg,copper,'100mb_fd'], + peer = [autoneg,copper,'100mb_fd']}]} + ], + lists:foldl(fun x:do/2, {1, 0}, List). diff --git a/tests/packet_data_generator/src/x3.erl b/tests/packet_data_generator/src/x3.erl new file mode 100644 index 00000000..7098fd8d --- /dev/null +++ b/tests/packet_data_generator/src/x3.erl @@ -0,0 +1,8749 @@ +%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +%% Copyright (C) 2013 YAMAMOTO Takashi +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +%% implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +-module(x3). +-export([x/0]). + +-include_lib("of_protocol/include/of_protocol.hrl"). +-include_lib("of_protocol/include/ofp_v3.hrl"). + +x() -> + AllFields = [ + #ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<5,6,7,8>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = in_phy_port, + has_mask = false, + value = <<1,2,3,4>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = metadata, + has_mask = false, + value = <<0,1,2,3,4,5,6,7>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_type, + has_mask = false, + value = <<8,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false,value = <<"\377\377\377\377\377\377">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = vlan_vid, + has_mask = false,value = <<999:13>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ip_dscp, + has_mask = false,value = <<9:6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ip_ecn, + has_mask = false,value = <<3:2>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ip_proto, + has_mask = false,value = <<99>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv4_src, + has_mask = false,value = <<1,2,3,4>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv4_dst, + has_mask = false,value = <<1,2,3,4>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = tcp_src, + has_mask = false,value = <<8080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = tcp_dst, + has_mask = false,value = <<18080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = udp_src, + has_mask = false,value = <<28080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = udp_dst, + has_mask = false,value = <<318080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = sctp_src, + has_mask = false,value = <<48080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = sctp_dst, + has_mask = false,value = <<518080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv4_type, + has_mask = false,value = <<100>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv4_code, + has_mask = false,value = <<101>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_op, + has_mask = false, + value = <<0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_spa, + has_mask = false, + value = <<10,0,0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tpa, + has_mask = false, + value = <<10,0,0,3>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_sha, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tha, + has_mask = false, + value = <<0,0,0,0,0,0>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_src, + has_mask = false, + % fe80::f00b:a4ff:fe48:28a5 + value = <<16#fe80000000000000f00ba4fffe4828a5:128>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_dst, + has_mask = false, + % fe80::f00b:a4ff:fe05:b7dc + value = <<16#fe80000000000000f00ba4fffe05b7dc:128>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_flabel, + has_mask = false, + value = <<16#84321:20>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv6_type, + has_mask = false, + value = <<200>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv6_code, + has_mask = false, + value = <<201>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_nd_target, + has_mask = false, + % fe80::a60:6eff:fe7f:74e7 + value = <<16#fe800000000000000a606efffe7f74e7:128>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_nd_sll, + has_mask = false, + value = <<666:48>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_nd_tll, + has_mask = false, + value = <<555:48>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = mpls_label, + has_mask = false, + value = <<16#98765:20>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = mpls_tc, + has_mask = false, + value = <<5:3>>, + mask = undefined} + ], + List = [ + #ofp_desc_stats_reply{flags = [], mfr_desc = <<"mfr">>, + hw_desc = <<"hw">>, sw_desc = <<"sw">>, + serial_num = <<"serial">>, + dp_desc = <<"dp">>}, + #ofp_packet_out{ + buffer_id = no_buffer,in_port = controller, + actions = + [#ofp_action_output{port = all,max_len = no_buffer}], + data = + <<242,11,164,208,63,112,242,11,164,125,248,234,8,0,69,0, + 0,84,248,26,0,0,255,1,175,139,10,0,0,1,10,0,0,2,8,0,2, + 8,247,96,0,0,49,214,2,0,0,0,0,0,171,141,45,49,0,0,0,0, + 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43,44,45,46,47,0,0,0,0,0,0, + 0,0>>}, + #ofp_flow_mod{ + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + table_id = 1,command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = any,out_group = any,flags = [], + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}, + instructions = + [#ofp_instruction_write_actions{ + actions = + [#ofp_action_set_field{ + field = #ofp_field{name = vlan_vid, + value = <<258:13>> }}, + #ofp_action_output{port = 6,max_len = no_buffer}]}, + #ofp_instruction_apply_actions{ + actions = + [#ofp_action_set_field{ + field = #ofp_field{name = eth_src, + value = <<1,2,3,4,5,6>> }}]}]}, + #ofp_flow_mod{ + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + table_id = 0,command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = any,out_group = any,flags = [], + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<0,0,0,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}, + instructions = + [#ofp_instruction_goto_table{table_id = 1}]}, + #ofp_packet_in{ + buffer_id = 2,reason = action,table_id = 1, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<0,0,0,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_type, + has_mask = false, + value = <<8,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false,value = <<"\377\377\377\377\377\377">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_op, + has_mask = false, + value = <<0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_spa, + has_mask = false, + value = <<10,0,0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tpa, + has_mask = false, + value = <<10,0,0,3>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_sha, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tha, + has_mask = false, + value = <<0,0,0,0,0,0>>, + mask = undefined}]}, + data = + <<255,255,255,255,255,255,242,11,164,125,248,234,8,6,0, + 1,8,0,6,4,0,1,242,11,164,125,248,234,10,0,0,1,0,0,0,0, + 0,0,10,0,0,3>>}, + #ofp_features_request{}, + #ofp_features_reply{ + datapath_mac = <<8,96,110,127,116,231>>, + datapath_id = 0,n_buffers = 0,n_tables = 255, + capabilities = + [flow_stats,table_stats,port_stats,group_stats,queue_stats], + ports = + [#ofp_port{ + port_no = 7,hw_addr = <<"\362\v\244\320?p">>, + name = <<"Port7">>, + config = [], + state = [live], + curr = ['100mb_fd',copper,autoneg], + advertised = [copper,autoneg], + supported = ['100mb_fd',copper,autoneg], + peer = ['100mb_fd',copper,autoneg], + curr_speed = 5000,max_speed = 5000}, + #ofp_port{ + port_no = 6,hw_addr = <<"\362\v\244}\370\352">>, + name = <<"Port6">>, + config = [], + state = [live], + curr = ['100mb_fd',copper,autoneg], + advertised = [copper,autoneg], + supported = ['100mb_fd',copper,autoneg], + peer = ['100mb_fd',copper,autoneg], + curr_speed = 5000,max_speed = 5000}]}, + #ofp_set_config{flags = [],miss_send_len = 128}, + #ofp_get_config_request{}, + #ofp_get_config_reply{flags = [],miss_send_len = 128}, + #ofp_hello{}, + #ofp_flow_stats_request{ + flags = [],table_id = 0,out_port = any,out_group = any, + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + match = #ofp_match{fields = []}}, + #ofp_flow_stats_reply{ + flags = [], + stats = + [#ofp_flow_stats{ + table_id = 0,duration_sec = 358, + duration_nsec = 115277000,priority = 65535, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 0,byte_count = 0, + match = #ofp_match{fields = []}, + instructions = []}, + #ofp_flow_stats{ + table_id = 0,duration_sec = 358, + duration_nsec = 115055000,priority = 65534, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 0,byte_count = 0, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_type, + has_mask = false, + value = <<8,6>>, + mask = undefined}]}, + instructions = + [#ofp_instruction_apply_actions{ + actions = + [#ofp_action_output{ + port = normal,max_len = 0}]}]}, + #ofp_flow_stats{ + table_id = 0,duration_sec = 316220, + duration_nsec = 511582000,priority = 123, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 3,byte_count = 238, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<0,0,0,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}, + instructions = + [#ofp_instruction_goto_table{table_id = 1}]}, + #ofp_flow_stats{ + table_id = 0,duration_sec = 313499, + duration_nsec = 980901000,priority = 0, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 1,byte_count = 98, + match = #ofp_match{fields = []}, + instructions = + [#ofp_instruction_write_actions{ + actions = + [#ofp_action_output{ + port = controller, + max_len = no_buffer}]}]}]}, + #ofp_echo_request{ + data = <<"hoge">> + }, + #ofp_echo_reply{ + data = <<"hoge">> + }, + #ofp_error_msg{ + type = bad_action, + code = unsupported_order, + data = <<"fugafuga">> + }, + #ofp_experimenter{ + experimenter = 98765432, + exp_type = 123456789, + data = <<"nazo">> + }, + #ofp_barrier_request{}, + #ofp_barrier_reply{}, + #ofp_role_request{ + role = master, + generation_id = 16#f000f000f000f000}, + #ofp_role_reply{ + role = slave, + generation_id = 16#f000f000f000f000}, + + #ofp_group_mod{ + command = add,type = all,group_id = 1, + buckets = + [#ofp_bucket{ + weight = 1,watch_port = 1,watch_group = 1, + actions = + [#ofp_action_output{port = 2,max_len = no_buffer}]}]}, + #ofp_port_mod{port_no = 1, hw_addr = <<0,17,0,0,17,17>>, + config = [],mask = [], advertise = [fiber]}, + #ofp_table_mod{table_id = all,config = controller}, + #ofp_desc_stats_request{}, + #ofp_aggregate_stats_request{ + flags = [],table_id = all,out_port = any,out_group = any, + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + match = #ofp_match{fields = []}}, + #ofp_aggregate_stats_reply{flags = [],packet_count = 7, + byte_count = 574,flow_count = 6}, + #ofp_table_stats_request{}, + +#ofp_table_stats_reply{ + flags = [], + stats = + [#ofp_table_stats{ + table_id = 0,name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x86\xe3\x83\xbc\xe3\x83\x96\xe3\x83\xab">>, % "my table" in japanese, utf-8 + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 4, + lookup_count = 4,matched_count = 4}, + #ofp_table_stats{ + table_id = 1,name = <<"Flow Table 0x01">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 2, + lookup_count = 3,matched_count = 3}, + #ofp_table_stats{ + table_id = 2,name = <<"Flow Table 0x02">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 3,name = <<"Flow Table 0x03">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 4,name = <<"Flow Table 0x04">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 5,name = <<"Flow Table 0x05">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 6,name = <<"Flow Table 0x06">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 7,name = <<"Flow Table 0x07">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 8,name = <<"Flow Table 0x08">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 9,name = <<"Flow Table 0x09">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 10,name = <<"Flow Table 0x0a">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 11,name = <<"Flow Table 0x0b">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 12,name = <<"Flow Table 0x0c">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 13,name = <<"Flow Table 0x0d">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 14,name = <<"Flow Table 0x0e">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 15,name = <<"Flow Table 0x0f">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 16,name = <<"Flow Table 0x10">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 17,name = <<"Flow Table 0x11">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 18,name = <<"Flow Table 0x12">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 19,name = <<"Flow Table 0x13">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 20,name = <<"Flow Table 0x14">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 21,name = <<"Flow Table 0x15">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 22,name = <<"Flow Table 0x16">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 23,name = <<"Flow Table 0x17">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 24,name = <<"Flow Table 0x18">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 25,name = <<"Flow Table 0x19">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 26,name = <<"Flow Table 0x1a">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 27,name = <<"Flow Table 0x1b">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 28,name = <<"Flow Table 0x1c">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 29,name = <<"Flow Table 0x1d">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 30,name = <<"Flow Table 0x1e">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 31,name = <<"Flow Table 0x1f">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 32,name = <<"Flow Table 0x20">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 33,name = <<"Flow Table 0x21">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 34,name = <<"Flow Table 0x22">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 35,name = <<"Flow Table 0x23">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 36,name = <<"Flow Table 0x24">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 37,name = <<"Flow Table 0x25">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 38,name = <<"Flow Table 0x26">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 39,name = <<"Flow Table 0x27">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 40,name = <<"Flow Table 0x28">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 41,name = <<"Flow Table 0x29">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 42,name = <<"Flow Table 0x2a">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 43,name = <<"Flow Table 0x2b">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 44,name = <<"Flow Table 0x2c">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 45,name = <<"Flow Table 0x2d">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 46,name = <<"Flow Table 0x2e">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 47,name = <<"Flow Table 0x2f">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 48,name = <<"Flow Table 0x30">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 49,name = <<"Flow Table 0x31">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 50,name = <<"Flow Table 0x32">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 51,name = <<"Flow Table 0x33">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 52,name = <<"Flow Table 0x34">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 53,name = <<"Flow Table 0x35">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 54,name = <<"Flow Table 0x36">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 55,name = <<"Flow Table 0x37">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 56,name = <<"Flow Table 0x38">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 57,name = <<"Flow Table 0x39">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 58,name = <<"Flow Table 0x3a">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 59,name = <<"Flow Table 0x3b">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 60,name = <<"Flow Table 0x3c">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 61,name = <<"Flow Table 0x3d">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 62,name = <<"Flow Table 0x3e">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 63,name = <<"Flow Table 0x3f">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 64,name = <<"Flow Table 0x40">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 65,name = <<"Flow Table 0x41">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 66,name = <<"Flow Table 0x42">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 67,name = <<"Flow Table 0x43">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 68,name = <<"Flow Table 0x44">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 69,name = <<"Flow Table 0x45">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 70,name = <<"Flow Table 0x46">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 71,name = <<"Flow Table 0x47">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 72,name = <<"Flow Table 0x48">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 73,name = <<"Flow Table 0x49">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 74,name = <<"Flow Table 0x4a">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 75,name = <<"Flow Table 0x4b">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 76,name = <<"Flow Table 0x4c">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 77,name = <<"Flow Table 0x4d">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 78,name = <<"Flow Table 0x4e">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 79,name = <<"Flow Table 0x4f">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 80,name = <<"Flow Table 0x50">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 81,name = <<"Flow Table 0x51">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 82,name = <<"Flow Table 0x52">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 83,name = <<"Flow Table 0x53">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 84,name = <<"Flow Table 0x54">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 85,name = <<"Flow Table 0x55">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 86,name = <<"Flow Table 0x56">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 87,name = <<"Flow Table 0x57">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 88,name = <<"Flow Table 0x58">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 89,name = <<"Flow Table 0x59">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 90,name = <<"Flow Table 0x5a">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 91,name = <<"Flow Table 0x5b">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 92,name = <<"Flow Table 0x5c">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 93,name = <<"Flow Table 0x5d">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 94,name = <<"Flow Table 0x5e">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 95,name = <<"Flow Table 0x5f">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 96,name = <<"Flow Table 0x60">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 97,name = <<"Flow Table 0x61">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 98,name = <<"Flow Table 0x62">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 99,name = <<"Flow Table 0x63">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 100,name = <<"Flow Table 0x64">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 101,name = <<"Flow Table 0x65">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 102,name = <<"Flow Table 0x66">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 103,name = <<"Flow Table 0x67">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 104,name = <<"Flow Table 0x68">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 105,name = <<"Flow Table 0x69">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 106,name = <<"Flow Table 0x6a">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 107,name = <<"Flow Table 0x6b">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 108,name = <<"Flow Table 0x6c">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 109,name = <<"Flow Table 0x6d">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 110,name = <<"Flow Table 0x6e">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 111,name = <<"Flow Table 0x6f">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 112,name = <<"Flow Table 0x70">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 113,name = <<"Flow Table 0x71">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 114,name = <<"Flow Table 0x72">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 115,name = <<"Flow Table 0x73">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 116,name = <<"Flow Table 0x74">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 117,name = <<"Flow Table 0x75">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 118,name = <<"Flow Table 0x76">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 119,name = <<"Flow Table 0x77">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 120,name = <<"Flow Table 0x78">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 121,name = <<"Flow Table 0x79">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 122,name = <<"Flow Table 0x7a">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 123,name = <<"Flow Table 0x7b">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 124,name = <<"Flow Table 0x7c">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 125,name = <<"Flow Table 0x7d">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 126,name = <<"Flow Table 0x7e">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 127,name = <<"Flow Table 0x7f">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 128,name = <<"Flow Table 0x80">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 129,name = <<"Flow Table 0x81">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 130,name = <<"Flow Table 0x82">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 131,name = <<"Flow Table 0x83">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 132,name = <<"Flow Table 0x84">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 133,name = <<"Flow Table 0x85">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 134,name = <<"Flow Table 0x86">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 135,name = <<"Flow Table 0x87">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 136,name = <<"Flow Table 0x88">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 137,name = <<"Flow Table 0x89">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 138,name = <<"Flow Table 0x8a">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 139,name = <<"Flow Table 0x8b">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 140,name = <<"Flow Table 0x8c">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 141,name = <<"Flow Table 0x8d">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 142,name = <<"Flow Table 0x8e">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 143,name = <<"Flow Table 0x8f">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 144,name = <<"Flow Table 0x90">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 145,name = <<"Flow Table 0x91">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 146,name = <<"Flow Table 0x92">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 147,name = <<"Flow Table 0x93">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 148,name = <<"Flow Table 0x94">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 149,name = <<"Flow Table 0x95">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 150,name = <<"Flow Table 0x96">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 151,name = <<"Flow Table 0x97">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 152,name = <<"Flow Table 0x98">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 153,name = <<"Flow Table 0x99">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 154,name = <<"Flow Table 0x9a">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 155,name = <<"Flow Table 0x9b">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 156,name = <<"Flow Table 0x9c">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 157,name = <<"Flow Table 0x9d">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 158,name = <<"Flow Table 0x9e">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 159,name = <<"Flow Table 0x9f">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 160,name = <<"Flow Table 0xa0">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 161,name = <<"Flow Table 0xa1">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 162,name = <<"Flow Table 0xa2">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 163,name = <<"Flow Table 0xa3">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 164,name = <<"Flow Table 0xa4">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 165,name = <<"Flow Table 0xa5">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 166,name = <<"Flow Table 0xa6">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 167,name = <<"Flow Table 0xa7">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 168,name = <<"Flow Table 0xa8">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 169,name = <<"Flow Table 0xa9">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 170,name = <<"Flow Table 0xaa">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 171,name = <<"Flow Table 0xab">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 172,name = <<"Flow Table 0xac">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 173,name = <<"Flow Table 0xad">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 174,name = <<"Flow Table 0xae">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 175,name = <<"Flow Table 0xaf">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 176,name = <<"Flow Table 0xb0">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 177,name = <<"Flow Table 0xb1">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 178,name = <<"Flow Table 0xb2">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 179,name = <<"Flow Table 0xb3">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 180,name = <<"Flow Table 0xb4">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 181,name = <<"Flow Table 0xb5">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 182,name = <<"Flow Table 0xb6">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 183,name = <<"Flow Table 0xb7">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 184,name = <<"Flow Table 0xb8">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 185,name = <<"Flow Table 0xb9">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 186,name = <<"Flow Table 0xba">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 187,name = <<"Flow Table 0xbb">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 188,name = <<"Flow Table 0xbc">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 189,name = <<"Flow Table 0xbd">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 190,name = <<"Flow Table 0xbe">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 191,name = <<"Flow Table 0xbf">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 192,name = <<"Flow Table 0xc0">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 193,name = <<"Flow Table 0xc1">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 194,name = <<"Flow Table 0xc2">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 195,name = <<"Flow Table 0xc3">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 196,name = <<"Flow Table 0xc4">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 197,name = <<"Flow Table 0xc5">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 198,name = <<"Flow Table 0xc6">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 199,name = <<"Flow Table 0xc7">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 200,name = <<"Flow Table 0xc8">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 201,name = <<"Flow Table 0xc9">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 202,name = <<"Flow Table 0xca">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 203,name = <<"Flow Table 0xcb">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 204,name = <<"Flow Table 0xcc">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 205,name = <<"Flow Table 0xcd">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 206,name = <<"Flow Table 0xce">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 207,name = <<"Flow Table 0xcf">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 208,name = <<"Flow Table 0xd0">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 209,name = <<"Flow Table 0xd1">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 210,name = <<"Flow Table 0xd2">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 211,name = <<"Flow Table 0xd3">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 212,name = <<"Flow Table 0xd4">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 213,name = <<"Flow Table 0xd5">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 214,name = <<"Flow Table 0xd6">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 215,name = <<"Flow Table 0xd7">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 216,name = <<"Flow Table 0xd8">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 217,name = <<"Flow Table 0xd9">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 218,name = <<"Flow Table 0xda">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 219,name = <<"Flow Table 0xdb">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 220,name = <<"Flow Table 0xdc">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 221,name = <<"Flow Table 0xdd">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 222,name = <<"Flow Table 0xde">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 223,name = <<"Flow Table 0xdf">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 224,name = <<"Flow Table 0xe0">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 225,name = <<"Flow Table 0xe1">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 226,name = <<"Flow Table 0xe2">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 227,name = <<"Flow Table 0xe3">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 228,name = <<"Flow Table 0xe4">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 229,name = <<"Flow Table 0xe5">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 230,name = <<"Flow Table 0xe6">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 231,name = <<"Flow Table 0xe7">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 232,name = <<"Flow Table 0xe8">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 233,name = <<"Flow Table 0xe9">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 234,name = <<"Flow Table 0xea">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 235,name = <<"Flow Table 0xeb">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 236,name = <<"Flow Table 0xec">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 237,name = <<"Flow Table 0xed">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 238,name = <<"Flow Table 0xee">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 239,name = <<"Flow Table 0xef">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 240,name = <<"Flow Table 0xf0">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 241,name = <<"Flow Table 0xf1">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 242,name = <<"Flow Table 0xf2">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 243,name = <<"Flow Table 0xf3">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 244,name = <<"Flow Table 0xf4">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 245,name = <<"Flow Table 0xf5">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 246,name = <<"Flow Table 0xf6">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 247,name = <<"Flow Table 0xf7">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 248,name = <<"Flow Table 0xf8">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 249,name = <<"Flow Table 0xf9">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 250,name = <<"Flow Table 0xfa">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 251,name = <<"Flow Table 0xfb">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 252,name = <<"Flow Table 0xfc">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 253,name = <<"Flow Table 0xfd">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}, + #ofp_table_stats{ + table_id = 254,name = <<"Flow Table 0xfe">>, + match = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + wildcards = + [in_port,metadata,eth_dst,eth_src,eth_type,vlan_vid, + vlan_pcp,ip_dscp,ip_ecn,ip_proto,ipv4_src,ipv4_dst,tcp_src, + tcp_dst,udp_src,udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha,arp_tha,ipv6_src, + ipv6_dst,ipv6_flabel,icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc], + write_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + apply_actions = + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl, + push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group, + set_nw_ttl,dec_nw_ttl,set_field], + write_setfields = [],apply_setfields = [], + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>, + instructions = + [goto_table,write_metadata,write_actions,apply_actions, + clear_actions], + config = controller,max_entries = 16777216,active_count = 0, + lookup_count = 0,matched_count = 0}]}, + + #ofp_port_stats_request{flags = [],port_no = any}, + #ofp_port_stats_reply{ + flags = [], + stats = + [#ofp_port_stats{ + port_no = 7,rx_packets = 0,tx_packets = 4,rx_bytes = 0, + tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, + rx_errors = 0, + tx_errors = 0,rx_frame_err = 0,rx_over_err = 0, + rx_crc_err = 0,collisions = 0}, + #ofp_port_stats{ + port_no = 6,rx_packets = 4,tx_packets = 4,rx_bytes = 336, + tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, + rx_errors = 0, + tx_errors = 0,rx_frame_err = 0,rx_over_err = 0, + rx_crc_err = 0,collisions = 0}]}, + #ofp_group_features_stats_request{flags = []}, + #ofp_group_features_stats_reply{ + flags = [], + types = [all,select,indirect,ff], + capabilities = [select_weight,chaining], + max_groups = {16777216,16777216,16777216,16777216}, + actions = + {[output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field]}}, + #ofp_group_desc_stats_request{}, + #ofp_group_desc_stats_reply{ + flags = [], + stats = + [#ofp_group_desc_stats{ + type = all,group_id = 1, + buckets = + [#ofp_bucket{ + weight = 1,watch_port = 1,watch_group = 1, + actions = + [#ofp_action_output{ + port = 2, max_len = no_buffer}]}]}]}, + #ofp_queue_get_config_request{port = any}, + #ofp_queue_get_config_reply{port = any,queues = [ + #ofp_packet_queue{queue_id = 99, port_no = 77, + properties = [ + #ofp_queue_prop_min_rate{rate = 10}, + #ofp_queue_prop_max_rate{rate = 900} + ] + }, + #ofp_packet_queue{queue_id = 88, port_no = 77, + properties = [ + #ofp_queue_prop_min_rate{rate = 100}, + #ofp_queue_prop_max_rate{rate = 200} + ] + } + ]}, + #ofp_queue_stats_request{flags = [],port_no = any, + queue_id = all}, + #ofp_queue_stats_reply{ + flags = [], + stats = + [#ofp_queue_stats{ + port_no = 7,queue_id = 1,tx_bytes = 0,tx_packets = 0, + tx_errors = 0}, + #ofp_queue_stats{ + port_no = 6,queue_id = 1,tx_bytes = 0,tx_packets = 0, + tx_errors = 0}, + #ofp_queue_stats{ + port_no = 7,queue_id = 2,tx_bytes = 0,tx_packets = 0, + tx_errors = 0}]}, + #ofp_port_status{ + reason = add, + desc = #ofp_port{ + port_no = 7,hw_addr = <<"\362\v\244\320?p">>, + name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x9d\xe3\x83\xbc\xe3\x83\x88">>, % "my port" in japanese, utf-8 + config = [], + state = [live], + curr = ['100mb_fd',copper,autoneg], + advertised = [copper,autoneg], + supported = ['100mb_fd',copper,autoneg], + peer = ['100mb_fd',copper,autoneg], + curr_speed = 5000,max_speed = 5000} + }, + #ofp_flow_removed{ + cookie = <<0,0,0,0,0,0,0,0>>, + priority = 65535,reason = idle_timeout,table_id = 0, + duration_sec = 3,duration_nsec = 48825000,idle_timeout = 3, + hard_timeout = 0,packet_count = 1,byte_count = 86, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}}, + #ofp_error_msg_experimenter{ + exp_type = 60000, + experimenter = 999999, + data = <<"jikken data">> + }, + skip, + skip, + skip, + skip, + skip, + skip, + skip, + skip, + skip, + skip, + skip, + skip, + skip, + skip, + skip, + skip, + skip, + #ofp_packet_in{ + buffer_id = 16#f0000000,reason = no_match,table_id = 200, + match = #ofp_match{fields = AllFields}, + data = <<>>}, + #ofp_flow_mod{ + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + table_id = 1,command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = any,out_group = any,flags = [], + match = #ofp_match{fields = AllFields}, + instructions = []}, + #ofp_group_stats_request{flags = [],group_id = all}, + #ofp_group_stats_reply{ + flags = [], + stats = + [#ofp_group_stats{ + group_id = 1,ref_count = 2,packet_count = 123, + byte_count = 12345, + bucket_stats = + [#ofp_bucket_counter{ + packet_count = 234,byte_count = 2345}]}]} + ], + lists:foldl(fun x:do/2, {3, 0}, List). diff --git a/tests/packet_data_generator/src/x4.erl b/tests/packet_data_generator/src/x4.erl new file mode 100644 index 00000000..a749fbc8 --- /dev/null +++ b/tests/packet_data_generator/src/x4.erl @@ -0,0 +1,2657 @@ +%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +%% Copyright (C) 2013 YAMAMOTO Takashi +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +%% implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +-module(x4). +-export([x/0]). + +-include_lib("of_protocol/include/of_protocol.hrl"). +-include_lib("of_protocol/include/ofp_v4.hrl"). + +x() -> + AllFields = [ + #ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<5,6,7,8>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = in_phy_port, + has_mask = false, + value = <<1,2,3,4>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = metadata, + has_mask = false, + value = <<0,1,2,3,4,5,6,7>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_type, + has_mask = false, + value = <<8,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false,value = <<"\377\377\377\377\377\377">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = vlan_vid, + has_mask = false,value = <<999:13>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ip_dscp, + has_mask = false,value = <<9:6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ip_ecn, + has_mask = false,value = <<3:2>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ip_proto, + has_mask = false,value = <<99>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv4_src, + has_mask = false,value = <<1,2,3,4>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv4_dst, + has_mask = false,value = <<1,2,3,4>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = tcp_src, + has_mask = false,value = <<8080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = tcp_dst, + has_mask = false,value = <<18080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = udp_src, + has_mask = false,value = <<28080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = udp_dst, + has_mask = false,value = <<318080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = sctp_src, + has_mask = false,value = <<48080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = sctp_dst, + has_mask = false,value = <<518080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv4_type, + has_mask = false,value = <<100>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv4_code, + has_mask = false,value = <<101>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_op, + has_mask = false, + value = <<0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_spa, + has_mask = false, + value = <<10,0,0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tpa, + has_mask = false, + value = <<10,0,0,3>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_sha, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tha, + has_mask = false, + value = <<0,0,0,0,0,0>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_src, + has_mask = false, + % fe80::f00b:a4ff:fe48:28a5 + value = <<16#fe80000000000000f00ba4fffe4828a5:128>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_dst, + has_mask = false, + % fe80::f00b:a4ff:fe05:b7dc + value = <<16#fe80000000000000f00ba4fffe05b7dc:128>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_flabel, + has_mask = false, + value = <<16#84321:20>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv6_type, + has_mask = false, + value = <<200>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv6_code, + has_mask = false, + value = <<201>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_nd_target, + has_mask = false, + % fe80::a60:6eff:fe7f:74e7 + value = <<16#fe800000000000000a606efffe7f74e7:128>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_nd_sll, + has_mask = false, + value = <<666:48>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_nd_tll, + has_mask = false, + value = <<555:48>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = mpls_label, + has_mask = false, + value = <<16#98765:20>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = mpls_tc, + has_mask = false, + value = <<5:3>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = mpls_bos, + has_mask = false, + value = <<1:1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = pbb_isid, + has_mask = false, + value = <<16#abcdef:24>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = tunnel_id, + has_mask = false, + value = <<9,9,9,9,9,9,9,9>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_exthdr, + has_mask = false, + value = <<500:9>>, + mask = undefined}, + #ofp_field{ + class = {experimenter, onf},name = pbb_uca, + has_mask = false, + value = <<1:1>>, + mask = undefined}, + #ofp_field{ + class = nxm_1,name = 31, % tun_ipv4_src + has_mask = false, + value = <<1,2,3,4>>, + mask = undefined}, + #ofp_field{ + class = nxm_1,name = 32, % tun_ipv4_dst + has_mask = false, + value = <<1,2,3,4>>, + mask = undefined} + ], + List = [ + #ofp_desc_reply{flags = [], mfr_desc = <<"mfr">>, + hw_desc = <<"hw">>, sw_desc = <<"sw">>, + serial_num = <<"serial">>, + dp_desc = <<"dp">>}, + #ofp_packet_out{ + buffer_id = no_buffer,in_port = controller, + actions = + [#ofp_action_output{port = all,max_len = no_buffer}], + data = + <<242,11,164,208,63,112,242,11,164,125,248,234,8,0,69,0, + 0,84,248,26,0,0,255,1,175,139,10,0,0,1,10,0,0,2,8,0,2, + 8,247,96,0,0,49,214,2,0,0,0,0,0,171,141,45,49,0,0,0,0, + 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43,44,45,46,47,0,0,0,0,0,0, + 0,0>>}, + #ofp_flow_mod{ + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + table_id = 1,command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = any,out_group = any,flags = [], + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}, + instructions = + [#ofp_instruction_write_actions{ + actions = + [#ofp_action_set_field{ + field = #ofp_field{name = vlan_vid, + value = <<258:13>> }}, + #ofp_action_copy_ttl_out{}, + #ofp_action_copy_ttl_in{}, + #ofp_action_copy_ttl_in{}, + #ofp_action_pop_pbb{}, + #ofp_action_push_pbb{ethertype = 16#1234}, + #ofp_action_pop_mpls{ethertype= 16#9876}, + #ofp_action_push_mpls{ethertype = 16#8847}, + #ofp_action_pop_vlan{}, + #ofp_action_push_vlan{ethertype = 16#8100}, + #ofp_action_dec_mpls_ttl{}, + #ofp_action_set_mpls_ttl{mpls_ttl = 10}, + #ofp_action_dec_nw_ttl{}, + #ofp_action_set_nw_ttl{nw_ttl = 10}, + #ofp_action_experimenter{ + experimenter = 101, + data = <<0,1,2,3,4,5,6,7>>}, + #ofp_action_set_queue{queue_id = 3}, + #ofp_action_group{group_id = 99}, + #ofp_action_output{port = 6,max_len = no_buffer}]}, + #ofp_instruction_apply_actions{ + actions = + [#ofp_action_set_field{ + field = #ofp_field{name = eth_src, + value = <<1,2,3,4,5,6>> }}, + #ofp_action_set_field{ + field = #ofp_field{class = {experimenter, onf}, + name = pbb_uca, + value = <<1:1>> }}]}]}, + #ofp_flow_mod{ + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + table_id = 0,command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = any,out_group = any,flags = [], + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<0,0,0,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}, + instructions = + [#ofp_instruction_goto_table{table_id = 1}]}, + #ofp_packet_in{ + buffer_id = 2,reason = action,table_id = 1, + cookie = <<0,1,2,3,0,0,0,0>>, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<0,0,0,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_type, + has_mask = false, + value = <<8,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false,value = <<"\377\377\377\377\377\377">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_op, + has_mask = false, + value = <<0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_spa, + has_mask = false, + value = <<10,0,0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tpa, + has_mask = false, + value = <<10,0,0,3>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_sha, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tha, + has_mask = false, + value = <<0,0,0,0,0,0>>, + mask = undefined}]}, + data = + <<255,255,255,255,255,255,242,11,164,125,248,234,8,6,0, + 1,8,0,6,4,0,1,242,11,164,125,248,234,10,0,0,1,0,0,0,0, + 0,0,10,0,0,3>>}, + #ofp_features_request{}, + #ofp_features_reply{ + datapath_mac = <<8,96,110,127,116,231>>, + datapath_id = 0,n_buffers = 0,n_tables = 255, + auxiliary_id = 99, + capabilities = + [flow_stats,table_stats,port_stats,group_stats,queue_stats]}, + #ofp_set_config{flags = [],miss_send_len = 128}, + #ofp_get_config_request{}, + #ofp_get_config_reply{flags = [],miss_send_len = 128}, + #ofp_hello{elements = [{versionbitmap, [30, 10, 9, 3, 2, 1]}]}, + #ofp_flow_stats_request{ + flags = [],table_id = 0,out_port = any,out_group = any, + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + match = #ofp_match{fields = []}}, + #ofp_flow_stats_reply{ + flags = [], + body = + [#ofp_flow_stats{ + table_id = 0,duration_sec = 358, + duration_nsec = 115277000,priority = 65535, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 0,byte_count = 0, + match = #ofp_match{fields = []}, + instructions = []}, + #ofp_flow_stats{ + table_id = 0,duration_sec = 358, + duration_nsec = 115055000,priority = 65534, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 0,byte_count = 0, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_type, + has_mask = false, + value = <<8,6>>, + mask = undefined}]}, + instructions = + [#ofp_instruction_apply_actions{ + actions = + [#ofp_action_output{ + port = normal,max_len = 0}]}]}, + #ofp_flow_stats{ + table_id = 0,duration_sec = 316220, + duration_nsec = 511582000,priority = 123, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 3,byte_count = 238, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<0,0,0,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}, + instructions = + [#ofp_instruction_goto_table{table_id = 1}]}, + #ofp_flow_stats{ + table_id = 0,duration_sec = 313499, + duration_nsec = 980901000,priority = 0, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 1,byte_count = 98, + match = #ofp_match{fields = []}, + instructions = + [#ofp_instruction_write_actions{ + actions = + [#ofp_action_set_field{ + field = #ofp_field{name = vlan_vid, + value = <<258:13>> }}, + #ofp_action_copy_ttl_out{}, + #ofp_action_copy_ttl_in{}, + #ofp_action_copy_ttl_in{}, + #ofp_action_pop_pbb{}, + #ofp_action_push_pbb{ethertype = 16#1234}, + #ofp_action_pop_mpls{ethertype= 16#9876}, + #ofp_action_push_mpls{ethertype = 16#8847}, + #ofp_action_pop_vlan{}, + #ofp_action_push_vlan{ethertype = 16#8100}, + #ofp_action_dec_mpls_ttl{}, + #ofp_action_set_mpls_ttl{mpls_ttl = 10}, + #ofp_action_dec_nw_ttl{}, + #ofp_action_set_nw_ttl{nw_ttl = 10}, + #ofp_action_set_queue{queue_id = 3}, + #ofp_action_group{group_id = 99}, + #ofp_action_output{port = 6, + max_len = no_buffer}, + #ofp_action_experimenter{experimenter = 98765432, + data = <<"exp_data">>}, + #ofp_action_experimenter{experimenter = 8992, + data = <<"exp_data">>} + ]}, + #ofp_instruction_apply_actions{ + actions = + [#ofp_action_set_field{ + field = #ofp_field{name = eth_src, + value = <<1,2,3,4, + 5,6>> }}, + #ofp_action_set_field{ + field = #ofp_field{class = {experimenter, + onf}, + name = pbb_uca, + value = <<1:1>> }}]}, + #ofp_instruction_write_actions{ + actions = + [#ofp_action_output{ + port = controller, + max_len = no_buffer}]}]}]}, + #ofp_echo_request{ + data = <<"hoge">> + }, + #ofp_echo_reply{ + data = <<"hoge">> + }, + #ofp_error_msg{ + type = bad_action, + code = unsupported_order, + data = <<"fugafuga">> + }, + #ofp_experimenter{ + experimenter = 98765432, + exp_type = 123456789, + data = <<"nazo">> + }, + #ofp_barrier_request{}, + #ofp_barrier_reply{}, + #ofp_role_request{ + role = master, + generation_id = 16#f000f000f000f000}, + #ofp_role_reply{ + role = slave, + generation_id = 16#f000f000f000f000}, + + #ofp_group_mod{ + command = add,type = all,group_id = 1, + buckets = + [#ofp_bucket{ + weight = 1,watch_port = 1,watch_group = 1, + actions = + [#ofp_action_output{port = 2,max_len = no_buffer}]}]}, + #ofp_port_mod{port_no = 1, hw_addr = <<0,17,0,0,17,17>>, + config = [],mask = [], advertise = [fiber]}, + #ofp_table_mod{table_id = all}, + #ofp_desc_request{}, + #ofp_aggregate_stats_request{ + flags = [],table_id = all,out_port = any,out_group = any, + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + match = #ofp_match{fields = []}}, + #ofp_aggregate_stats_reply{flags = [],packet_count = 7, + byte_count = 574,flow_count = 6}, + #ofp_table_stats_request{}, + +#ofp_table_stats_reply{ + flags = [], + body = + [#ofp_table_stats{ + table_id = 0, + active_count = 4, lookup_count = 4,matched_count = 4}, + #ofp_table_stats{ + table_id = 1, + active_count = 4, lookup_count = 4,matched_count = 4}]}, + + #ofp_port_stats_request{flags = [],port_no = any}, + #ofp_port_stats_reply{ + flags = [], + body = + [#ofp_port_stats{ + port_no = 7,rx_packets = 0,tx_packets = 4,rx_bytes = 0, + tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, + rx_errors = 0, + tx_errors = 0,rx_frame_err = 0,rx_over_err = 0, + rx_crc_err = 0,collisions = 0}, + #ofp_port_stats{ + port_no = 6,rx_packets = 4,tx_packets = 4,rx_bytes = 336, + tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, + rx_errors = 0, + tx_errors = 0,rx_frame_err = 0,rx_over_err = 0, + rx_crc_err = 0,collisions = 0}]}, + #ofp_group_features_request{flags = []}, + #ofp_group_features_reply{ + flags = [], + types = [all,select,indirect,ff], + capabilities = [select_weight,chaining], + max_groups = {16777216,16777216,16777216,16777216}, + actions = + {[output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field]}}, + #ofp_group_desc_request{}, + #ofp_group_desc_reply{ + flags = [], + body = + [#ofp_group_desc_stats{ + type = all,group_id = 1, + buckets = + [#ofp_bucket{ + weight = 1,watch_port = 1,watch_group = 1, + actions = + [#ofp_action_output{ + port = 2, max_len = no_buffer}]}]}]}, + #ofp_queue_get_config_request{port = any}, + #ofp_queue_get_config_reply{port = any,queues = [ + #ofp_packet_queue{queue_id = 99, port_no = 77, + properties = [ + #ofp_queue_prop_min_rate{rate = 10}, + #ofp_queue_prop_max_rate{rate = 900}, + #ofp_queue_prop_experimenter{experimenter = 999, + data = <<>>} + ] + }, + #ofp_packet_queue{queue_id = 88, port_no = 77, + properties = [ + #ofp_queue_prop_min_rate{rate = 100}, + #ofp_queue_prop_max_rate{rate = 200}, + #ofp_queue_prop_experimenter{experimenter = 999, + data = <<1:8>>} + ] + }, + #ofp_packet_queue{queue_id = 77, port_no = 77, + properties = [ + #ofp_queue_prop_min_rate{rate = 200}, + #ofp_queue_prop_max_rate{rate = 400}, + #ofp_queue_prop_experimenter{experimenter = 999, + data = <<1:8,2:8>>} + ] + } + ]}, + #ofp_queue_stats_request{flags = [],port_no = any, + queue_id = all}, + #ofp_queue_stats_reply{ + flags = [], + body = + [#ofp_queue_stats{ + port_no = 7,queue_id = 1,tx_bytes = 0,tx_packets = 0, + tx_errors = 0}, + #ofp_queue_stats{ + port_no = 6,queue_id = 1,tx_bytes = 0,tx_packets = 0, + tx_errors = 0}, + #ofp_queue_stats{ + port_no = 7,queue_id = 2,tx_bytes = 0,tx_packets = 0, + tx_errors = 0}]}, + #ofp_port_status{ + reason = add, + desc = #ofp_port{ + port_no = 7,hw_addr = <<"\362\v\244\320?p">>, + name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x9d\xe3\x83\xbc\xe3\x83\x88">>, % "my port" in japanese, utf-8 + config = [], + state = [live], + curr = ['100mb_fd',copper,autoneg], + advertised = [copper,autoneg], + supported = ['100mb_fd',copper,autoneg], + peer = ['100mb_fd',copper,autoneg], + curr_speed = 5000,max_speed = 5000} + }, + #ofp_flow_removed{ + cookie = <<0,0,0,0,0,0,0,0>>, + priority = 65535,reason = idle_timeout,table_id = 0, + duration_sec = 3,duration_nsec = 48825000,idle_timeout = 3, + hard_timeout = 0,packet_count = 1,byte_count = 86, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}}, + #ofp_error_msg_experimenter{ + exp_type = 60000, + experimenter = 999999, + data = <<"jikken data">> + }, + #ofp_get_async_request{}, + #ofp_get_async_reply{ + packet_in_mask = {[no_match, invalid_ttl], [no_match]}, + port_status_mask = {[add, delete, modify], [add, delete]}, + flow_removed_mask = { + [idle_timeout, hard_timeout, delete, group_delete], + [idle_timeout, hard_timeout] + } + }, + #ofp_set_async{ + packet_in_mask = {[no_match, invalid_ttl], [no_match]}, + port_status_mask = {[add, delete, modify], [add, delete]}, + flow_removed_mask = { + [idle_timeout, hard_timeout, delete, group_delete], + [idle_timeout, hard_timeout] + } + }, + + #ofp_meter_mod{ + command = add, + flags = [pktps, burst, stats], + meter_id = 100, + bands = [ + #ofp_meter_band_drop{rate = 1000, burst_size = 10}, + #ofp_meter_band_dscp_remark{rate = 1000, burst_size = 10, + prec_level = 1}, + #ofp_meter_band_experimenter{rate = 1000, burst_size = 10, + experimenter = 999} + ] + }, + + #ofp_flow_mod{ + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + table_id = 1,command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = any,out_group = any,flags = [], + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}, + instructions = + [#ofp_instruction_meter{meter_id = 1}, + #ofp_instruction_write_actions{ + actions = + [#ofp_action_output{port = 6,max_len = no_buffer}]}]}, + + #ofp_meter_config_request{meter_id = all}, + #ofp_meter_config_reply{ + body = + [#ofp_meter_config{ + flags = [pktps,burst,stats], + meter_id = 100, + bands = + [#ofp_meter_band_drop{ + type = drop,rate = 1000,burst_size = 10}]}]}, + + #ofp_meter_stats_request{meter_id = all}, + #ofp_meter_stats_reply{ + body = + [#ofp_meter_stats{ + meter_id = 100,flow_count = 0,packet_in_count = 0, + byte_in_count = 0,duration_sec = 0,duration_nsec = 480000, + band_stats = + [#ofp_meter_band_stats{ + packet_band_count = 0,byte_band_count = 0}]}]}, + + #ofp_meter_features_request{}, + #ofp_meter_features_reply{max_meter = 16777216, + band_types = [drop,dscp_remark,experimenter], + capabilities = [kbps,pktps,burst,stats], + max_bands = 255,max_color = 0}, + #ofp_port_desc_request{flags = []}, + #ofp_port_desc_reply{flags = [], + body = [#ofp_port{port_no = 7,hw_addr = <<"\362\v\244\320?p">>, + name = <<"Port7">>,config = [], + state = [live], + curr = ['100mb_fd',copper,autoneg], + advertised = [copper,autoneg], + supported = ['100mb_fd',copper,autoneg], + peer = ['100mb_fd',copper,autoneg], + curr_speed = 5000,max_speed = 5000}, + #ofp_port{port_no = 6,hw_addr = <<"\362\v\244}\370\352">>, + name = <<"Port6">>,config = [], + state = [live], + curr = ['100mb_fd',copper,autoneg], + advertised = [copper,autoneg], + supported = ['100mb_fd',copper,autoneg], + peer = ['100mb_fd',copper,autoneg], + curr_speed = 5000,max_speed = 5000}]}, + + + #ofp_table_features_request{ + flags = [more], + body = + [#ofp_table_features{ + table_id = 0,name = <<"Flow Table 0x00">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 32,33,34,35,36,37,38,39,40,41,42,43,44,45, + 46,47,48,49,50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,67,68,69,70,71,72,73, + 74,75,76,77,78,79,80,81,82,83,84,85,86,87, + 88,89,90,91,92,93,94,95,96,97,98,99,100, + 101,102,103,104,105,106,107,108,109,110, + 111,112,113,114,115,116,117,118,119,120, + 121,122,123,124,125,126,127,128,129,130, + 131,132,133,134,135,136,137,138,139,140, + 141,142,143,144,145,146,147,148,149,150, + 151,152,153,154,155,156,157,158,159,160, + 161,162,163,164,165,166,167,168,169,170, + 171,172,173,174,175,176,177,178,179,180, + 181,182,183,184,185,186,187,188,189,190, + 191,192,193,194,195,196,197,198,199,200, + 201,202,203,204,205,206,207,208,209,210, + 211,212,213,214,215,216,217,218,219,220, + 221,222,223,224,225,226,227,228,229,230, + 231,232,233,234,235,236,237,238,239,240, + 241,242,243,244,245,246,247,248,249,250, + 251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, + #ofp_table_features{ + table_id = 1,name = <<"Flow Table 0x01">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,39,40,41,42,43,44,45,46, + 47,48,49,50,51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,66,67,68,69,70,71,72,73,74, + 75,76,77,78,79,80,81,82,83,84,85,86,87,88, + 89,90,91,92,93,94,95,96,97,98,99,100,101, + 102,103,104,105,106,107,108,109,110,111, + 112,113,114,115,116,117,118,119,120,121, + 122,123,124,125,126,127,128,129,130,131, + 132,133,134,135,136,137,138,139,140,141, + 142,143,144,145,146,147,148,149,150,151, + 152,153,154,155,156,157,158,159,160,161, + 162,163,164,165,166,167,168,169,170,171, + 172,173,174,175,176,177,178,179,180,181, + 182,183,184,185,186,187,188,189,190,191, + 192,193,194,195,196,197,198,199,200,201, + 202,203,204,205,206,207,208,209,210,211, + 212,213,214,215,216,217,218,219,220,221, + 222,223,224,225,226,227,228,229,230,231, + 232,233,234,235,236,237,238,239,240,241, + 242,243,244,245,246,247,248,249,250,251, + 252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 2,name = <<"Flow Table 0x02">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,39,40,41,42,43,44,45,46, + 47,48,49,50,51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,66,67,68,69,70,71,72,73,74, + 75,76,77,78,79,80,81,82,83,84,85,86,87,88, + 89,90,91,92,93,94,95,96,97,98,99,100,101, + 102,103,104,105,106,107,108,109,110,111, + 112,113,114,115,116,117,118,119,120,121, + 122,123,124,125,126,127,128,129,130,131, + 132,133,134,135,136,137,138,139,140,141, + 142,143,144,145,146,147,148,149,150,151, + 152,153,154,155,156,157,158,159,160,161, + 162,163,164,165,166,167,168,169,170,171, + 172,173,174,175,176,177,178,179,180,181, + 182,183,184,185,186,187,188,189,190,191, + 192,193,194,195,196,197,198,199,200,201, + 202,203,204,205,206,207,208,209,210,211, + 212,213,214,215,216,217,218,219,220,221, + 222,223,224,225,226,227,228,229,230,231, + 232,233,234,235,236,237,238,239,240,241, + 242,243,244,245,246,247,248,249,250,251, + 252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 3,name = <<"Flow Table 0x03">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43,44,45,46,47, + 48,49,50,51,52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,66,67,68,69,70,71,72,73,74,75, + 76,77,78,79,80,81,82,83,84,85,86,87,88,89, + 90,91,92,93,94,95,96,97,98,99,100,101,102, + 103,104,105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120,121,122, + 123,124,125,126,127,128,129,130,131,132, + 133,134,135,136,137,138,139,140,141,142, + 143,144,145,146,147,148,149,150,151,152, + 153,154,155,156,157,158,159,160,161,162, + 163,164,165,166,167,168,169,170,171,172, + 173,174,175,176,177,178,179,180,181,182, + 183,184,185,186,187,188,189,190,191,192, + 193,194,195,196,197,198,199,200,201,202, + 203,204,205,206,207,208,209,210,211,212, + 213,214,215,216,217,218,219,220,221,222, + 223,224,225,226,227,228,229,230,231,232, + 233,234,235,236,237,238,239,240,241,242, + 243,244,245,246,247,248,249,250,251,252, + 253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 4,name = <<"Flow Table 0x04">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,40,41,42,43,44,45,46,47,48, + 49,50,51,52,53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,67,68,69,70,71,72,73,74,75,76, + 77,78,79,80,81,82,83,84,85,86,87,88,89,90, + 91,92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 5,name = <<"Flow Table 0x05">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,40,41,42,43,44,45,46,47,48, + 49,50,51,52,53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,67,68,69,70,71,72,73,74,75,76, + 77,78,79,80,81,82,83,84,85,86,87,88,89,90, + 91,92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 6,name = <<"Flow Table 0x06">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,42,43,44,45,46,47,48,49, + 50,51,52,53,54,55,56,57,58,59,60,61,62,63, + 64,65,66,67,68,69,70,71,72,73,74,75,76,77, + 78,79,80,81,82,83,84,85,86,87,88,89,90,91, + 92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 7,name = <<"Flow Table 0x07">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32,33,34,35,36, + 37,38,39,40,41,42,43,44,45,46,47,48,49,50, + 51,52,53,54,55,56,57,58,59,60,61,62,63,64, + 65,66,67,68,69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,86,87,88,89,90,91,92, + 93,94,95,96,97,98,99,100,101,102,103,104, + 105,106,107,108,109,110,111,112,113,114, + 115,116,117,118,119,120,121,122,123,124, + 125,126,127,128,129,130,131,132,133,134, + 135,136,137,138,139,140,141,142,143,144, + 145,146,147,148,149,150,151,152,153,154, + 155,156,157,158,159,160,161,162,163,164, + 165,166,167,168,169,170,171,172,173,174, + 175,176,177,178,179,180,181,182,183,184, + 185,186,187,188,189,190,191,192,193,194, + 195,196,197,198,199,200,201,202,203,204, + 205,206,207,208,209,210,211,212,213,214, + 215,216,217,218,219,220,221,222,223,224, + 225,226,227,228,229,230,231,232,233,234, + 235,236,237,238,239,240,241,242,243,244, + 245,246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 8,name = <<"Flow Table 0x08">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [9,10,11,12,13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32,33,34,35,36, + 37,38,39,40,41,42,43,44,45,46,47,48,49,50, + 51,52,53,54,55,56,57,58,59,60,61,62,63,64, + 65,66,67,68,69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,86,87,88,89,90,91,92, + 93,94,95,96,97,98,99,100,101,102,103,104, + 105,106,107,108,109,110,111,112,113,114, + 115,116,117,118,119,120,121,122,123,124, + 125,126,127,128,129,130,131,132,133,134, + 135,136,137,138,139,140,141,142,143,144, + 145,146,147,148,149,150,151,152,153,154, + 155,156,157,158,159,160,161,162,163,164, + 165,166,167,168,169,170,171,172,173,174, + 175,176,177,178,179,180,181,182,183,184, + 185,186,187,188,189,190,191,192,193,194, + 195,196,197,198,199,200,201,202,203,204, + 205,206,207,208,209,210,211,212,213,214, + 215,216,217,218,219,220,221,222,223,224, + 225,226,227,228,229,230,231,232,233,234, + 235,236,237,238,239,240,241,242,243,244, + 245,246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 9,name = <<"Flow Table 0x09">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [10,11,12,13,14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33,34,35,36,37, + 38,39,40,41,42,43,44,45,46,47,48,49,50,51, + 52,53,54,55,56,57,58,59,60,61,62,63,64,65, + 66,67,68,69,70,71,72,73,74,75,76,77,78,79, + 80,81,82,83,84,85,86,87,88,89,90,91,92,93, + 94,95,96,97,98,99,100,101,102,103,104,105, + 106,107,108,109,110,111,112,113,114,115, + 116,117,118,119,120,121,122,123,124,125, + 126,127,128,129,130,131,132,133,134,135, + 136,137,138,139,140,141,142,143,144,145, + 146,147,148,149,150,151,152,153,154,155, + 156,157,158,159,160,161,162,163,164,165, + 166,167,168,169,170,171,172,173,174,175, + 176,177,178,179,180,181,182,183,184,185, + 186,187,188,189,190,191,192,193,194,195, + 196,197,198,199,200,201,202,203,204,205, + 206,207,208,209,210,211,212,213,214,215, + 216,217,218,219,220,221,222,223,224,225, + 226,227,228,229,230,231,232,233,234,235, + 236,237,238,239,240,241,242,243,244,245, + 246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}]}, + #ofp_table_features_reply{ + flags = [more], + body = + [#ofp_table_features{ + table_id = 0,name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x86\xe3\x83\xbc\xe3\x83\x96\xe3\x83\xab">>, % "my table" in japanese, utf-8 + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 32,33,34,35,36,37,38,39,40,41,42,43,44,45, + 46,47,48,49,50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,67,68,69,70,71,72,73, + 74,75,76,77,78,79,80,81,82,83,84,85,86,87, + 88,89,90,91,92,93,94,95,96,97,98,99,100, + 101,102,103,104,105,106,107,108,109,110, + 111,112,113,114,115,116,117,118,119,120, + 121,122,123,124,125,126,127,128,129,130, + 131,132,133,134,135,136,137,138,139,140, + 141,142,143,144,145,146,147,148,149,150, + 151,152,153,154,155,156,157,158,159,160, + 161,162,163,164,165,166,167,168,169,170, + 171,172,173,174,175,176,177,178,179,180, + 181,182,183,184,185,186,187,188,189,190, + 191,192,193,194,195,196,197,198,199,200, + 201,202,203,204,205,206,207,208,209,210, + 211,212,213,214,215,216,217,218,219,220, + 221,222,223,224,225,226,227,228,229,230, + 231,232,233,234,235,236,237,238,239,240, + 241,242,243,244,245,246,247,248,249,250, + 251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, + #ofp_table_features{ + table_id = 1,name = <<"Flow Table 0x01">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,39,40,41,42,43,44,45,46, + 47,48,49,50,51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,66,67,68,69,70,71,72,73,74, + 75,76,77,78,79,80,81,82,83,84,85,86,87,88, + 89,90,91,92,93,94,95,96,97,98,99,100,101, + 102,103,104,105,106,107,108,109,110,111, + 112,113,114,115,116,117,118,119,120,121, + 122,123,124,125,126,127,128,129,130,131, + 132,133,134,135,136,137,138,139,140,141, + 142,143,144,145,146,147,148,149,150,151, + 152,153,154,155,156,157,158,159,160,161, + 162,163,164,165,166,167,168,169,170,171, + 172,173,174,175,176,177,178,179,180,181, + 182,183,184,185,186,187,188,189,190,191, + 192,193,194,195,196,197,198,199,200,201, + 202,203,204,205,206,207,208,209,210,211, + 212,213,214,215,216,217,218,219,220,221, + 222,223,224,225,226,227,228,229,230,231, + 232,233,234,235,236,237,238,239,240,241, + 242,243,244,245,246,247,248,249,250,251, + 252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 2,name = <<"Flow Table 0x02">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,39,40,41,42,43,44,45,46, + 47,48,49,50,51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,66,67,68,69,70,71,72,73,74, + 75,76,77,78,79,80,81,82,83,84,85,86,87,88, + 89,90,91,92,93,94,95,96,97,98,99,100,101, + 102,103,104,105,106,107,108,109,110,111, + 112,113,114,115,116,117,118,119,120,121, + 122,123,124,125,126,127,128,129,130,131, + 132,133,134,135,136,137,138,139,140,141, + 142,143,144,145,146,147,148,149,150,151, + 152,153,154,155,156,157,158,159,160,161, + 162,163,164,165,166,167,168,169,170,171, + 172,173,174,175,176,177,178,179,180,181, + 182,183,184,185,186,187,188,189,190,191, + 192,193,194,195,196,197,198,199,200,201, + 202,203,204,205,206,207,208,209,210,211, + 212,213,214,215,216,217,218,219,220,221, + 222,223,224,225,226,227,228,229,230,231, + 232,233,234,235,236,237,238,239,240,241, + 242,243,244,245,246,247,248,249,250,251, + 252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 3,name = <<"Flow Table 0x03">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43,44,45,46,47, + 48,49,50,51,52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,66,67,68,69,70,71,72,73,74,75, + 76,77,78,79,80,81,82,83,84,85,86,87,88,89, + 90,91,92,93,94,95,96,97,98,99,100,101,102, + 103,104,105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120,121,122, + 123,124,125,126,127,128,129,130,131,132, + 133,134,135,136,137,138,139,140,141,142, + 143,144,145,146,147,148,149,150,151,152, + 153,154,155,156,157,158,159,160,161,162, + 163,164,165,166,167,168,169,170,171,172, + 173,174,175,176,177,178,179,180,181,182, + 183,184,185,186,187,188,189,190,191,192, + 193,194,195,196,197,198,199,200,201,202, + 203,204,205,206,207,208,209,210,211,212, + 213,214,215,216,217,218,219,220,221,222, + 223,224,225,226,227,228,229,230,231,232, + 233,234,235,236,237,238,239,240,241,242, + 243,244,245,246,247,248,249,250,251,252, + 253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 4,name = <<"Flow Table 0x04">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,40,41,42,43,44,45,46,47,48, + 49,50,51,52,53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,67,68,69,70,71,72,73,74,75,76, + 77,78,79,80,81,82,83,84,85,86,87,88,89,90, + 91,92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 5,name = <<"Flow Table 0x05">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,40,41,42,43,44,45,46,47,48, + 49,50,51,52,53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,67,68,69,70,71,72,73,74,75,76, + 77,78,79,80,81,82,83,84,85,86,87,88,89,90, + 91,92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 6,name = <<"Flow Table 0x06">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,42,43,44,45,46,47,48,49, + 50,51,52,53,54,55,56,57,58,59,60,61,62,63, + 64,65,66,67,68,69,70,71,72,73,74,75,76,77, + 78,79,80,81,82,83,84,85,86,87,88,89,90,91, + 92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 7,name = <<"Flow Table 0x07">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32,33,34,35,36, + 37,38,39,40,41,42,43,44,45,46,47,48,49,50, + 51,52,53,54,55,56,57,58,59,60,61,62,63,64, + 65,66,67,68,69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,86,87,88,89,90,91,92, + 93,94,95,96,97,98,99,100,101,102,103,104, + 105,106,107,108,109,110,111,112,113,114, + 115,116,117,118,119,120,121,122,123,124, + 125,126,127,128,129,130,131,132,133,134, + 135,136,137,138,139,140,141,142,143,144, + 145,146,147,148,149,150,151,152,153,154, + 155,156,157,158,159,160,161,162,163,164, + 165,166,167,168,169,170,171,172,173,174, + 175,176,177,178,179,180,181,182,183,184, + 185,186,187,188,189,190,191,192,193,194, + 195,196,197,198,199,200,201,202,203,204, + 205,206,207,208,209,210,211,212,213,214, + 215,216,217,218,219,220,221,222,223,224, + 225,226,227,228,229,230,231,232,233,234, + 235,236,237,238,239,240,241,242,243,244, + 245,246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 8,name = <<"Flow Table 0x08">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [9,10,11,12,13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32,33,34,35,36, + 37,38,39,40,41,42,43,44,45,46,47,48,49,50, + 51,52,53,54,55,56,57,58,59,60,61,62,63,64, + 65,66,67,68,69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,86,87,88,89,90,91,92, + 93,94,95,96,97,98,99,100,101,102,103,104, + 105,106,107,108,109,110,111,112,113,114, + 115,116,117,118,119,120,121,122,123,124, + 125,126,127,128,129,130,131,132,133,134, + 135,136,137,138,139,140,141,142,143,144, + 145,146,147,148,149,150,151,152,153,154, + 155,156,157,158,159,160,161,162,163,164, + 165,166,167,168,169,170,171,172,173,174, + 175,176,177,178,179,180,181,182,183,184, + 185,186,187,188,189,190,191,192,193,194, + 195,196,197,198,199,200,201,202,203,204, + 205,206,207,208,209,210,211,212,213,214, + 215,216,217,218,219,220,221,222,223,224, + 225,226,227,228,229,230,231,232,233,234, + 235,236,237,238,239,240,241,242,243,244, + 245,246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 9,name = <<"Flow Table 0x09">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [10,11,12,13,14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33,34,35,36,37, + 38,39,40,41,42,43,44,45,46,47,48,49,50,51, + 52,53,54,55,56,57,58,59,60,61,62,63,64,65, + 66,67,68,69,70,71,72,73,74,75,76,77,78,79, + 80,81,82,83,84,85,86,87,88,89,90,91,92,93, + 94,95,96,97,98,99,100,101,102,103,104,105, + 106,107,108,109,110,111,112,113,114,115, + 116,117,118,119,120,121,122,123,124,125, + 126,127,128,129,130,131,132,133,134,135, + 136,137,138,139,140,141,142,143,144,145, + 146,147,148,149,150,151,152,153,154,155, + 156,157,158,159,160,161,162,163,164,165, + 166,167,168,169,170,171,172,173,174,175, + 176,177,178,179,180,181,182,183,184,185, + 186,187,188,189,190,191,192,193,194,195, + 196,197,198,199,200,201,202,203,204,205, + 206,207,208,209,210,211,212,213,214,215, + 216,217,218,219,220,221,222,223,224,225, + 226,227,228,229,230,231,232,233,234,235, + 236,237,238,239,240,241,242,243,244,245, + 246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}]}, + #ofp_group_stats_request{flags = [],group_id = all}, + #ofp_group_stats_reply{ + flags = [], + body = + [#ofp_group_stats{ + group_id = 1,ref_count = 2,packet_count = 123, + byte_count = 12345,duration_sec = 9, + duration_nsec = 609036000, + bucket_stats = + [#ofp_bucket_counter{ + packet_count = 234,byte_count = 2345}]}]}, + #ofp_packet_in{ + buffer_id = 16#f0000000,reason = no_match,table_id = 200, + cookie = <<0,1,2,3,0,0,0,0>>, + match = #ofp_match{fields = AllFields}, + data = <<>>}, + #ofp_flow_mod{ + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + table_id = 1,command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = any,out_group = any,flags = [], + match = #ofp_match{fields = AllFields}, + instructions = []}, + #ofp_experimenter_request{ + experimenter = 16#deadbeaf, + exp_type = 16#cafe8888, + data = <<"hogehoge">> + }, + #ofp_experimenter_reply{ + experimenter = 16#deadbeaf, + exp_type = 16#cafe7777, + data = <<"testdata99999999">> + }, + #onf_flow_monitor_request{ + flags = [], + body = [ + #onf_flow_monitor{ + id = 100000000, + flags = [initial, add, delete, modify], + out_port = 22, + table_id = 33, + fields = [] + }, + #onf_flow_monitor{ + id = 999, + flags = [initial, actions, own], + out_port = any, + table_id = all, + fields = AllFields + } + ] + } + ], + lists:foldl(fun x:do/2, {4, 0}, List). diff --git a/tests/packet_data_generator/src/x5.erl b/tests/packet_data_generator/src/x5.erl new file mode 100644 index 00000000..c9fa429b --- /dev/null +++ b/tests/packet_data_generator/src/x5.erl @@ -0,0 +1,3024 @@ +%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +%% Copyright (C) 2013 YAMAMOTO Takashi +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +%% implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +-module(x5). +-export([x/0]). + +-include_lib("of_protocol/include/of_protocol.hrl"). +-include_lib("of_protocol/include/ofp_v5.hrl"). + +x() -> + AllFields = [ + #ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<5,6,7,8>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = in_phy_port, + has_mask = false, + value = <<1,2,3,4>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = metadata, + has_mask = false, + value = <<0,1,2,3,4,5,6,7>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_type, + has_mask = false, + value = <<8,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false,value = <<"\377\377\377\377\377\377">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = vlan_vid, + has_mask = false,value = <<999:13>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ip_dscp, + has_mask = false,value = <<9:6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ip_ecn, + has_mask = false,value = <<3:2>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ip_proto, + has_mask = false,value = <<99>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv4_src, + has_mask = false,value = <<1,2,3,4>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv4_dst, + has_mask = false,value = <<1,2,3,4>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = tcp_src, + has_mask = false,value = <<8080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = tcp_dst, + has_mask = false,value = <<18080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = udp_src, + has_mask = false,value = <<28080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = udp_dst, + has_mask = false,value = <<318080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = sctp_src, + has_mask = false,value = <<48080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = sctp_dst, + has_mask = false,value = <<518080:16>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv4_type, + has_mask = false,value = <<100>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv4_code, + has_mask = false,value = <<101>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_op, + has_mask = false, + value = <<0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_spa, + has_mask = false, + value = <<10,0,0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tpa, + has_mask = false, + value = <<10,0,0,3>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_sha, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tha, + has_mask = false, + value = <<0,0,0,0,0,0>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_src, + has_mask = false, + % fe80::f00b:a4ff:fe48:28a5 + value = <<16#fe80000000000000f00ba4fffe4828a5:128>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_dst, + has_mask = false, + % fe80::f00b:a4ff:fe05:b7dc + value = <<16#fe80000000000000f00ba4fffe05b7dc:128>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_flabel, + has_mask = false, + value = <<16#84321:20>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv6_type, + has_mask = false, + value = <<200>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = icmpv6_code, + has_mask = false, + value = <<201>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_nd_target, + has_mask = false, + % fe80::a60:6eff:fe7f:74e7 + value = <<16#fe800000000000000a606efffe7f74e7:128>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_nd_sll, + has_mask = false, + value = <<666:48>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_nd_tll, + has_mask = false, + value = <<555:48>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = mpls_label, + has_mask = false, + value = <<16#98765:20>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = mpls_tc, + has_mask = false, + value = <<5:3>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = mpls_bos, + has_mask = false, + value = <<1:1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = pbb_isid, + has_mask = false, + value = <<16#abcdef:24>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = tunnel_id, + has_mask = false, + value = <<9,9,9,9,9,9,9,9>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = ipv6_exthdr, + has_mask = false, + value = <<500:9>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = pbb_uca, + has_mask = false, + value = <<1:1>>, + mask = undefined} + ], + List = [ + #ofp_desc_reply{flags = [], mfr_desc = <<"mfr">>, + hw_desc = <<"hw">>, sw_desc = <<"sw">>, + serial_num = <<"serial">>, + dp_desc = <<"dp">>}, + #ofp_packet_out{ + buffer_id = no_buffer,in_port = controller, + actions = + [#ofp_action_output{port = all,max_len = no_buffer}], + data = + <<242,11,164,208,63,112,242,11,164,125,248,234,8,0,69,0, + 0,84,248,26,0,0,255,1,175,139,10,0,0,1,10,0,0,2,8,0,2, + 8,247,96,0,0,49,214,2,0,0,0,0,0,171,141,45,49,0,0,0,0, + 16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43,44,45,46,47,0,0,0,0,0,0, + 0,0>>}, + #ofp_flow_mod{ + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + table_id = 1,command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = any,out_group = any,flags = [], + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}, + instructions = + [#ofp_instruction_write_actions{ + actions = + [#ofp_action_set_field{ + field = #ofp_field{name = vlan_vid, + value = <<258:13>> }}, + #ofp_action_copy_ttl_out{}, + #ofp_action_copy_ttl_in{}, + #ofp_action_copy_ttl_in{}, + #ofp_action_pop_pbb{}, + #ofp_action_push_pbb{ethertype = 16#1234}, + #ofp_action_pop_mpls{ethertype= 16#9876}, + #ofp_action_push_mpls{ethertype = 16#8847}, + #ofp_action_pop_vlan{}, + #ofp_action_push_vlan{ethertype = 16#8100}, + #ofp_action_dec_mpls_ttl{}, + #ofp_action_set_mpls_ttl{mpls_ttl = 10}, + #ofp_action_dec_nw_ttl{}, + #ofp_action_set_nw_ttl{nw_ttl = 10}, + #ofp_action_experimenter{ + experimenter = 101, + data = <<0,1,2,3,4,5,6,7>>}, + #ofp_action_set_queue{queue_id = 3}, + #ofp_action_group{group_id = 99}, + #ofp_action_output{port = 6,max_len = no_buffer}]}, + #ofp_instruction_apply_actions{ + actions = + [#ofp_action_set_field{ + field = #ofp_field{name = eth_src, + value = <<1,2,3,4,5,6>> }}, + #ofp_action_set_field{ + field = #ofp_field{name = pbb_uca, + value = <<1:1>> }}]}]}, + #ofp_flow_mod{ + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + table_id = 0,command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = any,out_group = any,flags = [], + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<0,0,0,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}, + instructions = + [#ofp_instruction_goto_table{table_id = 1}]}, + #ofp_packet_in{ + buffer_id = 2,reason = action_set,table_id = 1, + cookie = <<0,1,2,3,0,0,0,0>>, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<0,0,0,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_type, + has_mask = false, + value = <<8,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false,value = <<"\377\377\377\377\377\377">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_op, + has_mask = false, + value = <<0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_spa, + has_mask = false, + value = <<10,0,0,1>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tpa, + has_mask = false, + value = <<10,0,0,3>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_sha, + has_mask = false,value = <<"\362\v\244}\370\352">>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = arp_tha, + has_mask = false, + value = <<0,0,0,0,0,0>>, + mask = undefined}]}, + data = + <<255,255,255,255,255,255,242,11,164,125,248,234,8,6,0, + 1,8,0,6,4,0,1,242,11,164,125,248,234,10,0,0,1,0,0,0,0, + 0,0,10,0,0,3>>}, + #ofp_features_request{}, + #ofp_features_reply{ + datapath_mac = <<8,96,110,127,116,231>>, + datapath_id = 0,n_buffers = 0,n_tables = 255, + auxiliary_id = 99, + capabilities = + [flow_stats,table_stats,port_stats,group_stats,queue_stats]}, + #ofp_set_config{flags = [],miss_send_len = 128}, + #ofp_get_config_request{}, + #ofp_get_config_reply{flags = [],miss_send_len = 128}, + #ofp_hello{elements = [{versionbitmap, [30, 10, 9, 3, 2, 1]}]}, + #ofp_flow_stats_request{ + flags = [],table_id = 0,out_port = any,out_group = any, + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + match = #ofp_match{fields = []}}, + #ofp_flow_stats_reply{ + flags = [], + body = + [#ofp_flow_stats{ + table_id = 0,duration_sec = 358, + duration_nsec = 115277000,priority = 65535, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 0,byte_count = 0, + match = #ofp_match{fields = []}, + instructions = []}, + #ofp_flow_stats{ + table_id = 0,duration_sec = 358, + duration_nsec = 115055000,priority = 65534, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 0,byte_count = 0, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_type, + has_mask = false, + value = <<8,6>>, + mask = undefined}]}, + instructions = + [#ofp_instruction_apply_actions{ + actions = + [#ofp_action_output{ + port = normal,max_len = 0}]}]}, + #ofp_flow_stats{ + table_id = 0,duration_sec = 316220, + duration_nsec = 511582000,priority = 123, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 3,byte_count = 238, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = in_port, + has_mask = false, + value = <<0,0,0,6>>, + mask = undefined}, + #ofp_field{ + class = openflow_basic,name = eth_src, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}, + instructions = + [#ofp_instruction_goto_table{table_id = 1}]}, + #ofp_flow_stats{ + table_id = 0,duration_sec = 313499, + duration_nsec = 980901000,priority = 0, + idle_timeout = 0,hard_timeout = 0, + cookie = <<0,0,0,0,0,0,0,0>>, + packet_count = 1,byte_count = 98, + match = #ofp_match{fields = []}, + instructions = + [#ofp_instruction_write_actions{ + actions = + [#ofp_action_set_field{ + field = #ofp_field{name = vlan_vid, + value = <<258:13>> }}, + #ofp_action_copy_ttl_out{}, + #ofp_action_copy_ttl_in{}, + #ofp_action_copy_ttl_in{}, + #ofp_action_pop_pbb{}, + #ofp_action_push_pbb{ethertype = 16#1234}, + #ofp_action_pop_mpls{ethertype= 16#9876}, + #ofp_action_push_mpls{ethertype = 16#8847}, + #ofp_action_pop_vlan{}, + #ofp_action_push_vlan{ethertype = 16#8100}, + #ofp_action_dec_mpls_ttl{}, + #ofp_action_set_mpls_ttl{mpls_ttl = 10}, + #ofp_action_dec_nw_ttl{}, + #ofp_action_set_nw_ttl{nw_ttl = 10}, + #ofp_action_set_queue{queue_id = 3}, + #ofp_action_group{group_id = 99}, + #ofp_action_output{port = 6, + max_len = no_buffer}, + #ofp_action_experimenter{experimenter = 98765432, + data = <<"exp_data">>}, + #ofp_action_experimenter{experimenter = 8992, + data = <<"exp_data">>} + ]}, + #ofp_instruction_apply_actions{ + actions = + [#ofp_action_set_field{ + field = #ofp_field{name = eth_src, + value = <<1,2,3,4, + 5,6>> }}, + #ofp_action_set_field{ + field = #ofp_field{name = pbb_uca, + value = <<1:1>> }}]}, + #ofp_instruction_write_actions{ + actions = + [#ofp_action_output{ + port = controller, + max_len = no_buffer}]}]}]}, + #ofp_echo_request{ + data = <<"hoge">> + }, + #ofp_echo_reply{ + data = <<"hoge">> + }, + #ofp_error_msg{ + type = bad_action, + code = unsupported_order, + data = <<"fugafuga">> + }, + #ofp_experimenter{ + experimenter = 98765432, + exp_type = 123456789, + data = <<"nazo">> + }, + #ofp_barrier_request{}, + #ofp_barrier_reply{}, + #ofp_role_request{ + role = master, + generation_id = 16#f000f000f000f000}, + #ofp_role_reply{ + role = slave, + generation_id = 16#f000f000f000f000}, + + #ofp_group_mod{ + command = add,type = all,group_id = 1, + buckets = + [#ofp_bucket{ + weight = 1,watch_port = 1,watch_group = 1, + actions = + [#ofp_action_output{port = 2,max_len = no_buffer}]}]}, + #ofp_port_mod{port_no = 1, hw_addr = <<0,17,0,0,17,17>>, + config = [],mask = [], + properties = + [#ofp_port_mod_prop_ethernet{advertise = [fiber]}, + #ofp_port_mod_prop_optical{ + configure = [rx_tune, tx_tune], + freq_lmda = 1500, + fl_offset = 2000, + grid_span = 3000, + tx_pwr = 300}, + #ofp_port_mod_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_port_mod_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_port_mod_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, + #ofp_table_mod{ + properties = + [#ofp_table_mod_prop_eviction{flags = []}, + #ofp_table_mod_prop_vacancy{ + vacancy = 0, + vacancy_down = 0, + vacancy_up = 0}, + #ofp_table_mod_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_table_mod_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_table_mod_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}], + table_id = all}, + #ofp_desc_request{}, + #ofp_aggregate_stats_request{ + flags = [],table_id = all,out_port = any,out_group = any, + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + match = #ofp_match{fields = []}}, + #ofp_aggregate_stats_reply{flags = [],packet_count = 7, + byte_count = 574,flow_count = 6}, + #ofp_table_stats_request{}, + +#ofp_table_stats_reply{ + flags = [], + body = + [#ofp_table_stats{ + table_id = 0, + active_count = 4, lookup_count = 4,matched_count = 4}, + #ofp_table_stats{ + table_id = 1, + active_count = 4, lookup_count = 4,matched_count = 4}]}, + + #ofp_port_stats_request{flags = [],port_no = any}, + #ofp_port_stats_reply{ + flags = [], + body = + [#ofp_port_stats{ + port_no = 7,rx_packets = 0,tx_packets = 4,rx_bytes = 0, + tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, + rx_errors = 0, tx_errors = 0, + properties = + [#ofp_port_stats_prop_ethernet{ + rx_frame_err = 0,rx_over_err = 0, + rx_crc_err = 0,collisions = 0}, + #ofp_port_stats_prop_optical{ + flags = [rx_tune,tx_tune], + tx_freq_lmda = 1500, + tx_offset = 700, + tx_grid_span = 500, + rx_freq_lmda = 1500, + rx_offset = 700, + rx_grid_span = 500, + tx_pwr = 2000, + rx_pwr = 2000, + bias_current = 300, + temperature = 273}, + #ofp_port_stats_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_port_stats_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_port_stats_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, + #ofp_port_stats{ + port_no = 6,rx_packets = 4,tx_packets = 4,rx_bytes = 336, + tx_bytes = 336,rx_dropped = 0,tx_dropped = 0, + rx_errors = 0, tx_errors = 0, + properties = + [#ofp_port_stats_prop_ethernet{ + rx_frame_err = 0,rx_over_err = 0, + rx_crc_err = 0,collisions = 0}]}]}, + #ofp_group_features_request{flags = []}, + #ofp_group_features_reply{ + flags = [], + types = [all,select,indirect,ff], + capabilities = [select_weight,chaining], + max_groups = {16777216,16777216,16777216,16777216}, + actions = + {[output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field], + [output,copy_ttl_out,copy_ttl_in,set_mpls_ttl,dec_mpls_ttl,push_vlan,pop_vlan,push_mpls,pop_mpls,set_queue,group,set_nw_ttl,dec_nw_ttl,set_field]}}, + #ofp_group_desc_request{}, + #ofp_group_desc_reply{ + flags = [], + body = + [#ofp_group_desc_stats{ + type = all,group_id = 1, + buckets = + [#ofp_bucket{ + weight = 1,watch_port = 1,watch_group = 1, + actions = + [#ofp_action_output{ + port = 2, max_len = no_buffer}]}]}]}, + #ofp_queue_stats_request{flags = [],port_no = any, + queue_id = all}, + #ofp_queue_stats_reply{ + flags = [], + body = + [#ofp_queue_stats{ + port_no = 7,queue_id = 1,tx_bytes = 0,tx_packets = 0, + tx_errors = 0, + properties = + [#ofp_queue_stats_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_queue_stats_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_queue_stats_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, + #ofp_queue_stats{ + port_no = 6,queue_id = 1,tx_bytes = 0,tx_packets = 0, + tx_errors = 0}, + #ofp_queue_stats{ + port_no = 7,queue_id = 2,tx_bytes = 0,tx_packets = 0, + tx_errors = 0}]}, + #ofp_port_status{ + reason = add, + desc = #ofp_port{ + port_no = 7,hw_addr = <<"\362\v\244\320?p">>, + name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x9d\xe3\x83\xbc\xe3\x83\x88">>, % "my port" in japanese, utf-8 + config = [], + state = [live], + properties = + [#ofp_port_desc_prop_ethernet{ + curr = ['100mb_fd',copper,autoneg], + advertised = [copper,autoneg], + supported = ['100mb_fd',copper,autoneg], + peer = ['100mb_fd',copper,autoneg], + curr_speed = 5000,max_speed = 5000}, + #ofp_port_desc_prop_optical{ + supported = [rx_tune], + tx_min_freq_lmda = 1000, + tx_max_freq_lmda = 2000, + tx_grid_freq_lmda = 1500, + rx_min_freq_lmda = 1000, + rx_max_freq_lmda = 2000, + rx_grid_freq_lmda = 1500, + tx_pwr_min = 1000, + tx_pwr_max = 2000}, + #ofp_port_desc_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_port_desc_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_port_desc_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]} + }, + #ofp_flow_removed{ + cookie = <<0,0,0,0,0,0,0,0>>, + priority = 65535,reason = idle_timeout,table_id = 0, + duration_sec = 3,duration_nsec = 48825000,idle_timeout = 3, + hard_timeout = 0,packet_count = 1,byte_count = 86, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}}, + #ofp_error_msg_experimenter{ + exp_type = 60000, + experimenter = 999999, + data = <<"jikken data">> + }, + #ofp_get_async_request{}, + #ofp_get_async_reply{ + properties = + [#ofp_async_config_prop_reasons{ + type = packet_in_slave, + mask = [table_miss, apply_action]}, + #ofp_async_config_prop_reasons{ + type = packet_in_master, + mask = [table_miss, apply_action]}, + #ofp_async_config_prop_reasons{ + type = port_status_slave, + mask = [add, delete]}, + #ofp_async_config_prop_reasons{ + type = port_status_master, + mask = [add, delete]}, + #ofp_async_config_prop_reasons{ + type = flow_removed_slave, + mask = [idle_timeout, hard_timeout]}, + #ofp_async_config_prop_reasons{ + type = flow_removed_master, + mask = [idle_timeout, hard_timeout]}, + #ofp_async_config_prop_reasons{ + type = role_status_slave, + mask = [master_request, config]}, + #ofp_async_config_prop_reasons{ + type = role_status_master, + mask = [master_request, config]}, + #ofp_async_config_prop_reasons{ + type = table_status_slave, + mask = [vacancy_down, vacancy_up]}, + #ofp_async_config_prop_reasons{ + type = table_status_master, + mask = [vacancy_down, vacancy_up]}, + #ofp_async_config_prop_reasons{ + type = requestforward_slave, + mask = [group_mod, meter_mod]}, + #ofp_async_config_prop_reasons{ + type = requestforward_master, + mask = [group_mod, meter_mod]}, + #ofp_async_config_prop_experimenter{ + type = experimenter_slave, + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_async_config_prop_experimenter{ + type = experimenter_master, + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_async_config_prop_experimenter{ + type = experimenter_master, + experimenter = 101, + exp_type = 2, + data = <<1:32, 2:32>>}]}, + #ofp_set_async{ + properties = + [#ofp_async_config_prop_reasons{ + type = packet_in_slave, + mask = [table_miss, apply_action]}, + #ofp_async_config_prop_reasons{ + type = packet_in_master, + mask = [table_miss, apply_action]}, + #ofp_async_config_prop_reasons{ + type = port_status_slave, + mask = [add, delete]}, + #ofp_async_config_prop_reasons{ + type = port_status_master, + mask = [add, delete]}, + #ofp_async_config_prop_reasons{ + type = flow_removed_slave, + mask = [idle_timeout, hard_timeout]}, + #ofp_async_config_prop_reasons{ + type = flow_removed_master, + mask = [idle_timeout, hard_timeout]}, + #ofp_async_config_prop_reasons{ + type = role_status_slave, + mask = [master_request, config]}, + #ofp_async_config_prop_reasons{ + type = role_status_master, + mask = [master_request, config]}, + #ofp_async_config_prop_reasons{ + type = table_status_slave, + mask = [vacancy_down, vacancy_up]}, + #ofp_async_config_prop_reasons{ + type = table_status_master, + mask = [vacancy_down, vacancy_up]}, + #ofp_async_config_prop_reasons{ + type = requestforward_slave, + mask = [group_mod, meter_mod]}, + #ofp_async_config_prop_reasons{ + type = requestforward_master, + mask = [group_mod, meter_mod]}, + #ofp_async_config_prop_experimenter{ + type = experimenter_slave, + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_async_config_prop_experimenter{ + type = experimenter_master, + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_async_config_prop_experimenter{ + type = experimenter_master, + experimenter = 101, + exp_type = 2, + data = <<1:32, 2:32>>}]}, + #ofp_meter_mod{ + command = add, + flags = [pktps, burst, stats], + meter_id = 100, + bands = [ + #ofp_meter_band_drop{rate = 1000, burst_size = 10}, + #ofp_meter_band_dscp_remark{rate = 1000, burst_size = 10, + prec_level = 1}, + #ofp_meter_band_experimenter{rate = 1000, burst_size = 10, + experimenter = 999} + ] + }, + + #ofp_flow_mod{ + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + table_id = 1,command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = any,out_group = any,flags = [], + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}, + instructions = + [#ofp_instruction_meter{meter_id = 1}, + #ofp_instruction_write_actions{ + actions = + [#ofp_action_output{port = 6,max_len = no_buffer}]}]}, + + #ofp_meter_config_request{meter_id = all}, + #ofp_meter_config_reply{ + body = + [#ofp_meter_config{ + flags = [pktps,burst,stats], + meter_id = 100, + bands = + [#ofp_meter_band_drop{ + type = drop,rate = 1000,burst_size = 10}]}]}, + + #ofp_meter_stats_request{meter_id = all}, + #ofp_meter_stats_reply{ + body = + [#ofp_meter_stats{ + meter_id = 100,flow_count = 0,packet_in_count = 0, + byte_in_count = 0,duration_sec = 0,duration_nsec = 480000, + band_stats = + [#ofp_meter_band_stats{ + packet_band_count = 0,byte_band_count = 0}]}]}, + + #ofp_meter_features_request{}, + #ofp_meter_features_reply{max_meter = 16777216, + band_types = [drop,dscp_remark,experimenter], + capabilities = [kbps,pktps,burst,stats], + max_bands = 255,max_color = 0}, + #ofp_port_desc_request{flags = []}, + #ofp_port_desc_reply{flags = [], + body = [#ofp_port{port_no = 7,hw_addr = <<"\362\v\244\320?p">>, + name = <<"Port7">>,config = [], + state = [live], + properties = + [#ofp_port_desc_prop_ethernet{ + curr = ['100mb_fd',copper,autoneg], + advertised = [copper,autoneg], + supported = ['100mb_fd',copper,autoneg], + peer = ['100mb_fd',copper,autoneg], + curr_speed = 5000,max_speed = 5000}, + #ofp_port_desc_prop_optical{ + supported = [rx_tune], + tx_min_freq_lmda = 1000, + tx_max_freq_lmda = 2000, + tx_grid_freq_lmda = 1500, + rx_min_freq_lmda = 1000, + rx_max_freq_lmda = 2000, + rx_grid_freq_lmda = 1500, + tx_pwr_min = 1000, + tx_pwr_max = 2000}, + #ofp_port_desc_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_port_desc_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_port_desc_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, + #ofp_port{port_no = 6,hw_addr = <<"\362\v\244}\370\352">>, + name = <<"Port6">>,config = [], + state = [live], + properties = + [#ofp_port_desc_prop_ethernet{ + curr = ['100mb_fd',copper,autoneg], + advertised = [copper,autoneg], + supported = ['100mb_fd',copper,autoneg], + peer = ['100mb_fd',copper,autoneg], + curr_speed = 5000,max_speed = 5000}]}]}, + + + #ofp_table_features_request{ + flags = [more], + body = + [#ofp_table_features{ + table_id = 0,name = <<"Flow Table 0x00">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 32,33,34,35,36,37,38,39,40,41,42,43,44,45, + 46,47,48,49,50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,67,68,69,70,71,72,73, + 74,75,76,77,78,79,80,81,82,83,84,85,86,87, + 88,89,90,91,92,93,94,95,96,97,98,99,100, + 101,102,103,104,105,106,107,108,109,110, + 111,112,113,114,115,116,117,118,119,120, + 121,122,123,124,125,126,127,128,129,130, + 131,132,133,134,135,136,137,138,139,140, + 141,142,143,144,145,146,147,148,149,150, + 151,152,153,154,155,156,157,158,159,160, + 161,162,163,164,165,166,167,168,169,170, + 171,172,173,174,175,176,177,178,179,180, + 181,182,183,184,185,186,187,188,189,190, + 191,192,193,194,195,196,197,198,199,200, + 201,202,203,204,205,206,207,208,209,210, + 211,212,213,214,215,216,217,218,219,220, + 221,222,223,224,225,226,227,228,229,230, + 231,232,233,234,235,236,237,238,239,240, + 241,242,243,244,245,246,247,248,249,250, + 251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, + #ofp_table_features{ + table_id = 1,name = <<"Flow Table 0x01">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,39,40,41,42,43,44,45,46, + 47,48,49,50,51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,66,67,68,69,70,71,72,73,74, + 75,76,77,78,79,80,81,82,83,84,85,86,87,88, + 89,90,91,92,93,94,95,96,97,98,99,100,101, + 102,103,104,105,106,107,108,109,110,111, + 112,113,114,115,116,117,118,119,120,121, + 122,123,124,125,126,127,128,129,130,131, + 132,133,134,135,136,137,138,139,140,141, + 142,143,144,145,146,147,148,149,150,151, + 152,153,154,155,156,157,158,159,160,161, + 162,163,164,165,166,167,168,169,170,171, + 172,173,174,175,176,177,178,179,180,181, + 182,183,184,185,186,187,188,189,190,191, + 192,193,194,195,196,197,198,199,200,201, + 202,203,204,205,206,207,208,209,210,211, + 212,213,214,215,216,217,218,219,220,221, + 222,223,224,225,226,227,228,229,230,231, + 232,233,234,235,236,237,238,239,240,241, + 242,243,244,245,246,247,248,249,250,251, + 252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 2,name = <<"Flow Table 0x02">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,39,40,41,42,43,44,45,46, + 47,48,49,50,51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,66,67,68,69,70,71,72,73,74, + 75,76,77,78,79,80,81,82,83,84,85,86,87,88, + 89,90,91,92,93,94,95,96,97,98,99,100,101, + 102,103,104,105,106,107,108,109,110,111, + 112,113,114,115,116,117,118,119,120,121, + 122,123,124,125,126,127,128,129,130,131, + 132,133,134,135,136,137,138,139,140,141, + 142,143,144,145,146,147,148,149,150,151, + 152,153,154,155,156,157,158,159,160,161, + 162,163,164,165,166,167,168,169,170,171, + 172,173,174,175,176,177,178,179,180,181, + 182,183,184,185,186,187,188,189,190,191, + 192,193,194,195,196,197,198,199,200,201, + 202,203,204,205,206,207,208,209,210,211, + 212,213,214,215,216,217,218,219,220,221, + 222,223,224,225,226,227,228,229,230,231, + 232,233,234,235,236,237,238,239,240,241, + 242,243,244,245,246,247,248,249,250,251, + 252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 3,name = <<"Flow Table 0x03">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43,44,45,46,47, + 48,49,50,51,52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,66,67,68,69,70,71,72,73,74,75, + 76,77,78,79,80,81,82,83,84,85,86,87,88,89, + 90,91,92,93,94,95,96,97,98,99,100,101,102, + 103,104,105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120,121,122, + 123,124,125,126,127,128,129,130,131,132, + 133,134,135,136,137,138,139,140,141,142, + 143,144,145,146,147,148,149,150,151,152, + 153,154,155,156,157,158,159,160,161,162, + 163,164,165,166,167,168,169,170,171,172, + 173,174,175,176,177,178,179,180,181,182, + 183,184,185,186,187,188,189,190,191,192, + 193,194,195,196,197,198,199,200,201,202, + 203,204,205,206,207,208,209,210,211,212, + 213,214,215,216,217,218,219,220,221,222, + 223,224,225,226,227,228,229,230,231,232, + 233,234,235,236,237,238,239,240,241,242, + 243,244,245,246,247,248,249,250,251,252, + 253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 4,name = <<"Flow Table 0x04">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,40,41,42,43,44,45,46,47,48, + 49,50,51,52,53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,67,68,69,70,71,72,73,74,75,76, + 77,78,79,80,81,82,83,84,85,86,87,88,89,90, + 91,92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 5,name = <<"Flow Table 0x05">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,40,41,42,43,44,45,46,47,48, + 49,50,51,52,53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,67,68,69,70,71,72,73,74,75,76, + 77,78,79,80,81,82,83,84,85,86,87,88,89,90, + 91,92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 6,name = <<"Flow Table 0x06">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,42,43,44,45,46,47,48,49, + 50,51,52,53,54,55,56,57,58,59,60,61,62,63, + 64,65,66,67,68,69,70,71,72,73,74,75,76,77, + 78,79,80,81,82,83,84,85,86,87,88,89,90,91, + 92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 7,name = <<"Flow Table 0x07">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32,33,34,35,36, + 37,38,39,40,41,42,43,44,45,46,47,48,49,50, + 51,52,53,54,55,56,57,58,59,60,61,62,63,64, + 65,66,67,68,69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,86,87,88,89,90,91,92, + 93,94,95,96,97,98,99,100,101,102,103,104, + 105,106,107,108,109,110,111,112,113,114, + 115,116,117,118,119,120,121,122,123,124, + 125,126,127,128,129,130,131,132,133,134, + 135,136,137,138,139,140,141,142,143,144, + 145,146,147,148,149,150,151,152,153,154, + 155,156,157,158,159,160,161,162,163,164, + 165,166,167,168,169,170,171,172,173,174, + 175,176,177,178,179,180,181,182,183,184, + 185,186,187,188,189,190,191,192,193,194, + 195,196,197,198,199,200,201,202,203,204, + 205,206,207,208,209,210,211,212,213,214, + 215,216,217,218,219,220,221,222,223,224, + 225,226,227,228,229,230,231,232,233,234, + 235,236,237,238,239,240,241,242,243,244, + 245,246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 8,name = <<"Flow Table 0x08">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [9,10,11,12,13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32,33,34,35,36, + 37,38,39,40,41,42,43,44,45,46,47,48,49,50, + 51,52,53,54,55,56,57,58,59,60,61,62,63,64, + 65,66,67,68,69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,86,87,88,89,90,91,92, + 93,94,95,96,97,98,99,100,101,102,103,104, + 105,106,107,108,109,110,111,112,113,114, + 115,116,117,118,119,120,121,122,123,124, + 125,126,127,128,129,130,131,132,133,134, + 135,136,137,138,139,140,141,142,143,144, + 145,146,147,148,149,150,151,152,153,154, + 155,156,157,158,159,160,161,162,163,164, + 165,166,167,168,169,170,171,172,173,174, + 175,176,177,178,179,180,181,182,183,184, + 185,186,187,188,189,190,191,192,193,194, + 195,196,197,198,199,200,201,202,203,204, + 205,206,207,208,209,210,211,212,213,214, + 215,216,217,218,219,220,221,222,223,224, + 225,226,227,228,229,230,231,232,233,234, + 235,236,237,238,239,240,241,242,243,244, + 245,246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 9,name = <<"Flow Table 0x09">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [10,11,12,13,14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33,34,35,36,37, + 38,39,40,41,42,43,44,45,46,47,48,49,50,51, + 52,53,54,55,56,57,58,59,60,61,62,63,64,65, + 66,67,68,69,70,71,72,73,74,75,76,77,78,79, + 80,81,82,83,84,85,86,87,88,89,90,91,92,93, + 94,95,96,97,98,99,100,101,102,103,104,105, + 106,107,108,109,110,111,112,113,114,115, + 116,117,118,119,120,121,122,123,124,125, + 126,127,128,129,130,131,132,133,134,135, + 136,137,138,139,140,141,142,143,144,145, + 146,147,148,149,150,151,152,153,154,155, + 156,157,158,159,160,161,162,163,164,165, + 166,167,168,169,170,171,172,173,174,175, + 176,177,178,179,180,181,182,183,184,185, + 186,187,188,189,190,191,192,193,194,195, + 196,197,198,199,200,201,202,203,204,205, + 206,207,208,209,210,211,212,213,214,215, + 216,217,218,219,220,221,222,223,224,225, + 226,227,228,229,230,231,232,233,234,235, + 236,237,238,239,240,241,242,243,244,245, + 246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}]}, + #ofp_table_features_reply{ + flags = [more], + body = + [#ofp_table_features{ + table_id = 0,name = <<"\xe7\xa7\x81\xe3\x81\xae\xe3\x83\x86\xe3\x83\xbc\xe3\x83\x96\xe3\x83\xab">>, % "my table" in japanese, utf-8 + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17, + 18,19,20,21,22,23,24,25,26,27,28,29,30,31, + 32,33,34,35,36,37,38,39,40,41,42,43,44,45, + 46,47,48,49,50,51,52,53,54,55,56,57,58,59, + 60,61,62,63,64,65,66,67,68,69,70,71,72,73, + 74,75,76,77,78,79,80,81,82,83,84,85,86,87, + 88,89,90,91,92,93,94,95,96,97,98,99,100, + 101,102,103,104,105,106,107,108,109,110, + 111,112,113,114,115,116,117,118,119,120, + 121,122,123,124,125,126,127,128,129,130, + 131,132,133,134,135,136,137,138,139,140, + 141,142,143,144,145,146,147,148,149,150, + 151,152,153,154,155,156,157,158,159,160, + 161,162,163,164,165,166,167,168,169,170, + 171,172,173,174,175,176,177,178,179,180, + 181,182,183,184,185,186,187,188,189,190, + 191,192,193,194,195,196,197,198,199,200, + 201,202,203,204,205,206,207,208,209,210, + 211,212,213,214,215,216,217,218,219,220, + 221,222,223,224,225,226,227,228,229,230, + 231,232,233,234,235,236,237,238,239,240, + 241,242,243,244,245,246,247,248,249,250, + 251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_table_feature_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, + #ofp_table_features{ + table_id = 1,name = <<"Flow Table 0x01">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,39,40,41,42,43,44,45,46, + 47,48,49,50,51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,66,67,68,69,70,71,72,73,74, + 75,76,77,78,79,80,81,82,83,84,85,86,87,88, + 89,90,91,92,93,94,95,96,97,98,99,100,101, + 102,103,104,105,106,107,108,109,110,111, + 112,113,114,115,116,117,118,119,120,121, + 122,123,124,125,126,127,128,129,130,131, + 132,133,134,135,136,137,138,139,140,141, + 142,143,144,145,146,147,148,149,150,151, + 152,153,154,155,156,157,158,159,160,161, + 162,163,164,165,166,167,168,169,170,171, + 172,173,174,175,176,177,178,179,180,181, + 182,183,184,185,186,187,188,189,190,191, + 192,193,194,195,196,197,198,199,200,201, + 202,203,204,205,206,207,208,209,210,211, + 212,213,214,215,216,217,218,219,220,221, + 222,223,224,225,226,227,228,229,230,231, + 232,233,234,235,236,237,238,239,240,241, + 242,243,244,245,246,247,248,249,250,251, + 252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 2,name = <<"Flow Table 0x02">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18, + 19,20,21,22,23,24,25,26,27,28,29,30,31,32, + 33,34,35,36,37,38,39,40,41,42,43,44,45,46, + 47,48,49,50,51,52,53,54,55,56,57,58,59,60, + 61,62,63,64,65,66,67,68,69,70,71,72,73,74, + 75,76,77,78,79,80,81,82,83,84,85,86,87,88, + 89,90,91,92,93,94,95,96,97,98,99,100,101, + 102,103,104,105,106,107,108,109,110,111, + 112,113,114,115,116,117,118,119,120,121, + 122,123,124,125,126,127,128,129,130,131, + 132,133,134,135,136,137,138,139,140,141, + 142,143,144,145,146,147,148,149,150,151, + 152,153,154,155,156,157,158,159,160,161, + 162,163,164,165,166,167,168,169,170,171, + 172,173,174,175,176,177,178,179,180,181, + 182,183,184,185,186,187,188,189,190,191, + 192,193,194,195,196,197,198,199,200,201, + 202,203,204,205,206,207,208,209,210,211, + 212,213,214,215,216,217,218,219,220,221, + 222,223,224,225,226,227,228,229,230,231, + 232,233,234,235,236,237,238,239,240,241, + 242,243,244,245,246,247,248,249,250,251, + 252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 3,name = <<"Flow Table 0x03">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19, + 20,21,22,23,24,25,26,27,28,29,30,31,32,33, + 34,35,36,37,38,39,40,41,42,43,44,45,46,47, + 48,49,50,51,52,53,54,55,56,57,58,59,60,61, + 62,63,64,65,66,67,68,69,70,71,72,73,74,75, + 76,77,78,79,80,81,82,83,84,85,86,87,88,89, + 90,91,92,93,94,95,96,97,98,99,100,101,102, + 103,104,105,106,107,108,109,110,111,112, + 113,114,115,116,117,118,119,120,121,122, + 123,124,125,126,127,128,129,130,131,132, + 133,134,135,136,137,138,139,140,141,142, + 143,144,145,146,147,148,149,150,151,152, + 153,154,155,156,157,158,159,160,161,162, + 163,164,165,166,167,168,169,170,171,172, + 173,174,175,176,177,178,179,180,181,182, + 183,184,185,186,187,188,189,190,191,192, + 193,194,195,196,197,198,199,200,201,202, + 203,204,205,206,207,208,209,210,211,212, + 213,214,215,216,217,218,219,220,221,222, + 223,224,225,226,227,228,229,230,231,232, + 233,234,235,236,237,238,239,240,241,242, + 243,244,245,246,247,248,249,250,251,252, + 253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 4,name = <<"Flow Table 0x04">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,40,41,42,43,44,45,46,47,48, + 49,50,51,52,53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,67,68,69,70,71,72,73,74,75,76, + 77,78,79,80,81,82,83,84,85,86,87,88,89,90, + 91,92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 5,name = <<"Flow Table 0x05">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [6,7,8,9,10,11,12,13,14,15,16,17,18,19,20, + 21,22,23,24,25,26,27,28,29,30,31,32,33,34, + 35,36,37,38,39,40,41,42,43,44,45,46,47,48, + 49,50,51,52,53,54,55,56,57,58,59,60,61,62, + 63,64,65,66,67,68,69,70,71,72,73,74,75,76, + 77,78,79,80,81,82,83,84,85,86,87,88,89,90, + 91,92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 6,name = <<"Flow Table 0x06">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [7,8,9,10,11,12,13,14,15,16,17,18,19,20,21, + 22,23,24,25,26,27,28,29,30,31,32,33,34,35, + 36,37,38,39,40,41,42,43,44,45,46,47,48,49, + 50,51,52,53,54,55,56,57,58,59,60,61,62,63, + 64,65,66,67,68,69,70,71,72,73,74,75,76,77, + 78,79,80,81,82,83,84,85,86,87,88,89,90,91, + 92,93,94,95,96,97,98,99,100,101,102,103, + 104,105,106,107,108,109,110,111,112,113, + 114,115,116,117,118,119,120,121,122,123, + 124,125,126,127,128,129,130,131,132,133, + 134,135,136,137,138,139,140,141,142,143, + 144,145,146,147,148,149,150,151,152,153, + 154,155,156,157,158,159,160,161,162,163, + 164,165,166,167,168,169,170,171,172,173, + 174,175,176,177,178,179,180,181,182,183, + 184,185,186,187,188,189,190,191,192,193, + 194,195,196,197,198,199,200,201,202,203, + 204,205,206,207,208,209,210,211,212,213, + 214,215,216,217,218,219,220,221,222,223, + 224,225,226,227,228,229,230,231,232,233, + 234,235,236,237,238,239,240,241,242,243, + 244,245,246,247,248,249,250,251,252,253, + 254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 7,name = <<"Flow Table 0x07">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [8,9,10,11,12,13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32,33,34,35,36, + 37,38,39,40,41,42,43,44,45,46,47,48,49,50, + 51,52,53,54,55,56,57,58,59,60,61,62,63,64, + 65,66,67,68,69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,86,87,88,89,90,91,92, + 93,94,95,96,97,98,99,100,101,102,103,104, + 105,106,107,108,109,110,111,112,113,114, + 115,116,117,118,119,120,121,122,123,124, + 125,126,127,128,129,130,131,132,133,134, + 135,136,137,138,139,140,141,142,143,144, + 145,146,147,148,149,150,151,152,153,154, + 155,156,157,158,159,160,161,162,163,164, + 165,166,167,168,169,170,171,172,173,174, + 175,176,177,178,179,180,181,182,183,184, + 185,186,187,188,189,190,191,192,193,194, + 195,196,197,198,199,200,201,202,203,204, + 205,206,207,208,209,210,211,212,213,214, + 215,216,217,218,219,220,221,222,223,224, + 225,226,227,228,229,230,231,232,233,234, + 235,236,237,238,239,240,241,242,243,244, + 245,246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 8,name = <<"Flow Table 0x08">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [9,10,11,12,13,14,15,16,17,18,19,20,21,22, + 23,24,25,26,27,28,29,30,31,32,33,34,35,36, + 37,38,39,40,41,42,43,44,45,46,47,48,49,50, + 51,52,53,54,55,56,57,58,59,60,61,62,63,64, + 65,66,67,68,69,70,71,72,73,74,75,76,77,78, + 79,80,81,82,83,84,85,86,87,88,89,90,91,92, + 93,94,95,96,97,98,99,100,101,102,103,104, + 105,106,107,108,109,110,111,112,113,114, + 115,116,117,118,119,120,121,122,123,124, + 125,126,127,128,129,130,131,132,133,134, + 135,136,137,138,139,140,141,142,143,144, + 145,146,147,148,149,150,151,152,153,154, + 155,156,157,158,159,160,161,162,163,164, + 165,166,167,168,169,170,171,172,173,174, + 175,176,177,178,179,180,181,182,183,184, + 185,186,187,188,189,190,191,192,193,194, + 195,196,197,198,199,200,201,202,203,204, + 205,206,207,208,209,210,211,212,213,214, + 215,216,217,218,219,220,221,222,223,224, + 225,226,227,228,229,230,231,232,233,234, + 235,236,237,238,239,240,241,242,243,244, + 245,246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}, + #ofp_table_features{ + table_id = 9,name = <<"Flow Table 0x09">>, + metadata_match = <<"\377\377\377\377\377\377\377\377">>, + metadata_write = <<"\377\377\377\377\377\377\377\377">>,max_entries = 16777216, + properties = + [#ofp_table_feature_prop_instructions{ + instruction_ids = + [goto_table,write_metadata,write_actions, + apply_actions,clear_actions,meter]}, + #ofp_table_feature_prop_next_tables{ + next_table_ids = + [10,11,12,13,14,15,16,17,18,19,20,21,22,23, + 24,25,26,27,28,29,30,31,32,33,34,35,36,37, + 38,39,40,41,42,43,44,45,46,47,48,49,50,51, + 52,53,54,55,56,57,58,59,60,61,62,63,64,65, + 66,67,68,69,70,71,72,73,74,75,76,77,78,79, + 80,81,82,83,84,85,86,87,88,89,90,91,92,93, + 94,95,96,97,98,99,100,101,102,103,104,105, + 106,107,108,109,110,111,112,113,114,115, + 116,117,118,119,120,121,122,123,124,125, + 126,127,128,129,130,131,132,133,134,135, + 136,137,138,139,140,141,142,143,144,145, + 146,147,148,149,150,151,152,153,154,155, + 156,157,158,159,160,161,162,163,164,165, + 166,167,168,169,170,171,172,173,174,175, + 176,177,178,179,180,181,182,183,184,185, + 186,187,188,189,190,191,192,193,194,195, + 196,197,198,199,200,201,202,203,204,205, + 206,207,208,209,210,211,212,213,214,215, + 216,217,218,219,220,221,222,223,224,225, + 226,227,228,229,230,231,232,233,234,235, + 236,237,238,239,240,241,242,243,244,245, + 246,247,248,249,250,251,252,253,254]}, + #ofp_table_feature_prop_write_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_apply_actions{ + action_ids = + [output,group,set_queue,set_mpls_ttl, + dec_mpls_ttl,set_nw_ttl,dec_nw_ttl, + copy_ttl_out,copy_ttl_in,push_vlan, + pop_vlan,push_mpls,pop_mpls,push_pbb, + pop_pbb,set_field]}, + #ofp_table_feature_prop_match{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_wildcards{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_write_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}, + #ofp_table_feature_prop_apply_setfield{ + oxm_ids = + [in_port,metadata,eth_dst,eth_src,eth_type, + vlan_vid,vlan_pcp,ip_dscp,ip_ecn,ip_proto, + ipv4_src,ipv4_dst,tcp_src,tcp_dst,udp_src, + udp_dst,sctp_src,sctp_dst,icmpv4_type, + icmpv4_code,arp_op,arp_spa,arp_tpa,arp_sha, + arp_tha,ipv6_src,ipv6_dst,ipv6_flabel, + icmpv6_type,icmpv6_code,ipv6_nd_target, + ipv6_nd_sll,ipv6_nd_tll,mpls_label,mpls_tc, + mpls_bos,pbb_isid]}]}]}, + #ofp_group_stats_request{flags = [],group_id = all}, + #ofp_group_stats_reply{ + flags = [], + body = + [#ofp_group_stats{ + group_id = 1,ref_count = 2,packet_count = 123, + byte_count = 12345,duration_sec = 9, + duration_nsec = 609036000, + bucket_stats = + [#ofp_bucket_counter{ + packet_count = 234,byte_count = 2345}]}]}, + #ofp_packet_in{ + buffer_id = 16#f0000000,reason = table_miss,table_id = 200, + cookie = <<0,1,2,3,0,0,0,0>>, + match = #ofp_match{fields = AllFields}, + data = <<>>}, + #ofp_flow_mod{ + cookie = <<0,0,0,0,0,0,0,0>>, + cookie_mask = <<0,0,0,0,0,0,0,0>>, + table_id = 1,command = add,idle_timeout = 0, + hard_timeout = 0,priority = 123,buffer_id = 65535, + out_port = any,out_group = any,flags = [], + match = #ofp_match{fields = AllFields}, + instructions = []}, + #ofp_experimenter_request{ + experimenter = 16#deadbeaf, + exp_type = 16#cafe8888, + data = <<"hogehoge">> + }, + #ofp_experimenter_reply{ + experimenter = 16#deadbeaf, + exp_type = 16#cafe7777, + data = <<"testdata99999999">> + }, + #ofp_table_desc_request{flags = []}, + #ofp_table_desc_reply{flags = [], + tables = + [#ofp_table_desc{ + table_id = 7, + config = [], + properties = + [ #ofp_table_mod_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}]}, + #ofp_table_desc{ + table_id = 8, + config = [], + properties = + [#ofp_table_mod_prop_eviction{flags = []}, + #ofp_table_mod_prop_vacancy{ + vacancy = 0, + vacancy_down = 0, + vacancy_up = 0}, + #ofp_table_mod_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_table_mod_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_table_mod_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}]}, + #ofp_queue_desc_request{ + port_no = 7, + queue_id = all}, + #ofp_queue_desc_reply{ + queues = + [#ofp_queue_desc{ + port_no = 7, + properties = + [#ofp_queue_desc_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}], + queue_id = 0}, + #ofp_queue_desc{ + port_no = 8, + properties = + [#ofp_queue_desc_prop_min_rate{rate = 300}, + #ofp_queue_desc_prop_max_rate{rate = 900}, + #ofp_queue_desc_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_queue_desc_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_queue_desc_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}], + queue_id = 1}]}, + #ofp_role_status{ + role = master, + reason = master_request, + generation_id=7, + properties = + [#ofp_role_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_role_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_role_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, + #ofp_flow_monitor_request{ + flags = [], + monitor_id = 100000000, + out_port = 22, + out_group = any, + monitor_flags = [initial, add, removed, modify], + table_id = 33, + command = add, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic,name = eth_dst, + has_mask = false, + value = <<"\362\v\244}\370\352">>, + mask = undefined}]}}, + #ofp_flow_monitor_reply{ + flags = [], + updates = + [#ofp_flow_update_full{ + event = initial, + table_id = 0, + reason = idle_timeout, + idle_timeout = 600, + hard_timeout = 700, + priority = 3, + cookie = <<0,0,0,0,0,0,0,0>>, + match = + #ofp_match{ + fields = + [#ofp_field{ + class = openflow_basic, + name = eth_type, + has_mask = false, + value = <<8,6>>, + mask = undefined}]}, + instructions = + [#ofp_instruction_apply_actions{ + actions = + [#ofp_action_output{ + port = normal, + max_len = 0}]}]}, + #ofp_flow_update_abbrev{event = abbrev,xid=1234}, + #ofp_flow_update_paused{event = paused}]}, + #ofp_table_status{ + reason = vacancy_down, + table = + #ofp_table_desc{ + table_id = 8, + config = [], + properties = + [#ofp_table_mod_prop_eviction{flags = []}, + #ofp_table_mod_prop_vacancy{ + vacancy = 0, + vacancy_down = 0, + vacancy_up = 0}, + #ofp_table_mod_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_table_mod_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_table_mod_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}}, + #ofp_bundle_ctrl_msg{ + bundle_id = 1234, + type = open_request, + flags = [atomic], + properties = + [#ofp_bundle_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_bundle_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_bundle_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, + #ofp_bundle_add_msg{ + bundle_id = 1234, + flags = [atomic], + message = + #ofp_message{ + version = 5, + type = echo_request, + xid = 0, + body = #ofp_echo_request{}}, + properties = + [#ofp_bundle_prop_experimenter{ + experimenter = 101, + exp_type = 0, + data = <<>>}, + #ofp_bundle_prop_experimenter{ + experimenter = 101, + exp_type = 1, + data = <<1:32>>}, + #ofp_bundle_prop_experimenter{ + experimenter = 101, + exp_type = 2, + data = <<1:32,2:32>>}]}, + #ofp_requestforward{ + request = + #ofp_message{ + version = 5, + type = group_mod, + xid = 0, + body = + #ofp_group_mod{ + command = add, + type = all, + group_id = 1, + buckets = + [#ofp_bucket{ + weight = 1, + watch_port = 1, + watch_group = 1, + actions = + [#ofp_action_output{ + port = 2, + max_len = no_buffer}]}]}}} + ], + lists:foldl(fun x:do/2, {5, 0}, List). diff --git a/tests/packet_data_generator/src/x_flower_packet.erl b/tests/packet_data_generator/src/x_flower_packet.erl new file mode 100644 index 00000000..5c2e3742 --- /dev/null +++ b/tests/packet_data_generator/src/x_flower_packet.erl @@ -0,0 +1,61 @@ +%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +%% Copyright (C) 2013 YAMAMOTO Takashi +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +%% implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +-module(x_flower_packet). +-export([message/3, message_extract/1, encode/1, decode/1]). + +-include_lib("flower/include/flower_packet.hrl"). + +message(OFPVersion, Xid, Body) -> + #ovs_msg{version=OFPVersion, xid=Xid, msg=Body}. + +message_extract(Msg) -> + #ovs_msg{version=OFPVersion, xid=Xid, msg=Body} = Msg, + {OFPVersion, Xid, Body}. + +guess_type(Msg) -> + % eg. {ofp_packet_out, ...} -> packet_out + RecType = element(1, Msg), + case RecType of + ofp_switch_features -> + features_reply; + _ -> + RecTypeStr = atom_to_list(RecType), + TypeStr = lists:nthtail(4, RecTypeStr), + list_to_atom(TypeStr) + end. + +encode(Msg) -> + Msg2 = case Msg of + #ovs_msg{msg = features_request} -> + Msg#ovs_msg{type = features_request, msg = <<>>}; + _ -> + Msg#ovs_msg{type = guess_type(Msg#ovs_msg.msg)} + end, + %io:format("encoding ~p~n", [Msg2]), + BinMsg = flower_packet:encode(Msg2), + {ok, BinMsg}. + +decode(BinMsg) -> + {[Msg], <<>>} = flower_packet:decode(BinMsg), + %io:format("decoded ~p~n", [Msg]), + Msg2 = case Msg of + #ovs_msg{type = features_request} -> + Msg#ovs_msg{msg = features_request}; + _ -> + Msg + end, + {ok, Msg2, <<>>}. diff --git a/tests/packet_data_generator/src/x_of_protocol.erl b/tests/packet_data_generator/src/x_of_protocol.erl new file mode 100644 index 00000000..38405dbb --- /dev/null +++ b/tests/packet_data_generator/src/x_of_protocol.erl @@ -0,0 +1,33 @@ +%% Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +%% Copyright (C) 2013 YAMAMOTO Takashi +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +%% implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. + +-module(x_of_protocol). +-export([message/3, message_extract/1, encode/1, decode/1]). + +-include_lib("of_protocol/include/of_protocol.hrl"). + +message(OFPVersion, Xid, Body) -> + #ofp_message{version=OFPVersion, xid=Xid, body=Body}. + +message_extract(Msg) -> + #ofp_message{version=OFPVersion, xid=Xid, body=Body} = Msg, + {OFPVersion, Xid, Body}. + +encode(Msg) -> + of_protocol:encode(Msg). + +decode(BinMsg) -> + of_protocol:decode(BinMsg). diff --git a/tests/packet_data_generator2/Makefile.BSD b/tests/packet_data_generator2/Makefile.BSD new file mode 100644 index 00000000..a6319c42 --- /dev/null +++ b/tests/packet_data_generator2/Makefile.BSD @@ -0,0 +1,35 @@ +# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2015 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# OVS: openvswitch installed directory (used to look for libraries) +# OVS_SRC: openvswitch source directory + +OVS?=${HOME}/ovs +OVS_SRC?=/disks/774373a2-e180-11e3-9fa1-08606e7f74e7/git/openvswitch + +CPPFLAGS+=-I${OVS}/include -I${OVS_SRC} +LDFLAGS+=-L${OVS}/lib -Wl,-R${OVS}/lib -lofproto -lopenvswitch + +PROG=gen +NOMAN= + +all: generate + +generate: ${PROG} + ${_MKMSG} "generate packet_data" + cd ${.CURDIR} && ${.OBJDIR}/${PROG} + +.include diff --git a/tests/packet_data_generator2/Makefile.GNU b/tests/packet_data_generator2/Makefile.GNU new file mode 100644 index 00000000..3e037f8e --- /dev/null +++ b/tests/packet_data_generator2/Makefile.GNU @@ -0,0 +1,39 @@ +# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# OVS_SRC: openvswitch source directory +# OVS_INC: openvswitch include directory +# OVS_LIB: openvswitch library directory + +OVS_SRC=${HOME}/ovs +OVS_INC=/usr/local/include/openvswitch +OVS_LIB=/usr/local/lib + +CPPFLAGS=-std=gnu99 -I${OVS_SRC} -I${OVS_INC} +LDFLAGS=-L${OVS_LIB} -Wl,-R${OVS_LIB} -lofproto -lopenvswitch -lpthread -lssl -lrt -lm -lcrypto + +PROG=gen +NOMAN= + +all: generate + +gen: gen.c + ${CC} $^ ${CPPFLAGS} ${LDFLAGS} -o $@ + +generate: ${PROG} + ./${PROG} + +clean: + rm ${PROG} diff --git a/tests/packet_data_generator2/README b/tests/packet_data_generator2/README new file mode 100644 index 00000000..8f341709 --- /dev/null +++ b/tests/packet_data_generator2/README @@ -0,0 +1,15 @@ +This directory contains a small C program to generate +OpenFlow packet binary files [1]. They are used by some of +unit tests [2]. As we have the generated files in the repository, +you don't need to build this program unless you want to (re-)generate +the files for some reasons, typically adding new test cases. + +[1] tests/packet_data/of*/libofproto-*.packet +[2] tests.unit.ofproto.test_parser + +The program requires libofproto library provided by Open vSwitch. +It's a little tricky to build because Open vSwitch distribution +normally does not install the corresponding C header files. You need +both of the source distribution of Open vSwitch and matching installed +libraries, and override OVS_SRC and SRC make variables to point those +directries respectively. diff --git a/tests/packet_data_generator2/gen.c b/tests/packet_data_generator2/gen.c new file mode 100644 index 00000000..dbdcf4c2 --- /dev/null +++ b/tests/packet_data_generator2/gen.c @@ -0,0 +1,963 @@ +/* + * Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. + * Copyright (C) 2015 YAMAMOTO Takashi + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + * implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +/* + * OpenFlow Common + */ + +void +clear_xid(struct ofpbuf *buf) +{ + /* + * some of libofproto message encoding routines automatically + * allocate XID for the message. e.g. ofputil_encode_flow_mod + * zero-out the XID so that test_parser can perform a simple + * bit-wise comparison. + */ + + struct ofp_header *oh = ofpbuf_at_assert(buf, 0, sizeof(*oh)); + + oh->xid = htonl(0); +} + +void +fill_match(struct match *match) +{ + const struct eth_addr dl_dst = + { { { 0xaa, 0xbb, 0xcc, 0x99, 0x88, 0x77 } } }; + match_init_catchall(match); + match_set_in_port(match, 0xabcd); + match_set_dl_vlan(match, htons(999)); + match_set_dl_dst(match, dl_dst); + match_set_dl_type(match, htons(ETH_TYPE_IP)); + match_set_nw_dst(match, inet_addr("192.168.2.1")); + match_set_tun_src(match, inet_addr("192.168.2.3")); + match_set_tun_dst(match, inet_addr("192.168.2.4")); + match_set_tun_id(match, htonll(50000)); +} + +/* + * Controller-to-Switch Messages + */ + +/* + * Handshake + */ + +struct ofpbuf * +features_reply(enum ofputil_protocol proto) +{ + struct ofputil_switch_features sf; + + memset(&sf, 0, sizeof(sf)); + sf.datapath_id = 1; + sf.n_buffers = 255; + sf.n_tables = 255; + sf.auxiliary_id = 0; + sf.capabilities = OFPUTIL_C_FLOW_STATS | OFPUTIL_C_TABLE_STATS | + OFPUTIL_C_PORT_STATS | OFPUTIL_C_GROUP_STATS | + OFPUTIL_C_QUEUE_STATS; + // sf.ofpacts is for only OFP10 + + ovs_be32 xid = 0; + + return ofputil_encode_switch_features(&sf, proto, xid); +} + +/* + * Switch Configuration + */ + +struct ofpbuf * +set_config(enum ofputil_protocol proto) +{ + struct ofputil_switch_config sc; + + memset(&sc, 0, sizeof(sc)); + sc.frag = OFPUTIL_FRAG_NORMAL; + // sc.invalid_ttl_to_controller is for only OFP11 and OFP12 + sc.miss_send_len = 128; // The default of OpenFlow Spec + + return ofputil_encode_set_config( + &sc, ofputil_protocol_to_ofp_version(proto)); +} + +struct ofpbuf * +get_config_reply(enum ofputil_protocol proto) +{ + struct ofputil_switch_config sc; + struct ofp_header oh; + + memset(&oh, 0, sizeof(oh)); + oh.xid = 0; + oh.version = ofputil_protocol_to_ofp_version(proto); + memset(&sc, 0, sizeof(sc)); + sc.frag = OFPUTIL_FRAG_NORMAL; + // sc.invalid_ttl_to_controller is for only OFP11 and OFP12 + sc.miss_send_len = 128; // The default of OpenFlow Spec + + return ofputil_encode_get_config_reply(&oh, &sc); +} + +/* + * Modify State Messages + */ + +struct ofpbuf * +table_mod(enum ofputil_protocol proto) +{ + struct ofputil_table_mod tm; + + memset(&tm, 0, sizeof(tm)); + tm.table_id = 0xff; // OFPTT_ALL + // OpenFlow 1.1 and 1.2 only. + // For other versions, ignored on encoding. + tm.miss = OFPUTIL_TABLE_MISS_DEFAULT; // Protocol default behavior. + // OpenFlow 1.4+ only. + // For other versions, ignored on encoding. + tm.eviction = OFPUTIL_TABLE_EVICTION_ON; // Enable eviction. + tm.eviction_flags = OFPTMPEF14_IMPORTANCE; // Using flow entry importance. + + return ofputil_encode_table_mod(&tm, proto); +} + +struct ofpbuf * +flow_mod(enum ofputil_protocol proto) +{ + struct ofputil_flow_mod fm; + struct ofpbuf acts; + struct ofpact_ipv4 *a_set_field; + struct ofpact_goto_table *a_goto; + char *error; + + /* + * Taken from neutron OVS-agent, + * modified for OF>=1.3. (NXM -> OXM) + * NOTE(yamamoto): This needs to be writable. learn_parse() modifies it. + */ + char learn_args[] = + "table=99," + "priority=1," + "hard_timeout=300," + "OXM_OF_VLAN_VID[0..11]," + "OXM_OF_ETH_DST[]=OXM_OF_ETH_SRC[]," + "load:0->OXM_OF_VLAN_VID[]," + "load:OXM_OF_TUNNEL_ID[]->OXM_OF_TUNNEL_ID[]," + "output:OXM_OF_IN_PORT[]"; + + memset(&fm, 0, sizeof(fm)); + fm.command = OFPFC_ADD; + fm.table_id = 2; + fm.new_cookie = htonll(0x123456789abcdef0); + fm.cookie_mask = OVS_BE64_MAX; + fm.importance = 0x9878; + + fill_match(&fm.match); + + ofpbuf_init(&acts, 64); + ofpact_put_STRIP_VLAN(&acts); + a_set_field = ofpact_put_SET_IPV4_DST(&acts); + a_set_field->ipv4 = inet_addr("192.168.2.9"); + error = learn_parse(learn_args, &acts); + assert(error == NULL); + a_goto = ofpact_put_GOTO_TABLE(&acts); + a_goto->table_id = 100; + + fm.ofpacts = acts.data; + fm.ofpacts_len = acts.size; + return ofputil_encode_flow_mod(&fm, proto); +} + +struct ofpbuf * +flow_mod_match_conj(enum ofputil_protocol proto) +{ + struct ofputil_flow_mod fm; + struct ofpbuf acts; + struct ofpact_ipv4 *a_set_field; + struct ofpact_goto_table *a_goto; + + memset(&fm, 0, sizeof(fm)); + fm.command = OFPFC_ADD; + fm.table_id = 3; + fm.new_cookie = htonll(0x123456789abcdef0); + fm.cookie_mask = OVS_BE64_MAX; + fm.importance = 0x9878; + + match_init_catchall(&fm.match); + match_set_conj_id(&fm.match, 0xabcdef); + + ofpbuf_init(&acts, 64); + ofpact_put_STRIP_VLAN(&acts); + a_set_field = ofpact_put_SET_IPV4_DST(&acts); + a_set_field->ipv4 = inet_addr("192.168.2.9"); + a_goto = ofpact_put_GOTO_TABLE(&acts); + a_goto->table_id = 100; + + fm.ofpacts = acts.data; + fm.ofpacts_len = acts.size; + return ofputil_encode_flow_mod(&fm, proto); +} + +struct ofpbuf * +flow_mod_conjunction(enum ofputil_protocol proto) +{ + struct ofputil_flow_mod fm; + struct ofpbuf acts; + struct ofpact_conjunction *a_conj; + + memset(&fm, 0, sizeof(fm)); + fm.command = OFPFC_ADD; + fm.table_id = 4; + fm.new_cookie = htonll(0x123456789abcdef0); + fm.cookie_mask = OVS_BE64_MAX; + fm.importance = 0x9878; + + fill_match(&fm.match); + + ofpbuf_init(&acts, 64); + a_conj = ofpact_put_CONJUNCTION(&acts); + a_conj->id = 0xabcdef; + a_conj->clause = 1; + a_conj->n_clauses = 2; + + fm.ofpacts = acts.data; + fm.ofpacts_len = acts.size; + return ofputil_encode_flow_mod(&fm, proto); +} + +struct ofpbuf * +group_mod(enum ofputil_protocol proto) +{ + struct ofputil_group_mod gm; + struct ofpbuf acts; + struct ofpact_ipv4 *a_set_field; + struct ofpact_goto_table *a_goto; + struct ofputil_bucket bckt; + + memset(&gm, 0, sizeof(gm)); + gm.command = OFPGC15_INSERT_BUCKET; + gm.type = OFPGT11_SELECT; + gm.group_id = 0xaaaaaaaa; + gm.command_bucket_id = 0xbbbbbbbb; + + ofpbuf_init(&acts, 0x18); + ofpact_put_STRIP_VLAN(&acts); + a_set_field = ofpact_put_SET_IPV4_DST(&acts); + a_set_field->ipv4 = inet_addr("192.168.2.9"); + + bckt.weight = 0xcccc; + bckt.watch_port = 0xdddd; + bckt.watch_group = 0xeeeeeeee; + bckt.bucket_id = 0x12345678; + bckt.ofpacts = acts.data; + bckt.ofpacts_len = acts.size; + + list_init(&(gm.buckets)); + list_push_back(&(gm.buckets), &(bckt.list_node)); + + return ofputil_encode_group_mod( + ofputil_protocol_to_ofp_version(proto), &gm); +} + +struct ofpbuf * +port_mod(enum ofputil_protocol proto) +{ + struct ofputil_port_mod pm; + const struct eth_addr hw_addr = + { { { 0xaa, 0xbb, 0xcc, 0x99, 0x88, 0x77 } } }; + + memset(&pm, 0, sizeof(pm)); + pm.port_no = 1; + pm.hw_addr = hw_addr; + pm.config = OFPPC_PORT_DOWN; + pm.mask = OFPPC_PORT_DOWN; + pm.advertise = 10248; // OFPPF_100MB_FD, OFPPF_COPPER, OFPPF_AUTONEG + + return ofputil_encode_port_mod(&pm, proto); +} + +struct ofpbuf * +meter_mod(enum ofputil_protocol proto) +{ + const int N_BANDS = 2; + struct ofputil_meter_mod mm; + struct ofputil_meter_band bands[N_BANDS]; + + memset(bands, 0, sizeof(*bands)*2); + bands[0].type = 1; // OFPMBT_DROP + bands[0].rate = 1000; + bands[0].burst_size = 10; + bands[1].type = 2; // OFPMBT_DSCP_REMARK + bands[1].prec_level = 1; + bands[1].rate = 1000; + bands[1].burst_size = 10; + + memset(&mm, 0, sizeof(mm)); + mm.command = 0; // OFPMC_ADD + mm.meter.meter_id = 100; + mm.meter.flags = 14; // OFPMF_PKTPS, OFPMF_BURST, OFPMF_STATS + mm.meter.n_bands = N_BANDS; + mm.meter.bands = bands; + + return ofputil_encode_meter_mod( + ofputil_protocol_to_ofp_version(proto), &mm); +} + +/* + * Multipart Messages + */ + +struct ofpbuf * +aggregate_stats_request(enum ofputil_protocol proto) +{ + struct ofputil_flow_stats_request fsr; + + memset(&fsr, 0, sizeof(fsr)); + fsr.aggregate = true; + match_init_catchall(&fsr.match); + fsr.out_port = OFPP_ANY; + fsr.out_group = OFPG_ANY; + fsr.table_id = OFPTT_ALL; + fsr.cookie = fsr.cookie_mask = htonll(0); + + return ofputil_encode_flow_stats_request(&fsr, proto); +} + +struct ofpbuf * +port_stats_request(enum ofputil_protocol proto) +{ + uint32_t port_no = 0xffffffff; + return ofputil_encode_dump_ports_request( + ofputil_protocol_to_ofp_version(proto), port_no); +} + +struct ofpbuf * +port_desc_request(enum ofputil_protocol proto) +{ + uint32_t port_no = 0xbcda; + + return ofputil_encode_port_desc_stats_request( + ofputil_protocol_to_ofp_version(proto), port_no); +} + +struct ofpbuf * +queue_stats_request(enum ofputil_protocol proto) +{ + struct ofputil_queue_stats_request oqsr; + memset(&oqsr, 0, sizeof(oqsr)); + oqsr.port_no = 0xabcd; + oqsr.queue_id = 0xffffffff; + return ofputil_encode_queue_stats_request( + ofputil_protocol_to_ofp_version(proto), &oqsr); +} + +struct ofpbuf * +group_stats_request(enum ofputil_protocol proto) +{ + uint32_t group_id = 0xfffffffc; + return ofputil_encode_group_stats_request( + ofputil_protocol_to_ofp_version(proto), group_id); +} + +struct ofpbuf * +group_desc_request(enum ofputil_protocol proto) +{ + uint32_t group_id = 0xcdab; + + return ofputil_encode_group_desc_request( + ofputil_protocol_to_ofp_version(proto), group_id); +} + +struct ofpbuf * +group_features_request(enum ofputil_protocol proto) +{ + return ofputil_encode_group_features_request( + ofputil_protocol_to_ofp_version(proto)); +} + +struct ofpbuf * +meter_stats_request(enum ofputil_protocol proto) +{ + uint32_t meter_id = 0xffffffff; + return ofputil_encode_meter_request( + ofputil_protocol_to_ofp_version(proto), + OFPUTIL_METER_STATS, meter_id); +} + +struct ofpbuf * +table_desc_request(enum ofputil_protocol proto) +{ + return ofputil_encode_table_desc_request( + ofputil_protocol_to_ofp_version(proto)); +} + +/* + * Barrier Message + */ + +struct ofpbuf * +barrier_request(enum ofputil_protocol proto) +{ + return ofputil_encode_barrier_request( + ofputil_protocol_to_ofp_version(proto)); +} + +/* + * Bundle messages + */ + +struct ofpbuf * +bundle_ctrl(enum ofputil_protocol proto) +{ + struct ofputil_bundle_ctrl_msg msg; + struct ofp_header oh; + + memset(&oh, 0, sizeof(oh)); + oh.xid = 0; + oh.version = ofputil_protocol_to_ofp_version(proto); + memset(&msg, 0, sizeof(msg)); + msg.bundle_id = 99999999; + msg.type = OFPBCT_OPEN_REPLY; + msg.flags = OFPBF_ATOMIC; + return ofputil_encode_bundle_ctrl_reply(&oh, &msg); +} + +struct ofpbuf * +bundle_add(enum ofputil_protocol proto) +{ + struct ofputil_bundle_add_msg msg; + struct ofpbuf *fm; + struct ofpbuf *add; + + memset(&msg, 0, sizeof(msg)); + msg.bundle_id = 99999999; + msg.flags = OFPBF_ATOMIC; + fm = flow_mod(proto); + clear_xid(fm); + msg.msg = fm->data; + add = ofputil_encode_bundle_add( + ofputil_protocol_to_ofp_version(proto), &msg); + ofpbuf_delete(fm); + return add; +} + +/* + * Asynchronous Messages + */ + +struct ofpbuf * +packet_in(enum ofputil_protocol proto) +{ + struct ofputil_packet_in pin; + struct match match; + struct ofpbuf *buf; + + memset(&pin, 0, sizeof(pin)); + pin.packet = "hoge"; + pin.packet_len = 4; + pin.total_len = 1000; + pin.table_id = 100; + pin.buffer_id = 200; + + fill_match(&match); + flow_get_metadata(&match.flow, &pin.flow_metadata); + + return ofputil_encode_packet_in(&pin, proto, NXPIF_OPENFLOW10); +} + +struct ofpbuf * +flow_removed(enum ofputil_protocol proto) +{ + struct ofputil_flow_removed fr; + + memset(&fr, 0, sizeof(fr)); + fill_match(&fr.match); + fr.cookie = htonll(0x123456789abcdef0); + fr.priority = 100; + fr.reason = 0; // OFPRR_IDLE_TIMEOUT + fr.table_id = 1; + fr.duration_sec = 600; + fr.duration_nsec = 500; + fr.idle_timeout = 400; + fr.hard_timeout = 300; + fr.packet_count = 200; + fr.byte_count = 100; + + return ofputil_encode_flow_removed(&fr, proto); +} + +struct ofpbuf * +port_status(enum ofputil_protocol proto) +{ + struct ofputil_port_status ps; + + memset(&ps, 0, sizeof(ps)); + ps.reason = 2; // OFPPR_MODIFY + ps.desc.port_no = 1; + memset(&ps.desc.hw_addr, 0xff, sizeof(ps.desc.hw_addr)); + sprintf(ps.desc.name, "eth0"); + ps.desc.config = 0; + ps.desc.state = 4; + ps.desc.curr = 10248; // OFPPF_100MB_FD, OFPPF_COPPER, OFPPF_AUTONEG + ps.desc.advertised = 10248; + ps.desc.supported = 10248; + ps.desc.peer = 10248; + ps.desc.curr_speed = 50000; // kbps + ps.desc.max_speed = 100000; // kbps + + return ofputil_encode_port_status(&ps, proto); +} + + +struct ofpbuf * +role_status(enum ofputil_protocol proto) +{ + struct ofputil_role_status rs; + + memset(&rs, 0, sizeof(rs)); + rs.role = OFPCR12_ROLE_SLAVE; // OFPCR_ROLE_SLAVE + rs.reason = OFPCRR_MASTER_REQUEST; // OFPCRR_MASTER_REQUEST + rs.generation_id = htonll(0x123456789abcdef0); + + return ofputil_encode_role_status(&rs, proto); +} + + +struct ofpbuf * +requestforward(enum ofputil_protocol proto) +{ + struct ofputil_requestforward rf; + + memset(&rf, 0, sizeof(rf)); + rf.reason = OFPRFR_GROUP_MOD; + + struct ofputil_group_mod gm; + struct ofpbuf acts; + struct ofpact_ipv4 *a_set_field; + struct ofpact_goto_table *a_goto; + struct ofputil_bucket bckt; + + memset(&gm, 0, sizeof(gm)); + gm.command = OFPGC15_INSERT_BUCKET; + gm.type = OFPGT11_SELECT; + gm.group_id = 0xaaaaaaaa; + gm.command_bucket_id = 0xbbbbbbbb; + + ofpbuf_init(&acts, 0x18); + ofpact_put_STRIP_VLAN(&acts); + a_set_field = ofpact_put_SET_IPV4_DST(&acts); + a_set_field->ipv4 = inet_addr("192.168.2.9"); + + bckt.weight = 0xcccc; + bckt.watch_port = 0xdddd; + bckt.watch_group = 0xeeeeeeee; + bckt.bucket_id = 0x12345678; + bckt.ofpacts = acts.data; + bckt.ofpacts_len = acts.size; + + list_init(&(gm.buckets)); + list_push_back(&(gm.buckets), &(bckt.list_node)); + + rf.group_mod = &gm; + + return ofputil_encode_requestforward(&rf, proto); +} + +/* + * Symmetric Messages + */ + +struct ofpbuf * +hello(enum ofputil_protocol proto) +{ + return ofputil_encode_hello(ofputil_protocols_to_version_bitmap(proto)); +} + +struct ofpbuf * +echo_request(enum ofputil_protocol proto) +{ + return make_echo_request(ofputil_protocol_to_ofp_version(proto)); +} + +struct ofpbuf * +echo_reply(enum ofputil_protocol proto) +{ + struct ofp_header oh; + + memset(&oh, 0, sizeof(oh)); + oh.version = ofputil_protocol_to_ofp_version(proto); + oh.type = 3; // OFPT_ECHO_REPLY + oh.length = htons(8); // lenght of ofp_header + oh.xid = 0; + + return make_echo_reply(&oh); +} + +struct ofpbuf * +error_msg(enum ofputil_protocol proto) +{ + struct ofp_header oh; + + memset(&oh, 0, sizeof(oh)); + oh.version = ofputil_protocol_to_ofp_version(proto); + oh.type = 14; // OFPT_FLOW_MOD + oh.length = htons(8); // lenght of ofp_header + oh.xid = 0; + + // OFPERR_OFPBMC_BAD_FIELD means + // "Unsupported field in the match." + // - type: OFPET_BAD_MATCH = 4 + // - code: OFPBMC_BAD_FIELD = 6 + return ofperr_encode_reply(OFPERR_OFPBMC_BAD_FIELD, &oh); +} + +/* + * Utilities + */ + +void +dump_ofpbuf(const char *name, const struct ofpbuf *buf) +{ + FILE *fp; + size_t written; + + fp = fopen(name, "wb"); + if (fp == NULL) { + err(1, "fopen"); + } + written = fwrite(buf->data, buf->size, 1, fp); + if (written != 1) { + err(1, "fwrite"); + } + if (fclose(fp) != 0) { + err(1, "fclose"); + } +} + +void +dump_message(const char *name, struct ofpbuf *buf) +{ + + ofpmsg_update_length(buf); + dump_ofpbuf(name, buf); +} + +struct protocol_version { + const char *name; + const char *dir_name; + enum ofp_version version; +}; + +#define P(v) {.name = "OFP" #v, .dir_name = "of" #v, \ + .version = OFP ## v ## _VERSION,} + +const struct protocol_version p13 = P(13); +const struct protocol_version p15 = P(15); + +struct message { + const char *name; + struct ofpbuf *(*gen)(enum ofputil_protocol); + const struct protocol_version **protocols; +}; + +#define M(m, p) {.name = #m, .gen = m, .protocols = p,} + +const struct message messages[] = { + /* Controller-to-Switch Messages */ + /* Handshake */ + // TODO: + // The following messages are not supported in Open vSwitch 2.5.90, + // re-generate the packet data, later. + // - OFP10+ Features Request Message + // M(features_request, + // ((const struct protocol_version *[]){&p13, &p15, NULL})), + M(features_reply, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + /* Switch Configuration */ + // TODO: + // The following messages are not supported in Open vSwitch 2.5.90, + // re-generate the packet data, later. + // - OFP10+ Get Switch Configuration Request Message + M(set_config, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + // M(get_config_request, + // ((const struct protocol_version *[]){&p13, &p15, NULL})), + M(get_config_reply, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + /* Modify State Messages */ + // TODO: + // The following messages are not supported in Open vSwitch 2.4.90, + // re-generate the packet data, later. + // - OFP14+ Port Modification Message [EXT-154] + M(table_mod, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + M(flow_mod, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + M(flow_mod_match_conj, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + M(flow_mod_conjunction, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + M(group_mod, + ((const struct protocol_version *[]){&p15, NULL})), + M(port_mod, + ((const struct protocol_version *[]){&p13, NULL})), + M(meter_mod, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + /* Multipart Messages */ + // TODO: + // The following messages are not supported in Open vSwitch 2.4.90, + // re-generate the packet data, later. + // - OFP10+ Desc Stats Request Message + // - OFP10+ Desc Stats Reply Message + // - OFP15+ Flow Desc Request Message [EXT-334] + // - OFP15+ Flow Desc Reply Message [EXT-334] + // - OFP15+ Flow Stats Request Message [EXT-302] + // - OFP15+ Flow Stats Reply Message [EXT-334] + // - OFP15+ Aggregate Stats Reply Message [EXT-334] + // - OFP14+ Port Stats Reply Message [EXT-262] + // - OFP14+ Port Desc Reply Message [EXT-262] + // - OFP14+ Queue Stats Reply Message [EXT-262] + // - OFP14+ Queue Desc Request Message [EXT-262] + // - OFP14+ Queue Desc Reply Message [EXT-262] + // - OFP13+ Group Stats Reply Message [EXT-102] + // - OFP15+ Group Desc Reply Message [EXT-350] + // - OFP12+ Group Features Reply Message [EXT-61] + // - OFP15+ Meter Stats Reply Message [EXT-374] + // - OFP15+ Meter Desc Request Message [EXT-302] + // - OFP15+ Meter Desc Reply Message [EXT-302] + // - OFP13+ Meter Features Stats Request Message [EXT-14] + // - OFP13+ Meter Features Stats Reply Message [EXT-14] + // - OFP15+ Controller Status Stats Request Message [EXT-454] + // - OFP15+ Controller Status Stats Reply Message [EXT-454] + // - OFP14+ Table Desc Reply Message [EXT-262] + // - OFP15+ Table Features Stats Request Message [EXT-306] + // - OFP15+ Table Features Stats Reply Message [EXT-306] + // - OFP14+ Flow Monitor Request Message [EXT-187] + // - OFP14+ Flow Monitor Reply Message [EXT-187] + // - OFP15+ Bundle Features Stats Request Message [EXT-340] + // - OFP15+ Bundle Features Stats Reply Message [EXT-340] + // - OFP11+ Experimenter Stats Request + // - OFP11+ Experimenter Stats Reply + // M(desc_stats_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(desc_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(flow_desc_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(flow_desc_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(flow_stats_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(flow_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + M(aggregate_stats_request, + ((const struct protocol_version *[]){&p15, NULL})), + // M(aggregate_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + M(port_stats_request, + ((const struct protocol_version *[]){&p15, NULL})), + // M(port_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + M(port_desc_request, + ((const struct protocol_version *[]){&p15, NULL})), + // M(port_desc_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + M(queue_stats_request, + ((const struct protocol_version *[]){&p15, NULL})), + // M(queue_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(queue_desc_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(queue_desc_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + M(group_stats_request, + ((const struct protocol_version *[]){&p15, NULL})), + // M(group_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + M(group_desc_request, + ((const struct protocol_version *[]){&p15, NULL})), + // M(group_desc_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + M(group_features_request, + ((const struct protocol_version *[]){&p15, NULL})), + // M(group_features_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + M(meter_stats_request, + ((const struct protocol_version *[]){&p15, NULL})), + // M(meter_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(meter_desc_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(meter_desc_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(meter_features_stats_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(meter_features_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(controller_status_stats_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(controller_status_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + M(table_desc_request, + ((const struct protocol_version *[]){&p15, NULL})), + // M(table_desc_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(table_features_stats_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(table_features_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(flow_monitor_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(flow_monitor_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(bundle_features_stats_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(bundle_features_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(experimenter_stats_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(experimenter_stats_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + /* Packet-Out Message */ + // TODO: + // The following message are not supported in Open vSwitch 2.4.90, + // re-generate the packet data, later. + // - OFP15+ Packet Out Message [EXT-427] + // M(packet_out, + // ((const struct protocol_version *[]){&p15, NULL})), + /* Barrier Message */ + // TODO: + // The following message are not supported in Open vSwitch 2.4.90, + // re-generate the packet data, later. + // - OFP10+ Barrier Reply Message + M(barrier_request, + ((const struct protocol_version *[]){&p15, NULL})), + // M(barrier_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + /* Role Request Message */ + // TODO: + // The following messages are not supported in Open vSwitch 2.4.90, + // re-generate the packet data, later. + // - OFP15+ Role Request Message [EXT-275] + // - OFP15+ Role Reply Message [EXT-275] + // M(role_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(role_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + /* Bundle messages */ + M(bundle_ctrl, + ((const struct protocol_version *[]){&p15, NULL})), + M(bundle_add, + ((const struct protocol_version *[]){&p15, NULL})), + /* Set Asynchronous Configuration Message */ + // TODO: + // The following messages are not supported in Open vSwitch 2.4.90, + // re-generate the packet data, later. + // - OFP14+ Set Async Message [EXT-262] + // - OFP14+ Get Async Request Message [EXT-262] + // - OFP14+ Get Async Reply Message [EXT-262] + // M(set_async, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(get_async_request, + // ((const struct protocol_version *[]){&p15, NULL})), + // M(get_async_reply, + // ((const struct protocol_version *[]){&p15, NULL})), + /* Asynchronous Messages */ + // TODO: + // The following messages are not supported in Open vSwitch 2.4.90, + // re-generate the packet data, later. + // - OFP15 Flow Removed Message [EXT-334] + // - OFP14+ Port Status Message [EXT-154] + // - OFP14+ Table Status Message [EXT-232] + // - OFP15+ Controller Status Message [EXT-454] + M(packet_in, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + M(flow_removed, + ((const struct protocol_version *[]){&p13, NULL})), + M(port_status, + ((const struct protocol_version *[]){&p13, NULL})), + // M(table_status, + // ((const struct protocol_version *[]){&p15, NULL})), + M(role_status, + ((const struct protocol_version *[]){&p15, NULL})), + M(requestforward, + ((const struct protocol_version *[]){&p15, NULL})), + // M(controller_status, + // ((const struct protocol_version *[]){&p15, NULL})), + /* Symmetric Messages */ + M(hello, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + M(echo_request, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + M(echo_reply, + ((const struct protocol_version *[]){&p13, &p15, NULL})), + M(error_msg, + ((const struct protocol_version *[]){&p13, &p15, NULL})), +}; + +#if !defined(__arraycount) +#define __arraycount(a) (sizeof(a) / sizeof(a[0])) +#endif + +/* + * Main + */ + +int +main(int argc, char *argv[]) +{ + struct ofpbuf *buf; + unsigned int i, j; + + for (i = 0; i < __arraycount(messages); i++) { + const struct message * const m = &messages[i]; + char name[255]; + + for (j = 0;; j++) { + const struct protocol_version * const p = m->protocols[j]; + + if (p == NULL) { + break; + } + const enum ofputil_protocol proto = + ofputil_protocol_from_ofp_version(p->version); + + buf = (*m->gen)(proto); + snprintf(name, sizeof(name), + "../packet_data/%s/libofproto-%s-%s.packet", + p->dir_name, p->name, m->name); + printf("generating %s ...\n", name); + clear_xid(buf); + dump_message(name, buf); + ofpbuf_delete(buf); + } + } +} diff --git a/tests/packet_data_generator3/gen.py b/tests/packet_data_generator3/gen.py new file mode 100644 index 00000000..92676e46 --- /dev/null +++ b/tests/packet_data_generator3/gen.py @@ -0,0 +1,329 @@ +#! /usr/bin/env python + +from __future__ import print_function + +import getopt +import os +import six +from six.moves import socketserver +import subprocess +import sys +import tempfile +import threading + +from ryu.ofproto import ofproto_parser +from ryu.ofproto import ofproto_v1_0 +from ryu.ofproto import ofproto_v1_0_parser +from ryu.ofproto import ofproto_v1_5 +from ryu.ofproto import ofproto_v1_5_parser +from ryu.ofproto import ofproto_protocol + +if six.PY3: + TimeoutExpired = subprocess.TimeoutExpired +else: + # As python2 doesn't have timeout for subprocess.call, + # this script may hang. + TimeoutExpired = None + +STD_MATCH = [ + 'in_port=43981', + 'dl_vlan=999', + 'dl_dst=aa:bb:cc:99:88:77', + 'dl_type=0x0800', # ETH_TYPE_IP + 'nw_dst=192.168.2.1', + 'tun_src=192.168.2.3', + 'tun_dst=192.168.2.4', + 'tun_id=50000'] + +MESSAGES = [ + {'name': 'action_learn', + 'versions': [4], + 'cmd': 'add-flow', + 'args': ['table=2', + 'importance=39032'] + STD_MATCH + [ + 'actions=strip_vlan,mod_nw_dst:192.168.2.9,' + + 'learn(table=99,priority=1,hard_timeout=300,' + + 'OXM_OF_VLAN_VID[0..11],' + + 'OXM_OF_ETH_DST[]=OXM_OF_ETH_SRC[],' + + 'load:0->OXM_OF_VLAN_VID[],' + + 'load:OXM_OF_TUNNEL_ID[]->OXM_OF_TUNNEL_ID[],' + + 'output:OXM_OF_IN_PORT[]),goto_table:100']}, + {'name': 'match_conj', + 'versions': [4], + 'cmd': 'mod-flows', + 'args': ['table=3', + 'cookie=0x123456789abcdef0/0xffffffffffffffff', + 'dl_vlan=1234', + 'conj_id=0xabcdef', + 'actions=strip_vlan,goto_table:100']}, + {'name': 'match_pkt_mark', + 'versions': [4], + 'cmd': 'mod-flows', + 'args': ['table=3', + 'cookie=0x123456789abcdef0/0xffffffffffffffff', + 'dl_vlan=1234', + 'pkt_mark=54321', + 'actions=strip_vlan,goto_table:100']}, + {'name': 'match_pkt_mark_masked', + 'versions': [4], + 'cmd': 'mod-flows', + 'args': ['table=3', + 'cookie=0x123456789abcdef0/0xffffffffffffffff', + 'dl_vlan=1234', + 'pkt_mark=0xd431/0xffff', + 'actions=strip_vlan,goto_table:100']}, + {'name': 'action_conjunction', + 'versions': [4], + 'cmd': 'mod-flows', + 'args': (['table=2', + 'cookie=0x123456789abcdef0/0xffffffffffffffff'] + + STD_MATCH + + ['actions=conjunction(0xabcdef,1/2)'])}, + {'name': 'match_load_nx_register', + 'versions': [4], + 'cmd': 'mod-flows', + 'args': ['table=3', + 'cookie=0x123456789abcdef0/0xffffffffffffffff', + 'reg0=0x1234', + 'reg5=0xabcd/0xffff', + 'actions=load:0xdeadbee->NXM_NX_REG0[4..31]']}, + {'name': 'match_move_nx_register', + 'versions': [4], + 'cmd': 'mod-flows', + 'args': ['table=3', + 'cookie=0x123456789abcdef0/0xffffffffffffffff', + 'reg0=0x1234', + 'reg5=0xabcd/0xffff', + 'actions=move:NXM_NX_REG0[10..15]->NXM_NX_REG1[0..5]']}, + {'name': 'action_resubmit', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['table=3', + 'importance=39032'] + + STD_MATCH + + ['actions=resubmit(1234,99)'])}, + {'name': 'action_ct', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['table=3,', + 'importance=39032'] + + ['dl_type=0x0800,ct_state=-trk'] + + ['actions=ct(table=4,zone=NXM_NX_REG0[4..31])'])}, + {'name': 'action_ct_exec', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['table=3,', + 'importance=39032'] + + ['dl_type=0x0800,ct_state=+trk+est'] + + ['actions=ct(commit,exec(set_field:0x654321->ct_mark))'])}, + {'name': 'action_ct_nat', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['table=3,', + 'importance=39032'] + + ['dl_type=0x0800'] + + ['actions=ct(commit,nat(src=10.1.12.0-10.1.13.255:1-1023)'])}, + {'name': 'action_ct_nat_v6', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['table=3,', + 'importance=39032'] + + ['dl_type=0x86dd'] + + ['actions=ct(commit,nat(dst=2001:1::1-2001:1::ffff)'])}, + {'name': 'action_note', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['priority=100'] + + ['actions=note:04.05.06.07.00.00'])}, + {'name': 'action_controller', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['priority=100'] + + ['actions=controller(reason=packet_out,max_len=1024,id=1)'])}, + {'name': 'action_fintimeout', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['priority=100,tcp'] + + ['actions=fin_timeout(idle_timeout=30,hard_timeout=60)'])}, + {'name': 'action_dec_nw_ttl', + 'versions': [1], + 'cmd': 'add-flow', + 'args': (['priority=100,mpls'] + + ['actions=dec_ttl'])}, + {'name': 'action_push_mpls', + 'versions': [1], + 'cmd': 'add-flow', + 'args': (['priority=100,ip'] + + ['actions=push_mpls:0x8847'])}, + {'name': 'action_pop_mpls', + 'versions': [1], + 'cmd': 'add-flow', + 'args': (['priority=100,mpls'] + + ['actions=pop_mpls:0x0800'])}, + {'name': 'action_set_mpls_ttl', + 'versions': [1], + 'cmd': 'add-flow', + 'args': (['priority=100,mpls'] + + ['actions=set_mpls_ttl(127)'])}, + {'name': 'action_dec_mpls_ttl', + 'versions': [1], + 'cmd': 'add-flow', + 'args': (['priority=100,mpls'] + + ['actions=dec_mpls_ttl'])}, + {'name': 'action_set_mpls_label', + 'versions': [1], + 'cmd': 'add-flow', + 'args': (['priority=100,mpls'] + + ['actions=set_mpls_label(10)'])}, + {'name': 'action_set_mpls_tc', + 'versions': [1], + 'cmd': 'add-flow', + 'args': (['priority=100,mpls'] + + ['actions=set_mpls_tc(10)'])}, + {'name': 'action_dec_ttl_cnt_ids', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['priority=100,tcp'] + + ['actions=dec_ttl(1,2,3,4,5)'])}, + {'name': 'action_stack_push', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['priority=100'] + + ['actions=push:NXM_NX_REG2[1..5]'])}, + {'name': 'action_stack_pop', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['priority=100'] + + ['actions=pop:NXM_NX_REG2[1..5]'])}, + {'name': 'action_sample', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['priority=100'] + + ['actions=sample(probability=3,collector_set_id=1,' + + 'obs_domain_id=2,obs_point_id=3)'])}, + {'name': 'action_sample2', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['priority=100'] + + ['actions=sample(probability=3,collector_set_id=1,' + + 'obs_domain_id=2,obs_point_id=3,sampling_port=8080)'])}, + {'name': 'action_controller2', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['priority=100'] + + ['actions=controller(reason=packet_out,max_len=1024,' + + 'id=10,userdata=01.02.03.04.05,pause)'])}, + {'name': 'action_output_trunc', + 'versions': [4], + 'cmd': 'add-flow', + 'args': (['priority=100'] + + ['actions=output(port=8080,max_len=1024)'])}, + + + # ToDo: The following actions are not eligible + # {'name': 'action_regload2'}, + # {'name': 'action_outputreg2'}, +] + +buf = [] + + +class MyHandler(socketserver.BaseRequestHandler): + verbose = False + + def handle(self): + desc = ofproto_protocol.ProtocolDesc() + residue = b'' + while True: + if residue: + data = residue + residue = b'' + else: + data = self.request.recv(1024) + if data == b'': + break + if self.verbose: + print(data) + h = ofproto_parser.header(data) + if self.verbose: + print(h) + version, msg_type, msg_len, xid = h + residue = data[msg_len:] + desc.set_version(version=version) + if msg_type == desc.ofproto.OFPT_HELLO: + hello = desc.ofproto_parser.OFPHello(desc) + hello.serialize() + self.request.send(hello.buf) + elif msg_type == desc.ofproto.OFPT_FLOW_MOD: + # HACK: Clear xid into zero + buf.append(data[:4] + b'\x00\x00\x00\x00' + data[8:msg_len]) + elif msg_type == desc.ofproto.OFPT_BARRIER_REQUEST: + brep = desc.ofproto_parser.OFPBarrierReply(desc) + brep.xid = xid + brep.serialize() + self.request.send(brep.buf) + break + + +class MyVerboseHandler(MyHandler): + verbose = True + +if __name__ == '__main__': + optlist, args = getopt.getopt(sys.argv[1:], 'dvo:') + debug = False + ofctl_cmd = '/usr/bin/ovs-ofctl' + verbose = False + for o, a in optlist: + if o == '-d': + debug = True + elif o == '-v': + verbose = True + elif o == '-o': + ofctl_cmd = a + + if not os.access(ofctl_cmd, os.X_OK): + raise Exception("%s is not executable" % ofctl_cmd) + outpath = '../packet_data' + socketdir = tempfile.mkdtemp() + socketname = os.path.join(socketdir, 'ovs') + server = socketserver.UnixStreamServer(socketname, + MyVerboseHandler if verbose else + MyHandler) + if debug or verbose: + print("Serving at %s" % socketname) + + for msg in MESSAGES: + for v in msg['versions']: + cmdargs = [ofctl_cmd, '-O', 'OpenFlow%2d' % (v + 9)] + if verbose: + cmdargs.append('-v') + cmdargs.append(msg['cmd']) + cmdargs.append('unix:%s' % socketname) + cmdargs.append('\n'.join(msg['args'])) + if verbose: + print("Running cmd: " + ' '.join(cmdargs) + "\n") + t = threading.Thread(target=subprocess.call, args=[cmdargs], + kwargs={'timeout': 5}) + t.start() + server.handle_request() + if debug: + print(buf.pop()) + else: + outf = os.path.join( + outpath, "of%d" % (v + 9), + "ovs-ofctl-of%d-%s.packet" % (v + 9, msg['name'])) + print("Writing %s..." % outf) + with open(outf, 'wb') as f: + f.write(buf.pop()) + try: + t.join() + except TimeoutExpired as e: + print(e) + + if debug: + while True: + server.handle_request() + print(buf.pop()) + + os.unlink(socketname) + os.rmdir(socketdir) diff --git a/tests/run_tests.py b/tests/run_tests.py new file mode 100755 index 00000000..133c7e7e --- /dev/null +++ b/tests/run_tests.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python + + +import os +import sys + +from nose import config +from nose import core + +sys.path.append(os.getcwd()) +sys.path.append(os.path.dirname(__file__)) + + +import tests.unit +from tests.test_lib import run_tests + + +if __name__ == '__main__': + exit_status = False + + # if a single test case was specified, + # we should only invoked the tests once + invoke_once = len(sys.argv) > 1 + + cwd = os.getcwd() + c = config.Config(stream=sys.stdout, + env=os.environ, + verbosity=int(os.environ.get('NOSE_VERBOSE', 3)), + includeExe=True, + traverseNamespace=True, + plugins=core.DefaultPluginManager()) + c.configureWhere(tests.unit.__path__) + + exit_status = run_tests(c) + sys.exit(exit_status) diff --git a/tests/test_lib.py b/tests/test_lib.py new file mode 100644 index 00000000..c1c0f82e --- /dev/null +++ b/tests/test_lib.py @@ -0,0 +1,270 @@ +# Copyright (C) 2013,2014,2015 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013,2014,2015 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import gettext +import os +import unittest +import six +import sys +import types +import logging + +from nose import result +from nose import core +from nose import config + + +class _AnsiColorizer(object): + """ + A colorizer is an object that loosely wraps around a stream, allowing + callers to write text to the stream in a particular color. + + Colorizer classes must implement C{supported()} and C{write(text, color)}. + """ + _colors = dict(black=30, red=31, green=32, yellow=33, + blue=34, magenta=35, cyan=36, white=37) + + def __init__(self, stream): + self.stream = stream + + def supported(cls, stream=sys.stdout): + """ + A class method that returns True if the current platform supports + coloring terminal output using this method. Returns False otherwise. + """ + if not stream.isatty(): + return False # auto color only on TTYs + try: + import curses + except ImportError: + return False + else: + try: + try: + return curses.tigetnum("colors") > 2 + except curses.error: + curses.setupterm() + return curses.tigetnum("colors") > 2 + except: + # guess false in case of error + return False + supported = classmethod(supported) + + def write(self, text, color): + """ + Write the given text to the stream in the given color. + + @param text: Text to be written to the stream. + + @param color: A string label for a color. e.g. 'red', 'white'. + """ + color = self._colors[color] + self.stream.write('\x1b[%s;1m%s\x1b[0m' % (color, text)) + + +class _Win32Colorizer(object): + """ + See _AnsiColorizer docstring. + """ + def __init__(self, stream): + from win32console import GetStdHandle, STD_OUT_HANDLE + from win32console import FOREGROUND_RED, FOREGROUND_BLUE + from win32console import FOREGROUND_GREEN, FOREGROUND_INTENSITY + red, green, blue, bold = (FOREGROUND_RED, FOREGROUND_GREEN, + FOREGROUND_BLUE, FOREGROUND_INTENSITY) + self.stream = stream + self.screenBuffer = GetStdHandle(STD_OUT_HANDLE) + self._colors = { + 'normal': red | green | blue, + 'red': red | bold, + 'green': green | bold, + 'blue': blue | bold, + 'yellow': red | green | bold, + 'magenta': red | blue | bold, + 'cyan': green | blue | bold, + 'white': red | green | blue | bold} + + def supported(cls, stream=sys.stdout): + try: + import win32console + screenBuffer = win32console.GetStdHandle( + win32console.STD_OUT_HANDLE) + except ImportError: + return False + import pywintypes + try: + screenBuffer.SetConsoleTextAttribute( + win32console.FOREGROUND_RED | + win32console.FOREGROUND_GREEN | + win32console.FOREGROUND_BLUE) + except pywintypes.error: + return False + else: + return True + supported = classmethod(supported) + + def write(self, text, color): + color = self._colors[color] + self.screenBuffer.SetConsoleTextAttribute(color) + self.stream.write(text) + self.screenBuffer.SetConsoleTextAttribute(self._colors['normal']) + + +class _NullColorizer(object): + """ + See _AnsiColorizer docstring. + """ + def __init__(self, stream): + self.stream = stream + + def supported(cls, stream=sys.stdout): + return True + supported = classmethod(supported) + + def write(self, text, color): + self.stream.write(text) + + +class RyuTestResult(result.TextTestResult): + def __init__(self, *args, **kw): + result.TextTestResult.__init__(self, *args, **kw) + self._last_case = None + self.colorizer = None + # NOTE(vish, tfukushima): reset stdout for the terminal check + stdout = sys.__stdout__ + sys.stdout = sys.__stdout__ + for colorizer in [_Win32Colorizer, _AnsiColorizer, _NullColorizer]: + if colorizer.supported(): + self.colorizer = colorizer(self.stream) + break + sys.stdout = stdout + + def getDescription(self, test): + return str(test) + + # NOTE(vish, tfukushima): copied from unittest with edit to add color + def addSuccess(self, test): + unittest.TestResult.addSuccess(self, test) + if self.showAll: + self.colorizer.write("OK", 'green') + self.stream.writeln() + elif self.dots: + self.stream.write('.') + self.stream.flush() + + # NOTE(vish, tfukushima): copied from unittest with edit to add color + def addFailure(self, test, err): + unittest.TestResult.addFailure(self, test, err) + if self.showAll: + self.colorizer.write("FAIL", 'red') + self.stream.writeln() + elif self.dots: + self.stream.write('F') + self.stream.flush() + + # NOTE(vish, tfukushima): copied from unittest with edit to add color + def addError(self, test, err): + """Overrides normal addError to add support for errorClasses. + If the exception is a registered class, the error will be added + to the list for that class, not errors. + """ + stream = getattr(self, 'stream', None) + ec, ev, tb = err + try: + exc_info = self._exc_info_to_string(err, test) + except TypeError: + # This is for compatibility with Python 2.3. + exc_info = self._exc_info_to_string(err) + for cls, (storage, label, isfail) in self.errorClasses.items(): + if result.isclass(ec) and issubclass(ec, cls): + if isfail: + test.passwd = False + storage.append((test, exc_info)) + # Might get patched into a streamless result + if stream is not None: + if self.showAll: + message = [label] + detail = result._exception_detail(err[1]) + if detail: + message.append(detail) + stream.writeln(": ".join(message)) + elif self.dots: + stream.write(label[:1]) + return + self.errors.append((test, exc_info)) + test.passed = False + if stream is not None: + if self.showAll: + self.colorizer.write("ERROR", 'red') + self.stream.writeln() + elif self.dots: + stream.write('E') + + def startTest(self, test): + unittest.TestResult.startTest(self, test) + current_case = test.test.__class__.__name__ + + if self.showAll: + if current_case != self._last_case: + self.stream.writeln(current_case) + self._last_case = current_case + # NOTE(salvatore-orlando): + # slightly changed in order to print test case class + # together with unit test name + self.stream.write( + ' %s' % str(test.test).ljust(60)) + self.stream.flush() + + +class RyuTestRunner(core.TextTestRunner): + def _makeResult(self): + return RyuTestResult(self.stream, + self.descriptions, + self.verbosity, + self.config) + + +def run_tests(c=None): + logger = logging.getLogger() + hdlr = logging.StreamHandler() + formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s') + hdlr.setFormatter(formatter) + logger.addHandler(hdlr) + logger.setLevel(logging.DEBUG) + + # NOTE(bgh): I'm not entirely sure why but nose gets confused here when + # calling run_tests from a plugin directory run_tests.py (instead of the + # main run_tests.py). It will call run_tests with no arguments and the + # testing of run_tests will fail (though the plugin tests will pass). For + # now we just return True to let the run_tests test pass. + if not c: + return True + + runner = RyuTestRunner(stream=c.stream, + verbosity=c.verbosity, + config=c) + return not core.run(config=c, testRunner=runner) + + +def add_method(cls, method_name, method): + """Add the method to the class dynamically, keeping unittest/nose happy.""" + method.func_name = method_name + method.__name__ = method_name + if six.PY3: + methodtype = types.MethodType(method, cls) + else: + methodtype = types.MethodType(method, None, cls) + setattr(cls, method_name, methodtype) diff --git a/tests/unit/__init__.py b/tests/unit/__init__.py new file mode 100644 index 00000000..de6e5a33 --- /dev/null +++ b/tests/unit/__init__.py @@ -0,0 +1,6 @@ +from __future__ import absolute_import + +# Note: The following import statement is defined in order to resolve +# the conflict of the module names between 'ryu.lib.ovs' and 'ovs'. +# The latter is the official Python package of Open vSwitch. +import ovs diff --git a/tests/unit/app/__init__.py b/tests/unit/app/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/app/ofctl_rest_json/of10.json b/tests/unit/app/ofctl_rest_json/of10.json new file mode 100644 index 00000000..266eb80c --- /dev/null +++ b/tests/unit/app/ofctl_rest_json/of10.json @@ -0,0 +1,101 @@ +[ + { + "method": "GET", + "path": "/stats/switches" + }, + { + "method": "GET", + "path": "/stats/desc/1" + }, + { + "method": "GET", + "path": "/stats/flow/1" + }, + { + "method": "POST", + "path": "/stats/flow/1" + }, + { + "method": "GET", + "path": "/stats/aggregateflow/1" + }, + { + "method": "POST", + "path": "/stats/aggregateflow/1" + }, + { + "method": "GET", + "path": "/stats/port/1" + }, + { + "method": "GET", + "path": "/stats/port/1/1" + }, + { + "method": "GET", + "path": "/stats/portdesc/1" + }, + { + "method": "GET", + "path": "/stats/queue/1" + }, + { + "method": "GET", + "path": "/stats/queue/1/1" + }, + { + "method": "GET", + "path": "/stats/queue/1/1/1" + }, + { + "method": "GET", + "path": "/stats/table/1" + }, + { + "method": "POST", + "path": "/stats/flowentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/modify_strict", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/delete_strict", + "body": { + "dpid": 1 + } + }, + { + "method": "DELETE", + "path": "/stats/flowentry/clear/1" + }, + { + "method": "POST", + "path": "/stats/portdesc/modify", + "body": { + "dpid": 1, + "port_no": 1 + } + } +] diff --git a/tests/unit/app/ofctl_rest_json/of12.json b/tests/unit/app/ofctl_rest_json/of12.json new file mode 100644 index 00000000..89a81919 --- /dev/null +++ b/tests/unit/app/ofctl_rest_json/of12.json @@ -0,0 +1,150 @@ +[ + { + "method": "GET", + "path": "/stats/switches" + }, + { + "method": "GET", + "path": "/stats/desc/1" + }, + { + "method": "GET", + "path": "/stats/flow/1" + }, + { + "method": "POST", + "path": "/stats/flow/1" + }, + { + "method": "GET", + "path": "/stats/aggregateflow/1" + }, + { + "method": "POST", + "path": "/stats/aggregateflow/1" + }, + { + "method": "GET", + "path": "/stats/port/1" + }, + { + "method": "GET", + "path": "/stats/port/1/1" + }, + { + "method": "GET", + "path": "/stats/portdesc/1" + }, + { + "method": "GET", + "path": "/stats/queue/1" + }, + { + "method": "GET", + "path": "/stats/queue/1/1" + }, + { + "method": "GET", + "path": "/stats/queue/1/1/1" + }, + { + "method": "GET", + "path": "/stats/queueconfig/1" + }, + { + "method": "GET", + "path": "/stats/queueconfig/1/1" + }, + { + "method": "GET", + "path": "/stats/group/1" + }, + { + "method": "GET", + "path": "/stats/group/1/1" + }, + { + "method": "GET", + "path": "/stats/groupdesc/1" + }, + { + "method": "GET", + "path": "/stats/groupfeatures/1" + }, + { + "method": "GET", + "path": "/stats/table/1" + }, + { + "method": "POST", + "path": "/stats/flowentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/modify_strict", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/delete_strict", + "body": { + "dpid": 1 + } + }, + { + "method": "DELETE", + "path": "/stats/flowentry/clear/1" + }, + { + "method": "POST", + "path": "/stats/groupentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/groupentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/groupentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/portdesc/modify", + "body": { + "dpid": 1, + "port_no": 1 + } + }, + { + "method": "POST", + "path": "/stats/experimenter/1" + } +] diff --git a/tests/unit/app/ofctl_rest_json/of13.json b/tests/unit/app/ofctl_rest_json/of13.json new file mode 100644 index 00000000..d515f628 --- /dev/null +++ b/tests/unit/app/ofctl_rest_json/of13.json @@ -0,0 +1,191 @@ +[ + { + "method": "GET", + "path": "/stats/switches" + }, + { + "method": "GET", + "path": "/stats/desc/1" + }, + { + "method": "GET", + "path": "/stats/flow/1" + }, + { + "method": "POST", + "path": "/stats/flow/1" + }, + { + "method": "GET", + "path": "/stats/aggregateflow/1" + }, + { + "method": "POST", + "path": "/stats/aggregateflow/1" + }, + { + "method": "GET", + "path": "/stats/port/1" + }, + { + "method": "GET", + "path": "/stats/port/1/1" + }, + { + "method": "GET", + "path": "/stats/portdesc/1" + }, + { + "method": "GET", + "path": "/stats/queue/1" + }, + { + "method": "GET", + "path": "/stats/queue/1/1" + }, + { + "method": "GET", + "path": "/stats/queue/1/1/1" + }, + { + "method": "GET", + "path": "/stats/queueconfig/1" + }, + { + "method": "GET", + "path": "/stats/queueconfig/1/1" + }, + { + "method": "GET", + "path": "/stats/group/1" + }, + { + "method": "GET", + "path": "/stats/group/1/1" + }, + { + "method": "GET", + "path": "/stats/groupdesc/1" + }, + { + "method": "GET", + "path": "/stats/groupfeatures/1" + }, + { + "method": "GET", + "path": "/stats/meter/1" + }, + { + "method": "GET", + "path": "/stats/meter/1/1" + }, + { + "method": "GET", + "path": "/stats/meterconfig/1" + }, + { + "method": "GET", + "path": "/stats/meterconfig/1/1" + }, + { + "method": "GET", + "path": "/stats/meterfeatures/1" + }, + { + "method": "GET", + "path": "/stats/table/1" + }, + { + "method": "POST", + "path": "/stats/flowentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/modify_strict", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/delete_strict", + "body": { + "dpid": 1 + } + }, + { + "method": "DELETE", + "path": "/stats/flowentry/clear/1" + }, + { + "method": "POST", + "path": "/stats/groupentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/groupentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/groupentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/portdesc/modify", + "body": { + "dpid": 1, + "port_no": 1 + } + }, + { + "method": "POST", + "path": "/stats/meterentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/meterentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/meterentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/experimenter/1" + } +] diff --git a/tests/unit/app/ofctl_rest_json/of14.json b/tests/unit/app/ofctl_rest_json/of14.json new file mode 100644 index 00000000..0cc4eb6c --- /dev/null +++ b/tests/unit/app/ofctl_rest_json/of14.json @@ -0,0 +1,195 @@ +[ + { + "method": "GET", + "path": "/stats/switches" + }, + { + "method": "GET", + "path": "/stats/desc/1" + }, + { + "method": "GET", + "path": "/stats/flow/1" + }, + { + "method": "POST", + "path": "/stats/flow/1" + }, + { + "method": "GET", + "path": "/stats/aggregateflow/1" + }, + { + "method": "POST", + "path": "/stats/aggregateflow/1" + }, + { + "method": "GET", + "path": "/stats/port/1" + }, + { + "method": "GET", + "path": "/stats/port/1/1" + }, + { + "method": "GET", + "path": "/stats/portdesc/1" + }, + { + "method": "GET", + "path": "/stats/queue/1" + }, + { + "method": "GET", + "path": "/stats/queue/1/1" + }, + { + "method": "GET", + "path": "/stats/queue/1/1/1" + }, + { + "method": "GET", + "path": "/stats/queuedesc/1" + }, + { + "method": "GET", + "path": "/stats/queuedesc/1/1" + }, + { + "method": "GET", + "path": "/stats/queuedesc/1/1/1" + }, + { + "method": "GET", + "path": "/stats/group/1" + }, + { + "method": "GET", + "path": "/stats/group/1/1" + }, + { + "method": "GET", + "path": "/stats/groupdesc/1" + }, + { + "method": "GET", + "path": "/stats/groupfeatures/1" + }, + { + "method": "GET", + "path": "/stats/meter/1" + }, + { + "method": "GET", + "path": "/stats/meter/1/1" + }, + { + "method": "GET", + "path": "/stats/meterconfig/1" + }, + { + "method": "GET", + "path": "/stats/meterconfig/1/1" + }, + { + "method": "GET", + "path": "/stats/meterfeatures/1" + }, + { + "method": "GET", + "path": "/stats/table/1" + }, + { + "method": "POST", + "path": "/stats/flowentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/modify_strict", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/delete_strict", + "body": { + "dpid": 1 + } + }, + { + "method": "DELETE", + "path": "/stats/flowentry/clear/1" + }, + { + "method": "POST", + "path": "/stats/groupentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/groupentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/groupentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/portdesc/modify", + "body": { + "dpid": 1, + "port_no": 1 + } + }, + { + "method": "POST", + "path": "/stats/meterentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/meterentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/meterentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/experimenter/1" + } +] diff --git a/tests/unit/app/ofctl_rest_json/of15.json b/tests/unit/app/ofctl_rest_json/of15.json new file mode 100644 index 00000000..a7569223 --- /dev/null +++ b/tests/unit/app/ofctl_rest_json/of15.json @@ -0,0 +1,203 @@ +[ + { + "method": "GET", + "path": "/stats/switches" + }, + { + "method": "GET", + "path": "/stats/desc/1" + }, + { + "method": "GET", + "path": "/stats/flow/1" + }, + { + "method": "POST", + "path": "/stats/flow/1" + }, + { + "method": "GET", + "path": "/stats/aggregateflow/1" + }, + { + "method": "POST", + "path": "/stats/aggregateflow/1" + }, + { + "method": "GET", + "path": "/stats/port/1" + }, + { + "method": "GET", + "path": "/stats/port/1/1" + }, + { + "method": "GET", + "path": "/stats/portdesc/1" + }, + { + "method": "GET", + "path": "/stats/portdesc/1/1" + }, + { + "method": "GET", + "path": "/stats/queue/1" + }, + { + "method": "GET", + "path": "/stats/queue/1/1" + }, + { + "method": "GET", + "path": "/stats/queue/1/1/1" + }, + { + "method": "GET", + "path": "/stats/queuedesc/1" + }, + { + "method": "GET", + "path": "/stats/queuedesc/1/1" + }, + { + "method": "GET", + "path": "/stats/queuedesc/1/1/1" + }, + { + "method": "GET", + "path": "/stats/group/1" + }, + { + "method": "GET", + "path": "/stats/group/1/1" + }, + { + "method": "GET", + "path": "/stats/groupdesc/1" + }, + { + "method": "GET", + "path": "/stats/groupdesc/1/1" + }, + { + "method": "GET", + "path": "/stats/groupfeatures/1" + }, + { + "method": "GET", + "path": "/stats/meter/1" + }, + { + "method": "GET", + "path": "/stats/meter/1/1" + }, + { + "method": "GET", + "path": "/stats/meterdesc/1" + }, + { + "method": "GET", + "path": "/stats/meterdesc/1/1" + }, + { + "method": "GET", + "path": "/stats/meterfeatures/1" + }, + { + "method": "GET", + "path": "/stats/table/1" + }, + { + "method": "POST", + "path": "/stats/flowentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/modify_strict", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/flowentry/delete_strict", + "body": { + "dpid": 1 + } + }, + { + "method": "DELETE", + "path": "/stats/flowentry/clear/1" + }, + { + "method": "POST", + "path": "/stats/groupentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/groupentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/groupentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/portdesc/modify", + "body": { + "dpid": 1, + "port_no": 1 + } + }, + { + "method": "POST", + "path": "/stats/meterentry/add", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/meterentry/modify", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/meterentry/delete", + "body": { + "dpid": 1 + } + }, + { + "method": "POST", + "path": "/stats/experimenter/1" + } +] diff --git a/tests/unit/app/test_ofctl_rest.py b/tests/unit/app/test_ofctl_rest.py new file mode 100644 index 00000000..5ed70ec4 --- /dev/null +++ b/tests/unit/app/test_ofctl_rest.py @@ -0,0 +1,138 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import functools +import json +import logging +import os +import sys +import unittest +try: + import mock # Python 2 +except ImportError: + from unittest import mock # Python 3 +from nose.tools import eq_ + +from ryu.app import ofctl_rest +from ryu.app.wsgi import Request +from ryu.app.wsgi import WSGIApplication +from ryu.controller.dpset import DPSet +from ryu.ofproto import ofproto_protocol +from ryu.ofproto import ofproto_v1_0 +from ryu.ofproto import ofproto_v1_2 +from ryu.ofproto import ofproto_v1_3 +from ryu.ofproto import ofproto_v1_4 +from ryu.ofproto import ofproto_v1_5 + +from tests import test_lib + + +LOG = logging.getLogger(__name__) + + +class DummyDatapath(ofproto_protocol.ProtocolDesc): + + def __init__(self, version): + super(DummyDatapath, self).__init__(version) + self.id = 1 + _kw = {'port_no': 1, 'hw_addr': 'aa:bb:cc:dd:ee:ff', + 'name': 's1-eth1', 'config': 1, 'state': 1} + # for OpenFlow 1.0 + if version in [ofproto_v1_0.OFP_VERSION]: + _kw.update( + {'curr': 2112, 'advertised': 0, 'supported': 0, 'peer': 0}) + port_info = self.ofproto_parser.OFPPhyPort(**_kw) + # for OpenFlow 1.2 or 1.3 + elif version in [ofproto_v1_2.OFP_VERSION, ofproto_v1_3.OFP_VERSION]: + _kw.update( + {'curr': 2112, 'advertised': 0, 'supported': 0, 'peer': 0, + 'curr_speed': 10000000, 'max_speed': 0}) + port_info = self.ofproto_parser.OFPPort(**_kw) + # for OpenFlow 1.4+ + else: + _kw.update({'properties': []}) + port_info = self.ofproto_parser.OFPPort(**_kw) + self.ports = {1: port_info} + + +class Test_ofctl_rest(unittest.TestCase): + + def _test(self, name, dp, method, path, body): + # print('processing %s ...' % name) + + dpset = DPSet() + dpset._register(dp) + wsgi = WSGIApplication() + contexts = { + 'dpset': dpset, + 'wsgi': wsgi, + } + ofctl_rest.RestStatsApi(**contexts) + + req = Request.blank(path) + req.body = json.dumps(body).encode('utf-8') + req.method = method + + with mock.patch('ryu.lib.ofctl_utils.send_stats_request'),\ + mock.patch('ryu.lib.ofctl_utils.send_msg'): + res = req.get_response(wsgi) + eq_(res.status, '200 OK') + + +def _add_tests(): + _ofp_vers = { + 'of10': ofproto_v1_0.OFP_VERSION, + 'of12': ofproto_v1_2.OFP_VERSION, + 'of13': ofproto_v1_3.OFP_VERSION, + 'of14': ofproto_v1_4.OFP_VERSION, + 'of15': ofproto_v1_5.OFP_VERSION, + } + + this_dir = os.path.dirname(sys.modules[__name__].__file__) + ofctl_rest_json_dir = os.path.join(this_dir, 'ofctl_rest_json/') + + for ofp_ver in _ofp_vers: + # read a json file + json_path = os.path.join(ofctl_rest_json_dir, ofp_ver + '.json') + if os.path.exists(json_path): + _test_cases = json.load(open(json_path)) + else: + # print("Skip to load test cases for %s" % ofp_ver) + continue + + # add test + for test in _test_cases: + method = test['method'] + path = test['path'] + body = test.get('body', {}) + + name = 'test_ofctl_rest_' + method + '_' + ofp_ver + '_' + path + # print('adding %s ...' % name) + f = functools.partial( + Test_ofctl_rest._test, + name=name, + dp=DummyDatapath(_ofp_vers[ofp_ver]), + method=test['method'], + path=test['path'], + body=body + ) + test_lib.add_method(Test_ofctl_rest, name, f) + +_add_tests() + +if __name__ == "__main__": + unittest.main() diff --git a/tests/unit/app/test_tester.py b/tests/unit/app/test_tester.py new file mode 100644 index 00000000..64657f9e --- /dev/null +++ b/tests/unit/app/test_tester.py @@ -0,0 +1,464 @@ +# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +from nose.tools import * + +import binascii +import inspect +import json +import logging +import math +import netaddr +import os +import signal +import sys +import time +import traceback +from random import randint + +from ryu import cfg + +# import all packet libraries. +PKT_LIB_PATH = 'ryu.lib.packet' +for modname, moddef in sys.modules.items(): + if not modname.startswith(PKT_LIB_PATH) or not moddef: + continue + for (clsname, clsdef, ) in inspect.getmembers(moddef): + if not inspect.isclass(clsdef): + continue + exec('from %s import %s' % (modname, clsname)) + +from ryu.base import app_manager +from ryu.controller import handler +from ryu.controller import ofp_event +from ryu.controller.handler import set_ev_cls +from ryu.exception import RyuException +from ryu.lib import dpid as dpid_lib +from ryu.lib import hub +from ryu.lib import stringify +from ryu.lib.packet import packet +from ryu.ofproto import ofproto_protocol +from ryu.ofproto import ofproto_v1_3 +from ryu.ofproto import ofproto_v1_3_parser +from ryu.ofproto import ofproto_v1_4 + +from ryu.tests.switch.tester import TestPatterns +from ryu.tests.switch.tester import TestFile +from ryu.tests.switch.tester import OfTester + +CONF = cfg.CONF + +LOG = logging.getLogger('test_tester') + +SAMPLE_DESC = "action: 00_OUTPUT" + + +class Test_tester(unittest.TestCase): + + """ Test case for tester + """ + + # action/00_OUTPUT.json + + test_json_1 = { + "description": "ethernet/ipv4/tcp-->'actions=output:2'", + "prerequisite": [ + { + "OFPFlowMod": { + "table_id": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "port": "target_send_port_1" + } + } + ], + "type": 4 + } + } + ] + } + } + ], + "tests": [ + { + "ingress": [ + "ethernet(dst='22:22:22:22:22:22', \ + src='12:11:11:11:11:11', ethertype=2048)", + "ipv4(tos=32, proto=6, src='192.168.10.10', \ + dst='192.168.20.20', ttl=64)", + "tcp(dst_port=2222, option=str('\\x00' * 4), \ + src_port=11111)", + "'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0\ + 8\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x1\ + 2\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1\ + b\\x1c\\x1d\\x1e\\x1f'" + ], + "egress":[ + "ethernet(dst='22:22:22:22:22:22', \ + src='12:11:11:11:11:11', ethertype=2048)", + "ipv4(tos=32, proto=6, src='192.168.10.10', \ + dst='192.168.20.20', ttl=64)", + "tcp(dst_port=2222, option=str('\\x00' * 4), \ + src_port=11111)", + "'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0\ + 8\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x1\ + 2\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1\ + b\\x1c\\x1d\\x1e\\x1f'" + ] + + } + ] + } + + # group/00_ALL.json + + test_json_2 = { + "description": "2Mbps(ethernet/ipv4/tcp)-->'in_port=1,\ + actions=group:all(actions=output:2/actions=output:3)'", + "prerequisite": [ + { + "OFPGroupMod": { + "group_id": 0, + "buckets": [ + { + "OFPBucket": { + "actions": [ + { + "OFPActionOutput": { + "port": "target_send_port_1" + } + } + ] + } + }, + { + "OFPBucket": { + "actions": [ + { + "OFPActionOutput": { + "port": "target_send_port_2" + } + } + ] + } + } + ] + } + }, + { + "OFPFlowMod": { + "match": { + "OFPMatch": { + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "value": "target_recv_port" + } + } + ] + } + }, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionGroup": { + "group_id": 0 + } + } + ], + "type": 4 + } + } + ] + } + } + ], + "tests": [ + { + "ingress": { + "packets": { + "data": [ + "ethernet(dst='22:22:22:22:22:22', \ + src='12:11:11:11:11:11', ethertype=2048)", + "ipv4(proto=6)", + "tcp()", + "str('\\x11' * (1500 - 54))" + ], + "pktps":175, + "duration_time":30 + } + }, + "egress":{ + "throughput": [ + { + "OFPMatch": { + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "value": "tester_recv_port_1" + } + } + ] + }, + "kbps": 2000 + }, + { + "OFPMatch": { + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "value": "tester_recv_port_2" + } + } + ] + }, + "kbps": 2000 + } + ] + } + } + ] + } + + # match/00_IN_PORT.json + + test_json_3 = { + "description": "ethernet/ipv4/tcp-->'in_port=1,actions=output:2'", + "prerequisite": [ + { + "OFPFlowMod": { + "table_id": 0, + "match": { + "OFPMatch": { + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "value": "target_recv_port" + } + } + ] + } + }, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "port": "target_send_port_1" + } + } + ], + "type": 4 + } + } + ] + } + } + ], + "tests": [ + { + "ingress": [ + "ethernet(dst='22:22:22:22:22:22', \ + src='12:11:11:11:11:11', ethertype=2048)", + "ipv4(tos=32, proto=6, src='192.168.10.10', \ + dst='192.168.20.20', ttl=64)", + "tcp(dst_port=2222, option=str('\\x00' * 4), \ + src_port=11111)", + "'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0\ + 8\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x1\ + 2\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1\ + b\\x1c\\x1d\\x1e\\x1f'" + ], + "egress":[ + "ethernet(dst='22:22:22:22:22:22', \ + src='12:11:11:11:11:11', ethertype=2048)", + "ipv4(tos=32, proto=6, src='192.168.10.10',\ + dst='192.168.20.20', ttl=64)", + "tcp(dst_port=2222, option=str('\\x00' * 4), \ + src_port=11111)", + "'\\x01\\x02\\x03\\x04\\x05\\x06\\x07\\x0\ + 8\\t\\n\\x0b\\x0c\\r\\x0e\\x0f\\x10\\x11\\x1\ + 2\\x13\\x14\\x15\\x16\\x17\\x18\\x19\\x1a\\x1\ + b\\x1c\\x1d\\x1e\\x1f'" + ] + } + ] + } + + # meter/01_DROP_00_KBPS_00_1M.json + + test_json_4 = { + "description": "2Mbps(ethernet/ipv4/tcp)-->'in_port=1,\ + actions=meter:1Mbps(drop),output:2'", + "prerequisite": [ + { + "OFPMeterMod": { + "meter_id": 1, + "bands": [ + { + "OFPMeterBandDrop": { + "rate": 1000 + } + } + ] + } + }, + { + "OFPFlowMod": { + "match": { + "OFPMatch": { + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "value": "target_recv_port" + } + } + ] + } + }, + "instructions": [ + { + "OFPInstructionMeter": { + "meter_id": 1 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "port": "target_send_port_1" + } + } + ], + "type": 4 + } + } + ] + } + } + ], + "tests": [ + { + "ingress": { + "packets": { + "data": [ + "ethernet(dst='22:22:22:22:22:22', \ + src='12:11:11:11:11:11', ethertype=2048)", + "ipv4(proto=6)", + "tcp()", + "str('\\x11' * (1500 - 54))" + ], + "pktps":175, + "duration_time":30 + } + }, + "egress":{ + "throughput": [ + { + "OFPMatch": { + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "value": "tester_recv_port_1" + } + + } + ] + }, + "kbps": 1000 + } + ] + } + } + ] + } + + def setUp(self): + OfTester.tester_ver = ofproto_v1_3.OFP_VERSION + OfTester.target_ver = ofproto_v1_3.OFP_VERSION + + def tearDown(self): + pass + + def test__normalize_test_json(self): + self.tests = TestPatterns( + "../../ryu/tests/switch/of13/action/00_OUTPUT.json", + logging.getLogger("test_tester")) + + self.tests[SAMPLE_DESC]._normalize_test_json(Test_tester.test_json_1) + self.tests[SAMPLE_DESC]._normalize_test_json(Test_tester.test_json_2) + self.tests[SAMPLE_DESC]._normalize_test_json(Test_tester.test_json_3) + self.tests[SAMPLE_DESC]._normalize_test_json(Test_tester.test_json_4) + + # action/00_OUTPUT.json + eq_(Test_tester.test_json_1["prerequisite"][0]["OFPFlowMod"][ + "instructions"][0]["OFPInstructionActions"][ + "actions"][0]["OFPActionOutput"]["port"], + CONF['test-switch']['target_send_port_1']) + + # group/00_ALL.json + eq_(Test_tester.test_json_2["prerequisite"][1]["OFPFlowMod"][ + "match"]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], + CONF['test-switch']['target_recv_port']) + eq_(Test_tester.test_json_2["prerequisite"][0]["OFPGroupMod"][ + "buckets"][0]["OFPBucket"]["actions"][0]["OFPActionOutput"][ + "port"], CONF['test-switch']['target_send_port_1']) + eq_(Test_tester.test_json_2["prerequisite"][0]["OFPGroupMod"][ + "buckets"][1]["OFPBucket"]["actions"][0]["OFPActionOutput"][ + "port"], CONF['test-switch']['target_send_port_2']) + eq_(Test_tester.test_json_2["tests"][0]["egress"]["throughput"][ + 0]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], + CONF['test-switch']['tester_recv_port_1']) + eq_(Test_tester.test_json_2["tests"][0]["egress"]["throughput"][ + 1]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], + CONF['test-switch']['tester_recv_port_2']) + + # match/00_IN_PORT.json + eq_(Test_tester.test_json_3["prerequisite"][0]["OFPFlowMod"][ + "match"]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], + CONF['test-switch']['target_recv_port']) + eq_(Test_tester.test_json_3["prerequisite"][0]["OFPFlowMod"][ + "instructions"][0]["OFPInstructionActions"]["actions"][0][ + "OFPActionOutput"]["port"], CONF['test-switch'][ + 'target_send_port_1']) + + # meter/01_DROP_00_KBPS_00_1M.json + eq_(Test_tester.test_json_4["prerequisite"][1]["OFPFlowMod"][ + "match"]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], + CONF['test-switch']['target_recv_port']) + eq_(Test_tester.test_json_4["prerequisite"][1]["OFPFlowMod"][ + "instructions"][1]["OFPInstructionActions"]["actions"][0][ + "OFPActionOutput"]["port"], + CONF['test-switch']['target_send_port_1']) + eq_(Test_tester.test_json_4["tests"][0]["egress"]["throughput"][ + 0]["OFPMatch"]["oxm_fields"][0]["OXMTlv"]["value"], + CONF['test-switch']['tester_recv_port_1']) diff --git a/tests/unit/app/test_ws_topology.py b/tests/unit/app/test_ws_topology.py new file mode 100644 index 00000000..6eaaa0e5 --- /dev/null +++ b/tests/unit/app/test_ws_topology.py @@ -0,0 +1,54 @@ +# Copyright (C) 2013 Stratosphere Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +from socket import error as SocketError + +import mock + +from ryu.app.ws_topology import WebSocketTopology + + +class Test_ws_topology(unittest.TestCase): + + def test_when_sock_error(self): + args = { + 'wsgi': mock.Mock(), + } + app = WebSocketTopology(**args) + + rpc_client_mock1 = mock.Mock() + config = { + 'get_proxy.return_value.event_link_add.side_effect': SocketError, + } + rpc_client_mock1.configure_mock(**config) + + rpc_client_mock2 = mock.Mock() + + app.rpc_clients = [ + rpc_client_mock1, + rpc_client_mock2, + ] + + ev_mock = mock.Mock() + app._event_link_add_handler(ev_mock) + + rpc_client_mock1.get_proxy.assert_called_once_with() + rpc_client_mock2.get_proxy.assert_called_once_with() + +if __name__ == "__main__": + unittest.main() diff --git a/tests/unit/app/test_wsgi.py b/tests/unit/app/test_wsgi.py new file mode 100644 index 00000000..bec21ddc --- /dev/null +++ b/tests/unit/app/test_wsgi.py @@ -0,0 +1,104 @@ +# Copyright (C) 2013 Stratosphere Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging + +import nose +from nose.tools import eq_ + +from ryu.app.wsgi import ControllerBase +from ryu.app.wsgi import WSGIApplication +from ryu.app.wsgi import Response +from ryu.app.wsgi import route +from ryu.lib import dpid as dpidlib + +LOG = logging.getLogger('test_wsgi') + + +class _TestController(ControllerBase): + + def __init__(self, req, link, data, **config): + super(_TestController, self).__init__(req, link, data, **config) + eq_(data['test_param'], 'foo') + + @route('test', '/test/{dpid}', + methods=['GET'], requirements={'dpid': dpidlib.DPID_PATTERN}) + def test_get_dpid(self, req, dpid, **_kwargs): + return Response(status=200, body=dpid) + + @route('test', '/test') + def test_root(self, req, **_kwargs): + return Response(status=200, body='root') + + +class Test_wsgi(unittest.TestCase): + + """ Test case for wsgi + """ + + def setUp(self): + controller_data = { + 'test_param': 'foo' + } + self.wsgi_app = WSGIApplication() + self.wsgi_app.register(_TestController, controller_data) + + def tearDown(self): + pass + + def test_wsgi_decorator_ok(self): + r = self.wsgi_app({'REQUEST_METHOD': 'GET', + 'PATH_INFO': '/test/0123456789abcdef'}, + lambda s, _: eq_(s, '200 OK')) + eq_(r[0], (b'0123456789abcdef')) + + def test_wsgi_decorator_ng_path(self): + self.wsgi_app({'REQUEST_METHOD': 'GET', + 'PATH_INFO': '/'}, + lambda s, _: eq_(s, '404 Not Found')) + + def test_wsgi_decorator_ng_method(self): + # XXX: If response code is "405 Method Not Allowed", it is better. + self.wsgi_app({'REQUEST_METHOD': 'PUT', + 'PATH_INFO': '/test/0123456789abcdef'}, + lambda s, _: eq_(s, '404 Not Found')) + + def test_wsgi_decorator_ng_requirements(self): + # XXX: If response code is "400 Bad Request", it is better. + self.wsgi_app({'REQUEST_METHOD': 'GET', + 'PATH_INFO': '/test/hogehoge'}, + lambda s, _: eq_(s, '404 Not Found')) + + def test_wsgi_decorator_ok_any_method(self): + self.wsgi_app({'REQUEST_METHOD': 'GET', + 'PATH_INFO': '/test'}, + lambda s, _: eq_(s, '200 OK')) + self.wsgi_app({'REQUEST_METHOD': 'POST', + 'PATH_INFO': '/test'}, + lambda s, _: eq_(s, '200 OK')) + self.wsgi_app({'REQUEST_METHOD': 'PUT', + 'PATH_INFO': '/test'}, + lambda s, _: eq_(s, '200 OK')) + r = self.wsgi_app({'REQUEST_METHOD': 'DELETE', + 'PATH_INFO': '/test'}, + lambda s, _: eq_(s, '200 OK')) + eq_(r[0], b'root') + + +if __name__ == '__main__': + nose.main(argv=['nosetests', '-s', '-v'], defaultTest=__file__) diff --git a/tests/unit/cmd/__init__.py b/tests/unit/cmd/__init__.py new file mode 100644 index 00000000..ca8ef539 --- /dev/null +++ b/tests/unit/cmd/__init__.py @@ -0,0 +1,15 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unit/cmd/dummy_app.py b/tests/unit/cmd/dummy_app.py new file mode 100644 index 00000000..6c594298 --- /dev/null +++ b/tests/unit/cmd/dummy_app.py @@ -0,0 +1,21 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ryu.base import app_manager + + +class DummyApp(app_manager.RyuApp): + pass diff --git a/tests/unit/cmd/dummy_openflow_app.py b/tests/unit/cmd/dummy_openflow_app.py new file mode 100644 index 00000000..614febcd --- /dev/null +++ b/tests/unit/cmd/dummy_openflow_app.py @@ -0,0 +1,22 @@ +# Copyright (C) 2013,2014 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013,2014 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from ryu.base import app_manager +from ryu.ofproto import ofproto_v1_3 + + +class DummyOpenFlowApp(app_manager.RyuApp): + OFP_VERSIONS = [ofproto_v1_3.OFP_VERSION] diff --git a/tests/unit/cmd/test_manager.py b/tests/unit/cmd/test_manager.py new file mode 100644 index 00000000..5127fa52 --- /dev/null +++ b/tests/unit/cmd/test_manager.py @@ -0,0 +1,77 @@ +# Copyright (C) 2013,2014 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013,2014 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import sys +import unittest +import mock +from nose.tools import eq_, raises + +try: + # Python 3 + from imp import reload +except ImportError: + # Python 2 + pass + +from ryu.cmd.manager import main + + +class Test_Manager(unittest.TestCase): + """Test ryu-manager command + """ + + def __init__(self, methodName): + super(Test_Manager, self).__init__(methodName) + + def setUp(self): + pass + + def tearDown(self): + pass + + @raises(SystemExit) + @mock.patch('sys.argv', new=['ryu-manager', '--version']) + def test_version(self): + main() + + @raises(SystemExit) + @mock.patch('sys.argv', new=['ryu-manager', '--help']) + def test_help(self): + main() + + @staticmethod + def _reset_globals(): + # hack to reset globals like SERVICE_BRICKS. + # assumption: this is the only test which actually starts RyuApp. + import ryu.base.app_manager + import ryu.ofproto.ofproto_protocol + + reload(ryu.base.app_manager) + reload(ryu.ofproto.ofproto_protocol) + + @mock.patch('sys.argv', new=['ryu-manager', '--verbose', + 'tests.unit.cmd.dummy_app']) + def test_no_services(self): + self._reset_globals() + main() + self._reset_globals() + + @mock.patch('sys.argv', new=['ryu-manager', '--verbose', + 'tests.unit.cmd.dummy_openflow_app']) + def test_openflow_app(self): + self._reset_globals() + main() + self._reset_globals() diff --git a/tests/unit/controller/__init__.py b/tests/unit/controller/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/controller/test_controller.py b/tests/unit/controller/test_controller.py new file mode 100644 index 00000000..27a2bce6 --- /dev/null +++ b/tests/unit/controller/test_controller.py @@ -0,0 +1,145 @@ +# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2015 Stratosphere Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +try: + import mock # Python 2 +except ImportError: + from unittest import mock # Python 3 + +import json +import os +import sys +import warnings +import unittest +import logging +import random + +from ryu.base import app_manager # To suppress cyclic import +from ryu.controller import controller +from ryu.controller import handler +from ryu.ofproto import ofproto_v1_3_parser +from ryu.ofproto import ofproto_v1_2_parser +from ryu.ofproto import ofproto_v1_0_parser + + +LOG = logging.getLogger('test_controller') + + +class Test_Datapath(unittest.TestCase): + """ + Test cases for controller.Datapath + """ + + def _test_ports_accessibility(self, ofproto_parser, msgs_len): + with mock.patch('ryu.controller.controller.Datapath.set_state'): + + # Ignore warnings + with warnings.catch_warnings(record=True) as msgs: + warnings.simplefilter('always') + + # Test target + sock_mock = mock.Mock() + addr_mock = mock.Mock() + dp = controller.Datapath(sock_mock, addr_mock) + dp.ofproto_parser = ofproto_parser + + # Create + dp.ports = {} + + # Update + port_mock = mock.Mock() + dp.ports[0] = port_mock + + # Read & Delete + del dp.ports[0] + + self.assertEqual(len(msgs), msgs_len) + for msg in msgs: + self.assertTrue(issubclass(msg.category, UserWarning)) + + def test_ports_accessibility_v13(self): + self._test_ports_accessibility(ofproto_v1_3_parser, 0) + + def test_ports_accessibility_v12(self): + self._test_ports_accessibility(ofproto_v1_2_parser, 0) + + def test_ports_accessibility_v10(self): + self._test_ports_accessibility(ofproto_v1_0_parser, 0) + + @mock.patch("ryu.base.app_manager", spec=app_manager) + def test_recv_loop(self, app_manager_mock): + # Prepare test data + test_messages = [ + "4-6-ofp_features_reply.packet", + "4-14-ofp_echo_reply.packet", + "4-14-ofp_echo_reply.packet", + "4-4-ofp_packet_in.packet", + "4-14-ofp_echo_reply.packet", + "4-14-ofp_echo_reply.packet", + ] + this_dir = os.path.dirname(sys.modules[__name__].__file__) + packet_data_dir = os.path.join(this_dir, '../../packet_data/of13') + json_dir = os.path.join(this_dir, '../ofproto/json/of13') + + packet_buf = bytearray() + expected_json = list() + for msg in test_messages: + # Construct the received packet buffer as one packet data in order + # to test the case of the OpenFlow messages composed in one packet. + packet_data_file = os.path.join(packet_data_dir, msg) + packet_buf += open(packet_data_file, 'rb').read() + json_data_file = os.path.join(json_dir, msg + '.json') + expected_json.append(json.load(open(json_data_file))) + + # Prepare mock for socket + class SocketMock(mock.MagicMock): + buf = bytearray() + random = None + + def recv(self, bufsize): + size = self.random.randint(1, bufsize) + out = self.buf[:size] + self.buf = self.buf[size:] + return out + + # Prepare mock + ofp_brick_mock = mock.MagicMock(spec=app_manager.RyuApp) + app_manager_mock.lookup_service_brick.return_value = ofp_brick_mock + sock_mock = SocketMock() + sock_mock.buf = packet_buf + sock_mock.random = random.Random('Ryu SDN Framework') + addr_mock = mock.MagicMock() + + # Prepare test target + dp = controller.Datapath(sock_mock, addr_mock) + dp.set_state(handler.MAIN_DISPATCHER) + ofp_brick_mock.reset_mock() + + # Test + dp._recv_loop() + + # Assert calls + output_json = list() + for call in ofp_brick_mock.send_event_to_observers.call_args_list: + args, kwargs = call + ev, state = args + if not hasattr(ev, 'msg'): + continue + output_json.append(ev.msg.to_jsondict()) + self.assertEqual(state, handler.MAIN_DISPATCHER) + self.assertEqual(kwargs, {}) + self.assertEqual(expected_json, output_json) diff --git a/tests/unit/lib/__init__.py b/tests/unit/lib/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/lib/ofctl_json/of10/1-2-ofp_flow_mod.packet.json b/tests/unit/lib/ofctl_json/of10/1-2-ofp_flow_mod.packet.json new file mode 100644 index 00000000..cc0b13d9 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of10/1-2-ofp_flow_mod.packet.json @@ -0,0 +1,23 @@ +{ + "cmd": 0, + "flow": { + "actions": [ + { + "type": "OUTPUT", + "max_len": 65535, + "port": 6 + } + ], + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "match": { + "dl_dst": "f2:0b:a4:7d:f8:ea" + }, + "out_port": 65532, + "priority": 123 + } +} diff --git a/tests/unit/lib/ofctl_json/of12/3-0-ofp_desc_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of12/3-0-ofp_desc_stats_reply.packet.json new file mode 100644 index 00000000..8fc54b74 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-0-ofp_desc_stats_reply.packet.json @@ -0,0 +1,9 @@ +{ + "1": { + "dp_desc": "dp", + "hw_desc": "hw", + "mfr_desc": "mfr", + "serial_num": "serial", + "sw_desc": "sw" + } +} diff --git a/tests/unit/lib/ofctl_json/of12/3-11-ofp_flow_stats_request.packet.json b/tests/unit/lib/ofctl_json/of12/3-11-ofp_flow_stats_request.packet.json new file mode 100644 index 00000000..a42dfef0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-11-ofp_flow_stats_request.packet.json @@ -0,0 +1,11 @@ +{ + "flow": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": {}, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 0 + } +} diff --git a/tests/unit/lib/ofctl_json/of12/3-12-ofp_flow_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of12/3-12-ofp_flow_stats_reply.packet.json new file mode 100644 index 00000000..4d73e0b5 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-12-ofp_flow_stats_reply.packet.json @@ -0,0 +1,75 @@ +{ + "1": [ + { + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115277000, + "duration_sec": 358, + "hard_timeout": 0, + "idle_timeout": 0, + "actions": [], + "length": 56, + "match": {}, + "packet_count": 0, + "priority": 65535, + "table_id": 0 + }, + { + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115055000, + "duration_sec": 358, + "hard_timeout": 0, + "idle_timeout": 0, + "actions": [ + "OUTPUT:NORMAL" + ], + "length": 88, + "match": { + "dl_type": 2054 + }, + "packet_count": 0, + "priority": 65534, + "table_id": 0 + }, + { + "byte_count": 238, + "cookie": 0, + "duration_nsec": 511582000, + "duration_sec": 316220, + "hard_timeout": 0, + "idle_timeout": 0, + "actions": [ + "GOTO_TABLE:1" + ], + "length": 80, + "match": { + "in_port": 6, + "dl_src": "f2:0b:a4:7d:f8:ea" + }, + "packet_count": 3, + "priority": 123, + "table_id": 0 + }, + { + "byte_count": 98, + "cookie": 0, + "duration_nsec": 980901000, + "duration_sec": 313499, + "hard_timeout": 0, + "idle_timeout": 0, + "actions": [ + { + "WRITE_ACTIONS": [ + "OUTPUT:CONTROLLER" + ] + } + ], + "length": 80, + "match": {}, + "packet_count": 1, + "priority": 0, + "table_id": 0 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of12/3-16-ofp_experimenter.packet.json b/tests/unit/lib/ofctl_json/of12/3-16-ofp_experimenter.packet.json new file mode 100644 index 00000000..c655f8f0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-16-ofp_experimenter.packet.json @@ -0,0 +1,8 @@ +{ + "exp": { + "data": "bmF6bw==", + "data_type": "base64", + "exp_type": 123456789, + "experimenter": 98765432 + } +} diff --git a/tests/unit/lib/ofctl_json/of12/3-2-ofp_flow_mod.packet.json b/tests/unit/lib/ofctl_json/of12/3-2-ofp_flow_mod.packet.json new file mode 100644 index 00000000..f6a0f26a --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-2-ofp_flow_mod.packet.json @@ -0,0 +1,41 @@ +{ + "cmd": 0, + "flow": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "actions": [ + { + "type": "WRITE_ACTIONS", + "actions": [ + { + "type": "SET_FIELD", + "field": "vlan_vid", + "value": 258 + }, + { + "type": "OUTPUT", + "port": 6, + "max_len": 65535 + } + ] + }, + { + "type": "SET_FIELD", + "field": "eth_src", + "value": "01:02:03:04:05:06" + } + ], + "match": { + "eth_dst": "f2:0b:a4:7d:f8:ea" + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/lib/ofctl_json/of12/3-21-ofp_group_mod.packet.json b/tests/unit/lib/ofctl_json/of12/3-21-ofp_group_mod.packet.json new file mode 100644 index 00000000..9509e191 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-21-ofp_group_mod.packet.json @@ -0,0 +1,22 @@ +{ + "cmd": 0, + "group": { + "buckets": [ + { + "actions": [ + { + "max_len": 65535, + "port": 2, + "type": "OUTPUT" + } + ], + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + ], + "command": 0, + "group_id": 1, + "type": "ALL" + } +} diff --git a/tests/unit/lib/ofctl_json/of12/3-22-ofp_port_mod.packet.json b/tests/unit/lib/ofctl_json/of12/3-22-ofp_port_mod.packet.json new file mode 100644 index 00000000..3c3ccf89 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-22-ofp_port_mod.packet.json @@ -0,0 +1,9 @@ +{ + "port_config": { + "advertise": 4096, + "config": 0, + "hw_addr": "00-11-00-00-11-11", + "mask": 0, + "port_no": 1 + } +} diff --git a/tests/unit/lib/ofctl_json/of12/3-25-ofp_aggregate_stats_request.packet.json b/tests/unit/lib/ofctl_json/of12/3-25-ofp_aggregate_stats_request.packet.json new file mode 100644 index 00000000..845af65b --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-25-ofp_aggregate_stats_request.packet.json @@ -0,0 +1,11 @@ +{ + "flow": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": {}, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 255 + } +} diff --git a/tests/unit/lib/ofctl_json/of12/3-26-ofp_aggregate_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of12/3-26-ofp_aggregate_stats_reply.packet.json new file mode 100644 index 00000000..a4b23d12 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-26-ofp_aggregate_stats_reply.packet.json @@ -0,0 +1,9 @@ +{ + "1": [ + { + "byte_count": 574, + "flow_count": 6, + "packet_count": 7 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of12/3-28-ofp_table_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of12/3-28-ofp_table_stats_reply.packet.json new file mode 100644 index 00000000..7444a29a --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-28-ofp_table_stats_reply.packet.json @@ -0,0 +1,32134 @@ +{ + "1": [ + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", + "matched_count": 4, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 4, + "max_entries": 16777216, + "lookup_count": 4, + "metadata_match": 18446744073709551615, + "table_id": 0, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x01", + "matched_count": 3, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 2, + "max_entries": 16777216, + "lookup_count": 3, + "metadata_match": 18446744073709551615, + "table_id": 1, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x02", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 2, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x03", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 3, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x04", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 4, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x05", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 5, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x06", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 6, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x07", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 7, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x08", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 8, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x09", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 9, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x0a", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 10, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x0b", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 11, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x0c", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 12, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x0d", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 13, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x0e", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 14, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x0f", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 15, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x10", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 16, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x11", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 17, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x12", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 18, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x13", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 19, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x14", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 20, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x15", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 21, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x16", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 22, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x17", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 23, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x18", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 24, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x19", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 25, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x1a", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 26, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x1b", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 27, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x1c", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 28, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x1d", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 29, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x1e", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 30, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x1f", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 31, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x20", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 32, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x21", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 33, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x22", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 34, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x23", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 35, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x24", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 36, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x25", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 37, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x26", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 38, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x27", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 39, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x28", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 40, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x29", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 41, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x2a", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 42, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x2b", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 43, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x2c", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 44, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x2d", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 45, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x2e", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 46, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x2f", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 47, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x30", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 48, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x31", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 49, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x32", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 50, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x33", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 51, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x34", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 52, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x35", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 53, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x36", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 54, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x37", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 55, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x38", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 56, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x39", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 57, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x3a", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 58, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x3b", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 59, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x3c", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 60, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x3d", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 61, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x3e", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 62, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x3f", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 63, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x40", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 64, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x41", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 65, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x42", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 66, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x43", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 67, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x44", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 68, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x45", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 69, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x46", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 70, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x47", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 71, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x48", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 72, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x49", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 73, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x4a", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 74, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x4b", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 75, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x4c", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 76, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x4d", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 77, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x4e", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 78, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x4f", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 79, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x50", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 80, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x51", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 81, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x52", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 82, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x53", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 83, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x54", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 84, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x55", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 85, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x56", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 86, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x57", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 87, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x58", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 88, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x59", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 89, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x5a", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 90, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x5b", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 91, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x5c", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 92, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x5d", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 93, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x5e", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 94, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x5f", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 95, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x60", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 96, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x61", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 97, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x62", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 98, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x63", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 99, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x64", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 100, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x65", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 101, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x66", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 102, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x67", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 103, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x68", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 104, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x69", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 105, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x6a", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 106, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x6b", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 107, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x6c", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 108, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x6d", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 109, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x6e", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 110, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x6f", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 111, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x70", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 112, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x71", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 113, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x72", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 114, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x73", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 115, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x74", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 116, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x75", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 117, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x76", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 118, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x77", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 119, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x78", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 120, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x79", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 121, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x7a", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 122, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x7b", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 123, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x7c", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 124, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x7d", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 125, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x7e", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 126, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x7f", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 127, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x80", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 128, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x81", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 129, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x82", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 130, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x83", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 131, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x84", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 132, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x85", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 133, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x86", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 134, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x87", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 135, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x88", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 136, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x89", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 137, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x8a", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 138, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x8b", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 139, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x8c", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 140, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x8d", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 141, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x8e", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 142, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x8f", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 143, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x90", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 144, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x91", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 145, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x92", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 146, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x93", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 147, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x94", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 148, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x95", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 149, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x96", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 150, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x97", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 151, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x98", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 152, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x99", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 153, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x9a", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 154, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x9b", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 155, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x9c", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 156, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x9d", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 157, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x9e", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 158, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0x9f", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 159, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xa0", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 160, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xa1", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 161, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xa2", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 162, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xa3", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 163, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xa4", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 164, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xa5", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 165, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xa6", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 166, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xa7", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 167, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xa8", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 168, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xa9", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 169, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xaa", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 170, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xab", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 171, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xac", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 172, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xad", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 173, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xae", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 174, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xaf", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 175, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xb0", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 176, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xb1", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 177, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xb2", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 178, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xb3", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 179, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xb4", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 180, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xb5", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 181, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xb6", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 182, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xb7", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 183, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xb8", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 184, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xb9", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 185, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xba", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 186, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xbb", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 187, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xbc", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 188, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xbd", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 189, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xbe", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 190, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xbf", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 191, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xc0", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 192, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xc1", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 193, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xc2", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 194, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xc3", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 195, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xc4", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 196, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xc5", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 197, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xc6", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 198, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xc7", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 199, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xc8", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 200, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xc9", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 201, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xca", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 202, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xcb", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 203, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xcc", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 204, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xcd", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 205, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xce", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 206, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xcf", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 207, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xd0", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 208, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xd1", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 209, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xd2", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 210, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xd3", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 211, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xd4", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 212, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xd5", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 213, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xd6", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 214, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xd7", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 215, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xd8", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 216, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xd9", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 217, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xda", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 218, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xdb", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 219, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xdc", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 220, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xdd", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 221, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xde", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 222, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xdf", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 223, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xe0", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 224, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xe1", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 225, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xe2", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 226, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xe3", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 227, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xe4", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 228, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xe5", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 229, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xe6", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 230, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xe7", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 231, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xe8", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 232, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xe9", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 233, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xea", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 234, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xeb", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 235, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xec", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 236, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xed", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 237, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xee", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 238, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xef", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 239, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xf0", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 240, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xf1", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 241, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xf2", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 242, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xf3", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 243, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xf4", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 244, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xf5", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 245, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xf6", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 246, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xf7", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 247, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xf8", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 248, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xf9", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 249, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xfa", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 250, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xfb", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 251, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xfc", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 252, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xfd", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": 253, + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + }, + { + "wildcards": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "write_setfields": [], + "write_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "name": "Flow Table 0xfe", + "matched_count": 0, + "apply_actions": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ], + "active_count": 0, + "max_entries": 16777216, + "lookup_count": 0, + "metadata_match": 18446744073709551615, + "table_id": "MAX", + "instructions": [ + "GOTO_TABLE", + "WRITE_METADATA", + "WRITE_ACTIONS", + "APPLY_ACTIONS", + "CLEAR_ACTIONS" + ], + "config": [], + "metadata_write": 18446744073709551615, + "match": [ + "IN_PORT", + "METADATA", + "ETH_DST", + "ETH_SRC", + "ETH_TYPE", + "VLAN_VID", + "VLAN_PCP", + "IP_DSCP", + "IP_ECN", + "IP_PROTO", + "IPV4_SRC", + "IPV4_DST", + "TCP_SRC", + "TCP_DST", + "UDP_SRC", + "UDP_DST", + "SCTP_SRC", + "SCTP_DST", + "ICMPV4_TYPE", + "ICMPV4_CODE", + "ARP_OP", + "ARP_SPA", + "ARP_TPA", + "ARP_SHA", + "ARP_THA", + "IPV6_SRC", + "IPV6_DST", + "IPV6_FLABEL", + "ICMPV6_TYPE", + "ICMPV6_CODE", + "IPV6_ND_TARGET", + "IPV6_ND_SLL", + "IPV6_ND_TLL", + "MPLS_LABEL", + "MPLS_TC" + ], + "apply_setfields": [] + } + ] +} \ No newline at end of file diff --git a/tests/unit/lib/ofctl_json/of12/3-30-ofp_port_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of12/3-30-ofp_port_stats_reply.packet.json new file mode 100644 index 00000000..43414b65 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-30-ofp_port_stats_reply.packet.json @@ -0,0 +1,34 @@ +{ + "1": [ + { + "collisions": 0, + "port_no": 7, + "rx_bytes": 0, + "rx_crc_err": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "rx_packets": 0, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + }, + { + "collisions": 0, + "port_no": 6, + "rx_bytes": 336, + "rx_crc_err": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "rx_packets": 4, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of12/3-32-ofp_group_features_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of12/3-32-ofp_group_features_stats_reply.packet.json new file mode 100644 index 00000000..b277969e --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-32-ofp_group_features_stats_reply.packet.json @@ -0,0 +1,104 @@ +{ + "1": [ + { + "actions": [ + { + "ALL": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "SELECT": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "INDIRECT": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "FF": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + } + ], + "max_groups": [ + { + "ALL": 16777216 + }, + { + "SELECT": 16777216 + }, + { + "INDIRECT": 16777216 + }, + { + "FF": 16777216 + } + ], + "capabilities": [ + "SELECT_WEIGHT", + "CHAINING" + ], + "types": [ + "ALL", + "SELECT", + "INDIRECT", + "FF" + ] + } + ] +} \ No newline at end of file diff --git a/tests/unit/lib/ofctl_json/of12/3-34-ofp_group_desc_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of12/3-34-ofp_group_desc_stats_reply.packet.json new file mode 100644 index 00000000..c23a9bbe --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-34-ofp_group_desc_stats_reply.packet.json @@ -0,0 +1,20 @@ +{ + "1": [ + { + "buckets": [ + { + "actions": [ + "OUTPUT:2" + ], + "len": 32, + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + ], + "group_id": 1, + "length": 40, + "type": "ALL" + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of12/3-35-ofp_queue_get_config_request.packet.json b/tests/unit/lib/ofctl_json/of12/3-35-ofp_queue_get_config_request.packet.json new file mode 100644 index 00000000..fc49ec2c --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-35-ofp_queue_get_config_request.packet.json @@ -0,0 +1,3 @@ +{ + "port": 4294967295 +} diff --git a/tests/unit/lib/ofctl_json/of12/3-36-ofp_queue_get_config_reply.packet.json b/tests/unit/lib/ofctl_json/of12/3-36-ofp_queue_get_config_reply.packet.json new file mode 100644 index 00000000..8e922a9a --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-36-ofp_queue_get_config_reply.packet.json @@ -0,0 +1,43 @@ +{ + "1": [ + { + "port": "ANY", + "queues": [ + { + "len": 48, + "port": 77, + "properties": [ + { + "len": 16, + "property": "MIN_RATE", + "rate": 10 + }, + { + "len": 16, + "property": "MAX_RATE", + "rate": 900 + } + ], + "queue_id": 99 + }, + { + "len": 48, + "port": 77, + "properties": [ + { + "len": 16, + "property": "MIN_RATE", + "rate": 100 + }, + { + "len": 16, + "property": "MAX_RATE", + "rate": 200 + } + ], + "queue_id": 88 + } + ] + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of12/3-38-ofp_queue_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of12/3-38-ofp_queue_stats_reply.packet.json new file mode 100644 index 00000000..db50c1e5 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-38-ofp_queue_stats_reply.packet.json @@ -0,0 +1,25 @@ +{ + "1": [ + { + "port_no": 7, + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + }, + { + "port_no": 6, + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + }, + { + "port_no": 7, + "queue_id": 2, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of12/3-6-ofp_features_reply.packet.json b/tests/unit/lib/ofctl_json/of12/3-6-ofp_features_reply.packet.json new file mode 100644 index 00000000..be040f79 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-6-ofp_features_reply.packet.json @@ -0,0 +1,30 @@ +{ + "1": [ + { + "advertised": 10240, + "config": 0, + "curr": 10248, + "curr_speed": 5000, + "hw_addr": "f2:0b:a4:7d:f8:ea", + "max_speed": 5000, + "name": "Port6", + "peer": 10248, + "port_no": 6, + "state": 4, + "supported": 10248 + }, + { + "advertised": 10240, + "config": 0, + "curr": 10248, + "curr_speed": 5000, + "hw_addr": "f2:0b:a4:d0:3f:70", + "max_speed": 5000, + "name": "Port7", + "peer": 10248, + "port_no": 7, + "state": 4, + "supported": 10248 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of12/3-62-ofp_group_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of12/3-62-ofp_group_stats_reply.packet.json new file mode 100644 index 00000000..f2f1a6ce --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/3-62-ofp_group_stats_reply.packet.json @@ -0,0 +1,17 @@ +{ + "1": [ + { + "bucket_stats": [ + { + "byte_count": 2345, + "packet_count": 234 + } + ], + "byte_count": 12345, + "group_id": 1, + "length": 48, + "packet_count": 123, + "ref_count": 2 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_group_stats_request.packet.json b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_group_stats_request.packet.json new file mode 100644 index 00000000..7646a77a --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_group_stats_request.packet.json @@ -0,0 +1,3 @@ +{ + "group_id": 1 +} diff --git a/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_port_stats_request.packet.json b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_port_stats_request.packet.json new file mode 100644 index 00000000..7d56f29d --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_port_stats_request.packet.json @@ -0,0 +1,3 @@ +{ + "port": 7 +} diff --git a/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json new file mode 100644 index 00000000..e116fdc1 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json @@ -0,0 +1,3 @@ +{ + "port": null +} diff --git a/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json new file mode 100644 index 00000000..7d56f29d --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json @@ -0,0 +1,3 @@ +{ + "port": 7 +} diff --git a/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json new file mode 100644 index 00000000..78077510 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json @@ -0,0 +1,4 @@ +{ + "port": 7, + "queue_id":1 +} diff --git a/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json new file mode 100644 index 00000000..ee465693 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json @@ -0,0 +1,3 @@ +{ + "queue_id":1 +} diff --git a/tests/unit/lib/ofctl_json/of13/4-0-ofp_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-0-ofp_desc_reply.packet.json new file mode 100644 index 00000000..8fc54b74 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-0-ofp_desc_reply.packet.json @@ -0,0 +1,9 @@ +{ + "1": { + "dp_desc": "dp", + "hw_desc": "hw", + "mfr_desc": "mfr", + "serial_num": "serial", + "sw_desc": "sw" + } +} diff --git a/tests/unit/lib/ofctl_json/of13/4-11-ofp_flow_stats_request.packet.json b/tests/unit/lib/ofctl_json/of13/4-11-ofp_flow_stats_request.packet.json new file mode 100644 index 00000000..a42dfef0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-11-ofp_flow_stats_request.packet.json @@ -0,0 +1,11 @@ +{ + "flow": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": {}, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 0 + } +} diff --git a/tests/unit/lib/ofctl_json/of13/4-12-ofp_flow_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-12-ofp_flow_stats_reply.packet.json new file mode 100644 index 00000000..f9b8e68f --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-12-ofp_flow_stats_reply.packet.json @@ -0,0 +1,104 @@ +{ + "1": [ + { + "actions": [], + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115277000, + "duration_sec": 358, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "length": 0, + "match": {}, + "packet_count": 0, + "priority": 65535, + "table_id": 0 + }, + { + "actions": [ + "OUTPUT:NORMAL" + ], + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115055000, + "duration_sec": 358, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "length": 0, + "match": { + "dl_type": 2054 + }, + "packet_count": 0, + "priority": 65534, + "table_id": 0 + }, + { + "actions": [ + "GOTO_TABLE:1" + ], + "byte_count": 238, + "cookie": 0, + "duration_nsec": 511582000, + "duration_sec": 316220, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "length": 0, + "match": { + "dl_src": "f2:0b:a4:7d:f8:ea", + "in_port": 6 + }, + "packet_count": 3, + "priority": 123, + "table_id": 0 + }, + { + "actions": [ + { + "WRITE_ACTIONS": [ + "SET_FIELD: {vlan_vid:258}", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "COPY_TTL_IN", + "POP_PBB", + "PUSH_PBB:4660", + "POP_MPLS:39030", + "PUSH_MPLS:34887", + "POP_VLAN", + "PUSH_VLAN:33024", + "DEC_MPLS_TTL", + "SET_MPLS_TTL:10", + "DEC_NW_TTL", + "SET_NW_TTL:10", + "SET_QUEUE:3", + "GROUP:99", + "OUTPUT:6", + "EXPERIMENTER: {experimenter:98765432, data:ZXhwX2RhdGE=}", + "NX_UNKNOWN: {subtype: 25976, data: cF9kYXRh}" + ] + }, + "SET_FIELD: {eth_src:01:02:03:04:05:06}", + "SET_FIELD: {pbb_uca:1}", + { + "WRITE_ACTIONS": [ + "OUTPUT:CONTROLLER" + ] + } + ], + "byte_count": 98, + "cookie": 0, + "duration_nsec": 980901000, + "duration_sec": 313499, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "length": 0, + "match": {}, + "packet_count": 1, + "priority": 0, + "table_id": 0 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-16-ofp_experimenter.packet.json b/tests/unit/lib/ofctl_json/of13/4-16-ofp_experimenter.packet.json new file mode 100644 index 00000000..c655f8f0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-16-ofp_experimenter.packet.json @@ -0,0 +1,8 @@ +{ + "exp": { + "data": "bmF6bw==", + "data_type": "base64", + "exp_type": 123456789, + "experimenter": 98765432 + } +} diff --git a/tests/unit/lib/ofctl_json/of13/4-2-ofp_flow_mod.packet.json b/tests/unit/lib/ofctl_json/of13/4-2-ofp_flow_mod.packet.json new file mode 100644 index 00000000..fbd5c214 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-2-ofp_flow_mod.packet.json @@ -0,0 +1,97 @@ +{ + "cmd": 0, + "flow": { + "buffer_id": 65535, + "table_id": 1, + "priority": 123, + "match": { + "eth_dst": "f2:0b:a4:7d:f8:ea" + }, + "actions": [ + { + "type": "WRITE_ACTIONS", + "actions": [ + { + "type": "SET_FIELD", + "field": "vlan_vid", + "value": 258 + }, + { + "type": "COPY_TTL_OUT" + }, + { + "type": "COPY_TTL_IN" + }, + { + "type": "COPY_TTL_IN" + }, + { + "type": "POP_PBB" + }, + { + "type": "PUSH_PBB", + "ethertype": 4660 + }, + { + "type": "POP_MPLS", + "ethertype": 39030 + }, + { + "type": "PUSH_MPLS", + "ethertype": 34887 + }, + { + "type": "POP_VLAN" + }, + { + "type": "PUSH_VLAN", + "ethertype": 33024 + }, + { + "type": "DEC_MPLS_TTL" + }, + { + "type": "SET_MPLS_TTL", + "mpls_ttl": 10 + }, + { + "type": "DEC_NW_TTL" + }, + { + "type": "SET_NW_TTL", + "nw_ttl": 10 + }, + { + "type": "EXPERIMENTER", + "experimenter": 101, + "data": "AAECAwQFBgc=", + "data_type": "base64" + }, + { + "type": "SET_QUEUE", + "queue_id": 3 + }, + { + "type": "GROUP", + "group_id": 99 + }, + { + "type": "OUTPUT", + "max_len": 65535, + "port": 6 + } + ] + }, + { + "type": "SET_FIELD", + "field": "eth_src", + "value": "01:02:03:04:05:06" + }, + { + "type": "SET_FIELD", + "field": "pbb_uca", + "value": 1 + } + ] + } +} diff --git a/tests/unit/lib/ofctl_json/of13/4-21-ofp_group_mod.packet.json b/tests/unit/lib/ofctl_json/of13/4-21-ofp_group_mod.packet.json new file mode 100644 index 00000000..fa48425a --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-21-ofp_group_mod.packet.json @@ -0,0 +1,21 @@ +{ + "cmd": 0, + "group": { + "buckets": [ + { + "actions": [ + { + "max_len": 65535, + "port": 2, + "type": "OUTPUT" + } + ], + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + ], + "group_id": 1, + "type": "ALL" + } +} diff --git a/tests/unit/lib/ofctl_json/of13/4-22-ofp_port_mod.packet.json b/tests/unit/lib/ofctl_json/of13/4-22-ofp_port_mod.packet.json new file mode 100644 index 00000000..73339730 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-22-ofp_port_mod.packet.json @@ -0,0 +1,9 @@ +{ + "port_config": { + "advertise": 4096, + "config": 0, + "hw_addr": "00:11:00:00:11:11", + "mask": 0, + "port_no": 1 + } +} diff --git a/tests/unit/lib/ofctl_json/of13/4-25-ofp_aggregate_stats_request.packet.json b/tests/unit/lib/ofctl_json/of13/4-25-ofp_aggregate_stats_request.packet.json new file mode 100644 index 00000000..845af65b --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-25-ofp_aggregate_stats_request.packet.json @@ -0,0 +1,11 @@ +{ + "flow": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": {}, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 255 + } +} diff --git a/tests/unit/lib/ofctl_json/of13/4-26-ofp_aggregate_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-26-ofp_aggregate_stats_reply.packet.json new file mode 100644 index 00000000..a4b23d12 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-26-ofp_aggregate_stats_reply.packet.json @@ -0,0 +1,9 @@ +{ + "1": [ + { + "byte_count": 574, + "flow_count": 6, + "packet_count": 7 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-28-ofp_table_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-28-ofp_table_stats_reply.packet.json new file mode 100644 index 00000000..95b2c495 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-28-ofp_table_stats_reply.packet.json @@ -0,0 +1,16 @@ +{ + "1": [ + { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 0 + }, + { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 1 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-30-ofp_port_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-30-ofp_port_stats_reply.packet.json new file mode 100644 index 00000000..a81e6825 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-30-ofp_port_stats_reply.packet.json @@ -0,0 +1,38 @@ +{ + "1": [ + { + "collisions": 0, + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 7, + "rx_bytes": 0, + "rx_crc_err": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "rx_packets": 0, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + }, + { + "collisions": 0, + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 6, + "rx_bytes": 336, + "rx_crc_err": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "rx_packets": 4, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-32-ofp_group_features_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-32-ofp_group_features_reply.packet.json new file mode 100644 index 00000000..2a29ac2d --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-32-ofp_group_features_reply.packet.json @@ -0,0 +1,104 @@ +{ + "1": [ + { + "actions": [ + { + "ALL": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "SELECT": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "INDIRECT": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "FF": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + } + ], + "capabilities": [ + "SELECT_WEIGHT", + "CHAINING" + ], + "max_groups": [ + { + "ALL": 16777216 + }, + { + "SELECT": 16777216 + }, + { + "INDIRECT": 16777216 + }, + { + "FF": 16777216 + } + ], + "types": [ + "ALL", + "SELECT", + "INDIRECT", + "FF" + ] + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-34-ofp_group_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-34-ofp_group_desc_reply.packet.json new file mode 100644 index 00000000..c23a9bbe --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-34-ofp_group_desc_reply.packet.json @@ -0,0 +1,20 @@ +{ + "1": [ + { + "buckets": [ + { + "actions": [ + "OUTPUT:2" + ], + "len": 32, + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + ], + "group_id": 1, + "length": 40, + "type": "ALL" + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-35-ofp_queue_get_config_request.packet.json b/tests/unit/lib/ofctl_json/of13/4-35-ofp_queue_get_config_request.packet.json new file mode 100644 index 00000000..fc49ec2c --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-35-ofp_queue_get_config_request.packet.json @@ -0,0 +1,3 @@ +{ + "port": 4294967295 +} diff --git a/tests/unit/lib/ofctl_json/of13/4-36-ofp_queue_get_config_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-36-ofp_queue_get_config_reply.packet.json new file mode 100644 index 00000000..9d529400 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-36-ofp_queue_get_config_reply.packet.json @@ -0,0 +1,83 @@ +{ + "1": [ + { + "port": "ANY", + "queues": [ + { + "len": 64, + "port": 77, + "properties": [ + { + "len": 16, + "property": "MIN_RATE", + "rate": 10 + }, + { + "len": 16, + "property": "MAX_RATE", + "rate": 900 + }, + { + "data": [], + "experimenter": 999, + "len": 16, + "property": "EXPERIMENTER" + } + ], + "queue_id": 99 + }, + { + "len": 65, + "port": 77, + "properties": [ + { + "len": 16, + "property": "MIN_RATE", + "rate": 100 + }, + { + "len": 16, + "property": "MAX_RATE", + "rate": 200 + }, + { + "experimenter": 999, + "data": [ + 1 + ], + "len": 17, + "property": "EXPERIMENTER" + } + ], + "queue_id": 88 + }, + { + "len": 66, + "port": 77, + "properties": [ + { + "len": 16, + "property": "MIN_RATE", + "rate": 200 + }, + { + "len": 16, + "property": "MAX_RATE", + "rate": 400 + }, + { + "experimenter": 999, + "data": [ + 1, + 2 + ], + "len": 18, + "property": "EXPERIMENTER" + } + ], + "queue_id": 77 + } + ] + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-38-ofp_queue_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-38-ofp_queue_stats_reply.packet.json new file mode 100644 index 00000000..b19fe300 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-38-ofp_queue_stats_reply.packet.json @@ -0,0 +1,31 @@ +{ + "1": [ + { + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 7, + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + }, + { + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 6, + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + }, + { + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 7, + "queue_id": 2, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-45-ofp_meter_mod.packet.json b/tests/unit/lib/ofctl_json/of13/4-45-ofp_meter_mod.packet.json new file mode 100644 index 00000000..b78ea6be --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-45-ofp_meter_mod.packet.json @@ -0,0 +1,31 @@ +{ + "cmd": 0, + "meter": { + "flags": [ + "PKTPS", + "BURST", + "STATS" + ], + "meter_id": 100, + "bands": [ + { + "burst_size": 10, + "rate": 1000, + "type": "DROP" + }, + { + "burst_size": 10, + "prec_level": 1, + "rate": 1000, + "type": "DSCP_REMARK" + }, + { + "burst_size": 10, + "experimenter": 999, + "len": 16, + "rate": 1000, + "type": "EXPERIMENTER" + } + ] + } +} diff --git a/tests/unit/lib/ofctl_json/of13/4-48-ofp_meter_config_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-48-ofp_meter_config_reply.packet.json new file mode 100644 index 00000000..d5efcd97 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-48-ofp_meter_config_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "bands": [ + { + "burst_size": 10, + "rate": 1000, + "type": "DROP" + } + ], + "flags": [ + "PKTPS", + "BURST", + "STATS" + ], + "meter_id": 100 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-50-ofp_meter_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-50-ofp_meter_stats_reply.packet.json new file mode 100644 index 00000000..f21ec519 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-50-ofp_meter_stats_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "band_stats": [ + { + "byte_band_count": 0, + "packet_band_count": 0 + } + ], + "byte_in_count": 0, + "duration_nsec": 480000, + "duration_sec": 0, + "flow_count": 0, + "len": 56, + "meter_id": 100, + "packet_in_count": 0 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-52-ofp_meter_features_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-52-ofp_meter_features_reply.packet.json new file mode 100644 index 00000000..24dac7d4 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-52-ofp_meter_features_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "band_types": [ + "DROP", + "DSCP_REMARK" + ], + "capabilities": [ + "KBPS", + "PKTPS", + "BURST", + "STATS" + ], + "max_bands": 255, + "max_color": 0, + "max_meter": 16777216 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-54-ofp_port_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-54-ofp_port_desc_reply.packet.json new file mode 100644 index 00000000..72ff2ec3 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-54-ofp_port_desc_reply.packet.json @@ -0,0 +1,30 @@ +{ + "1": [ + { + "advertised": 10240, + "config": 0, + "curr": 10248, + "curr_speed": 5000, + "hw_addr": "f2:0b:a4:d0:3f:70", + "max_speed": 5000, + "name": "Port7", + "peer": 10248, + "port_no": 7, + "state": 4, + "supported": 10248 + }, + { + "advertised": 10240, + "config": 0, + "curr": 10248, + "curr_speed": 5000, + "hw_addr": "f2:0b:a4:7d:f8:ea", + "max_speed": 5000, + "name": "Port6", + "peer": 10248, + "port_no": 6, + "state": 4, + "supported": 10248 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-56-ofp_table_features_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-56-ofp_table_features_reply.packet.json new file mode 100644 index 00000000..ded5a996 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-56-ofp_table_features_reply.packet.json @@ -0,0 +1,11928 @@ +{ + "1": [ + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + }, + { + "type": "EXPERIMENTER" + }, + { + "type": "EXPERIMENTER" + }, + { + "type": "EXPERIMENTER" + } + ], + "table_id": 0 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x01", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 1 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x02", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 2 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x03", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 3 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x04", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 4 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x05", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 5 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x06", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 6 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x07", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 7 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x08", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 8 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x09", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 9 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/4-58-ofp_group_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of13/4-58-ofp_group_stats_reply.packet.json new file mode 100644 index 00000000..1c6f9039 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/4-58-ofp_group_stats_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "bucket_stats": [ + { + "byte_count": 2345, + "packet_count": 234 + } + ], + "byte_count": 12345, + "duration_nsec": 609036000, + "duration_sec": 9, + "group_id": 1, + "length": 56, + "packet_count": 123, + "ref_count": 2 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_group_stats_request.packet.json b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_group_stats_request.packet.json new file mode 100644 index 00000000..7646a77a --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_group_stats_request.packet.json @@ -0,0 +1,3 @@ +{ + "group_id": 1 +} diff --git a/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_config_request.packet.json b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_config_request.packet.json new file mode 100644 index 00000000..3ad622e0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_config_request.packet.json @@ -0,0 +1,3 @@ +{ + "meter_id": 1 +} diff --git a/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_stats_request.packet.json b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_stats_request.packet.json new file mode 100644 index 00000000..3ad622e0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_meter_stats_request.packet.json @@ -0,0 +1,3 @@ +{ + "meter_id": 1 +} diff --git a/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_port_stats_request.packet.json b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_port_stats_request.packet.json new file mode 100644 index 00000000..7d56f29d --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_port_stats_request.packet.json @@ -0,0 +1,3 @@ +{ + "port": 7 +} diff --git a/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json new file mode 100644 index 00000000..e116fdc1 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json @@ -0,0 +1,3 @@ +{ + "port": null +} diff --git a/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json new file mode 100644 index 00000000..7d56f29d --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json @@ -0,0 +1,3 @@ +{ + "port": 7 +} diff --git a/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json new file mode 100644 index 00000000..78077510 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json @@ -0,0 +1,4 @@ +{ + "port": 7, + "queue_id":1 +} diff --git a/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json new file mode 100644 index 00000000..ee465693 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json @@ -0,0 +1,3 @@ +{ + "queue_id":1 +} diff --git a/tests/unit/lib/ofctl_json/of14/5-0-ofp_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-0-ofp_desc_reply.packet.json new file mode 100644 index 00000000..8fc54b74 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-0-ofp_desc_reply.packet.json @@ -0,0 +1,9 @@ +{ + "1": { + "dp_desc": "dp", + "hw_desc": "hw", + "mfr_desc": "mfr", + "serial_num": "serial", + "sw_desc": "sw" + } +} diff --git a/tests/unit/lib/ofctl_json/of14/5-11-ofp_flow_stats_request.packet.json b/tests/unit/lib/ofctl_json/of14/5-11-ofp_flow_stats_request.packet.json new file mode 100644 index 00000000..a42dfef0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-11-ofp_flow_stats_request.packet.json @@ -0,0 +1,11 @@ +{ + "flow": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": {}, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 0 + } +} diff --git a/tests/unit/lib/ofctl_json/of14/5-12-ofp_flow_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-12-ofp_flow_stats_reply.packet.json new file mode 100644 index 00000000..134c3f12 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-12-ofp_flow_stats_reply.packet.json @@ -0,0 +1,197 @@ +{ + "1": [ + { + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115277000, + "duration_sec": 358, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [], + "length": 0, + "match": {}, + "packet_count": 0, + "priority": 65535, + "table_id": 0 + }, + { + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115055000, + "duration_sec": 358, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [ + { + "actions": [ + { + "max_len": 0, + "port": 4294967290, + "type": "OUTPUT" + } + ], + "type": "APPLY_ACTIONS" + } + ], + "length": 0, + "match": { + "eth_type": 2054 + }, + "packet_count": 0, + "priority": 65534, + "table_id": 0 + }, + { + "byte_count": 238, + "cookie": 0, + "duration_nsec": 511582000, + "duration_sec": 316220, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [ + { + "table_id": 1, + "type": "GOTO_TABLE" + } + ], + "length": 0, + "match": { + "eth_src": "f2:0b:a4:7d:f8:ea", + "in_port": 6 + }, + "packet_count": 3, + "priority": 123, + "table_id": 0 + }, + { + "byte_count": 98, + "cookie": 0, + "duration_nsec": 980901000, + "duration_sec": 313499, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [ + { + "actions": [ + { + "field": "vlan_vid", + "mask": null, + "type": "SET_FIELD", + "value": 258 + }, + { + "type": "COPY_TTL_OUT" + }, + { + "type": "COPY_TTL_IN" + }, + { + "type": "COPY_TTL_IN" + }, + { + "type": "POP_PBB" + }, + { + "ethertype": 4660, + "type": "PUSH_PBB" + }, + { + "ethertype": 39030, + "type": "POP_MPLS" + }, + { + "ethertype": 34887, + "type": "PUSH_MPLS" + }, + { + "type": "POP_VLAN" + }, + { + "ethertype": 33024, + "type": "PUSH_VLAN" + }, + { + "type": "DEC_MPLS_TTL" + }, + { + "mpls_ttl": 10, + "type": "SET_MPLS_TTL" + }, + { + "type": "DEC_NW_TTL" + }, + { + "nw_ttl": 10, + "type": "SET_NW_TTL" + }, + { + "queue_id": 3, + "type": "SET_QUEUE" + }, + { + "group_id": 99, + "type": "GROUP" + }, + { + "max_len": 65535, + "port": 6, + "type": "OUTPUT" + }, + { + "data": "ZXhwX2RhdGE=", + "experimenter": 98765432, + "type": "EXPERIMENTER" + }, + { + "data": "cF9kYXRh", + "experimenter": 8992, + "subtype": 25976, + "type": "EXPERIMENTER" + } + ], + "type": "WRITE_ACTIONS" + }, + { + "actions": [ + { + "field": "eth_src", + "mask": null, + "type": "SET_FIELD", + "value": "01:02:03:04:05:06" + }, + { + "field": "pbb_uca", + "mask": null, + "type": "SET_FIELD", + "value": 1 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "actions": [ + { + "max_len": 65535, + "port": 4294967293, + "type": "OUTPUT" + } + ], + "type": "WRITE_ACTIONS" + } + ], + "length": 0, + "match": {}, + "packet_count": 1, + "priority": 0, + "table_id": 0 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-16-ofp_experimenter.packet.json b/tests/unit/lib/ofctl_json/of14/5-16-ofp_experimenter.packet.json new file mode 100644 index 00000000..c655f8f0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-16-ofp_experimenter.packet.json @@ -0,0 +1,8 @@ +{ + "exp": { + "data": "bmF6bw==", + "data_type": "base64", + "exp_type": 123456789, + "experimenter": 98765432 + } +} diff --git a/tests/unit/lib/ofctl_json/of14/5-2-ofp_flow_mod.packet.json b/tests/unit/lib/ofctl_json/of14/5-2-ofp_flow_mod.packet.json new file mode 100644 index 00000000..72054e33 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-2-ofp_flow_mod.packet.json @@ -0,0 +1,103 @@ +{ + "cmd": 0, + "flow": { + "instructions": [ + { + "actions": [ + { + "field": "vlan_vid", + "type": "SET_FIELD", + "value": 258 + }, + { + "type": "COPY_TTL_OUT" + }, + { + "type": "COPY_TTL_IN" + }, + { + "type": "COPY_TTL_IN" + }, + { + "type": "POP_PBB" + }, + { + "ethertype": 4660, + "type": "PUSH_PBB" + }, + { + "ethertype": 39030, + "type": "POP_MPLS" + }, + { + "ethertype": 34887, + "type": "PUSH_MPLS" + }, + { + "type": "POP_VLAN" + }, + { + "ethertype": 33024, + "type": "PUSH_VLAN" + }, + { + "type": "DEC_MPLS_TTL" + }, + { + "mpls_ttl": 10, + "type": "SET_MPLS_TTL" + }, + { + "type": "DEC_NW_TTL" + }, + { + "nw_ttl": 10, + "type": "SET_NW_TTL" + }, + { + "data": "AAECAwQFBgc=", + "data_type": "base64", + "experimenter": 101, + "type": "EXPERIMENTER" + }, + { + "queue_id": 3, + "type": "SET_QUEUE" + }, + { + "group_id": 99, + "type": "GROUP" + }, + { + "max_len": 65535, + "port": 6, + "type": "OUTPUT" + } + ], + "type": "WRITE_ACTIONS" + }, + { + "actions": [ + { + "field": "eth_src", + "type": "SET_FIELD", + "value": "01:02:03:04:05:06" + }, + { + "field": "pbb_uca", + "type": "SET_FIELD", + "value": 1 + } + ], + "type": "APPLY_ACTIONS" + } + ], + "buffer_id": 65535, + "importance": 0, + "match": { + "eth_dst": "f2:0b:a4:7d:f8:ea" + }, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/lib/ofctl_json/of14/5-21-ofp_group_mod.packet.json b/tests/unit/lib/ofctl_json/of14/5-21-ofp_group_mod.packet.json new file mode 100644 index 00000000..fa48425a --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-21-ofp_group_mod.packet.json @@ -0,0 +1,21 @@ +{ + "cmd": 0, + "group": { + "buckets": [ + { + "actions": [ + { + "max_len": 65535, + "port": 2, + "type": "OUTPUT" + } + ], + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + ], + "group_id": 1, + "type": "ALL" + } +} diff --git a/tests/unit/lib/ofctl_json/of14/5-22-ofp_port_mod.packet.json b/tests/unit/lib/ofctl_json/of14/5-22-ofp_port_mod.packet.json new file mode 100644 index 00000000..980456eb --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-22-ofp_port_mod.packet.json @@ -0,0 +1,50 @@ +{ + "port_config": { + "config": 0, + "hw_addr": "00:11:00:00:11:11", + "mask": 0, + "port_no": 1, + "properties": [ + { + "advertise": 4096, + "length": 8, + "type": 0 + }, + { + "configure": 3, + "fl_offset": 2000, + "freq_lmda": 1500, + "grid_span": 3000, + "length": 24, + "tx_pwr": 300, + "type": 1 + }, + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + }, + { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + }, + { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + ] + } +} diff --git a/tests/unit/lib/ofctl_json/of14/5-25-ofp_aggregate_stats_request.packet.json b/tests/unit/lib/ofctl_json/of14/5-25-ofp_aggregate_stats_request.packet.json new file mode 100644 index 00000000..845af65b --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-25-ofp_aggregate_stats_request.packet.json @@ -0,0 +1,11 @@ +{ + "flow": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": {}, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 255 + } +} diff --git a/tests/unit/lib/ofctl_json/of14/5-26-ofp_aggregate_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-26-ofp_aggregate_stats_reply.packet.json new file mode 100644 index 00000000..a4b23d12 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-26-ofp_aggregate_stats_reply.packet.json @@ -0,0 +1,9 @@ +{ + "1": [ + { + "byte_count": 574, + "flow_count": 6, + "packet_count": 7 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-28-ofp_table_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-28-ofp_table_stats_reply.packet.json new file mode 100644 index 00000000..95b2c495 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-28-ofp_table_stats_reply.packet.json @@ -0,0 +1,16 @@ +{ + "1": [ + { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 0 + }, + { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 1 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-30-ofp_port_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-30-ofp_port_stats_reply.packet.json new file mode 100644 index 00000000..f9f1d86f --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-30-ofp_port_stats_reply.packet.json @@ -0,0 +1,85 @@ +{ + "1": [ + { + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 7, + "properties": [ + { + "collisions": 0, + "rx_crc_err": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "type": "ETHERNET" + }, + { + "bias_current": 300, + "flags": 3, + "rx_freq_lmda": 1500, + "rx_grid_span": 500, + "rx_offset": 700, + "rx_pwr": 2000, + "temperature": 273, + "tx_freq_lmda": 1500, + "tx_grid_span": 500, + "tx_offset": 700, + "tx_pwr": 2000, + "type": "OPTICAL" + }, + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "type": "EXPERIMENTER" + } + ], + "rx_bytes": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 0, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + }, + { + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 6, + "properties": [ + { + "collisions": 0, + "rx_crc_err": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "type": "ETHERNET" + } + ], + "rx_bytes": 336, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 4, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-32-ofp_group_features_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-32-ofp_group_features_reply.packet.json new file mode 100644 index 00000000..2a29ac2d --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-32-ofp_group_features_reply.packet.json @@ -0,0 +1,104 @@ +{ + "1": [ + { + "actions": [ + { + "ALL": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "SELECT": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "INDIRECT": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "FF": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + } + ], + "capabilities": [ + "SELECT_WEIGHT", + "CHAINING" + ], + "max_groups": [ + { + "ALL": 16777216 + }, + { + "SELECT": 16777216 + }, + { + "INDIRECT": 16777216 + }, + { + "FF": 16777216 + } + ], + "types": [ + "ALL", + "SELECT", + "INDIRECT", + "FF" + ] + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-34-ofp_group_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-34-ofp_group_desc_reply.packet.json new file mode 100644 index 00000000..df0ef359 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-34-ofp_group_desc_reply.packet.json @@ -0,0 +1,24 @@ +{ + "1": [ + { + "buckets": [ + { + "actions": [ + { + "max_len": 65535, + "port": 2, + "type": "OUTPUT" + } + ], + "len": 32, + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + ], + "group_id": 1, + "length": 40, + "type": "ALL" + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-36-ofp_queue_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-36-ofp_queue_stats_reply.packet.json new file mode 100644 index 00000000..a6d246d0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-36-ofp_queue_stats_reply.packet.json @@ -0,0 +1,64 @@ +{ + "1": [ + { + "duration_nsec": 0, + "duration_sec": 0, + "length": 104, + "port_no": 7, + "properties": [ + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": "EXPERIMENTER" + } + ], + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + }, + { + "duration_nsec": 0, + "duration_sec": 0, + "length": 48, + "port_no": 6, + "properties": [], + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + }, + { + "duration_nsec": 0, + "duration_sec": 0, + "length": 48, + "port_no": 7, + "properties": [], + "queue_id": 2, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-43-ofp_meter_mod.packet.json b/tests/unit/lib/ofctl_json/of14/5-43-ofp_meter_mod.packet.json new file mode 100644 index 00000000..b78ea6be --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-43-ofp_meter_mod.packet.json @@ -0,0 +1,31 @@ +{ + "cmd": 0, + "meter": { + "flags": [ + "PKTPS", + "BURST", + "STATS" + ], + "meter_id": 100, + "bands": [ + { + "burst_size": 10, + "rate": 1000, + "type": "DROP" + }, + { + "burst_size": 10, + "prec_level": 1, + "rate": 1000, + "type": "DSCP_REMARK" + }, + { + "burst_size": 10, + "experimenter": 999, + "len": 16, + "rate": 1000, + "type": "EXPERIMENTER" + } + ] + } +} diff --git a/tests/unit/lib/ofctl_json/of14/5-46-ofp_meter_config_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-46-ofp_meter_config_reply.packet.json new file mode 100644 index 00000000..d5efcd97 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-46-ofp_meter_config_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "bands": [ + { + "burst_size": 10, + "rate": 1000, + "type": "DROP" + } + ], + "flags": [ + "PKTPS", + "BURST", + "STATS" + ], + "meter_id": 100 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-48-ofp_meter_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-48-ofp_meter_stats_reply.packet.json new file mode 100644 index 00000000..f21ec519 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-48-ofp_meter_stats_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "band_stats": [ + { + "byte_band_count": 0, + "packet_band_count": 0 + } + ], + "byte_in_count": 0, + "duration_nsec": 480000, + "duration_sec": 0, + "flow_count": 0, + "len": 56, + "meter_id": 100, + "packet_in_count": 0 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-50-ofp_meter_features_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-50-ofp_meter_features_reply.packet.json new file mode 100644 index 00000000..24dac7d4 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-50-ofp_meter_features_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "band_types": [ + "DROP", + "DSCP_REMARK" + ], + "capabilities": [ + "KBPS", + "PKTPS", + "BURST", + "STATS" + ], + "max_bands": 255, + "max_color": 0, + "max_meter": 16777216 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-52-ofp_port_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-52-ofp_port_desc_reply.packet.json new file mode 100644 index 00000000..c2f748a8 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-52-ofp_port_desc_reply.packet.json @@ -0,0 +1,83 @@ +{ + "1": [ + { + "config": 0, + "hw_addr": "f2:0b:a4:d0:3f:70", + "length": 168, + "name": "Port7", + "port_no": 7, + "properties": [ + { + "advertised": 10240, + "curr": 10248, + "curr_speed": 5000, + "length": 32, + "max_speed": 5000, + "peer": 10248, + "supported": 10248, + "type": "ETHERNET" + }, + { + "length": 40, + "rx_grid_freq_lmda": 1500, + "rx_max_freq_lmda": 2000, + "rx_min_freq_lmda": 1000, + "supported": 1, + "tx_grid_freq_lmda": 1500, + "tx_max_freq_lmda": 2000, + "tx_min_freq_lmda": 1000, + "tx_pwr_max": 2000, + "tx_pwr_min": 1000, + "type": "OPTICAL" + }, + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": "EXPERIMENTER" + } + ], + "state": 4 + }, + { + "config": 0, + "hw_addr": "f2:0b:a4:7d:f8:ea", + "length": 72, + "name": "Port6", + "port_no": 6, + "properties": [ + { + "advertised": 10240, + "curr": 10248, + "curr_speed": 5000, + "length": 32, + "max_speed": 5000, + "peer": 10248, + "supported": 10248, + "type": "ETHERNET" + } + ], + "state": 4 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-54-ofp_table_features_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-54-ofp_table_features_reply.packet.json new file mode 100644 index 00000000..ded5a996 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-54-ofp_table_features_reply.packet.json @@ -0,0 +1,11928 @@ +{ + "1": [ + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + }, + { + "type": "EXPERIMENTER" + }, + { + "type": "EXPERIMENTER" + }, + { + "type": "EXPERIMENTER" + } + ], + "table_id": 0 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x01", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 1 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x02", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 2 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x03", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 3 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x04", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 4 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x05", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 5 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x06", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 6 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x07", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 7 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x08", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 8 + }, + { + "config": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x09", + "properties": [ + { + "instruction_ids": [ + { + "len": 4, + "type": 1 + }, + { + "len": 4, + "type": 2 + }, + { + "len": 4, + "type": 3 + }, + { + "len": 4, + "type": 4 + }, + { + "len": 4, + "type": 5 + }, + { + "len": 4, + "type": 6 + } + ], + "type": "INSTRUCTIONS" + }, + { + "table_ids": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": "NEXT_TABLES" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "WRITE_ACTIONS" + }, + { + "action_ids": [ + { + "len": 4, + "type": 0 + }, + { + "len": 4, + "type": 22 + }, + { + "len": 4, + "type": 21 + }, + { + "len": 4, + "type": 15 + }, + { + "len": 4, + "type": 16 + }, + { + "len": 4, + "type": 23 + }, + { + "len": 4, + "type": 24 + }, + { + "len": 4, + "type": 11 + }, + { + "len": 4, + "type": 12 + }, + { + "len": 4, + "type": 17 + }, + { + "len": 4, + "type": 18 + }, + { + "len": 4, + "type": 19 + }, + { + "len": 4, + "type": 20 + }, + { + "len": 4, + "type": 26 + }, + { + "len": 4, + "type": 27 + }, + { + "len": 4, + "type": 25 + } + ], + "type": "APPLY_ACTIONS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "MATCH" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WILDCARDS" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "WRITE_SETFIELD" + }, + { + "oxm_ids": [ + { + "hasmask": 0, + "length": 0, + "type": "in_port" + }, + { + "hasmask": 0, + "length": 0, + "type": "metadata" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "eth_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + }, + { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + }, + { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_op" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + }, + { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + }, + { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + }, + { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + }, + { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + }, + { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + ], + "type": "APPLY_SETFIELD" + } + ], + "table_id": 9 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-56-ofp_group_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-56-ofp_group_stats_reply.packet.json new file mode 100644 index 00000000..1c6f9039 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-56-ofp_group_stats_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "bucket_stats": [ + { + "byte_count": 2345, + "packet_count": 234 + } + ], + "byte_count": 12345, + "duration_nsec": 609036000, + "duration_sec": 9, + "group_id": 1, + "length": 56, + "packet_count": 123, + "ref_count": 2 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of14/5-63-ofp_queue_desc_request.packet.json b/tests/unit/lib/ofctl_json/of14/5-63-ofp_queue_desc_request.packet.json new file mode 100644 index 00000000..fc863813 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-63-ofp_queue_desc_request.packet.json @@ -0,0 +1,4 @@ +{ + "port_no": 7, + "queue_id": 4294967295 +} diff --git a/tests/unit/lib/ofctl_json/of14/5-64-ofp_queue_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of14/5-64-ofp_queue_desc_reply.packet.json new file mode 100644 index 00000000..ca6e87f2 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of14/5-64-ofp_queue_desc_reply.packet.json @@ -0,0 +1,61 @@ +{ + "1": [ + { + "len": 32, + "port_no": 7, + "properties": [ + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": "EXPERIMENTER" + } + ], + "queue_id": 0 + }, + { + "len": 88, + "port_no": 8, + "properties": [ + { + "length": 8, + "rate": 300, + "type": "MIN_RATE" + }, + { + "length": 8, + "rate": 900, + "type": "MAX_RATE" + }, + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": "EXPERIMENTER" + } + ], + "queue_id": 1 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json new file mode 100644 index 00000000..0b5e04be --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json @@ -0,0 +1,48 @@ +{ + "1": [ + { + "cookie": 1234605616436508552, + "flags": 1, + "hard_timeout": 255, + "idle_timeout": 255, + "importance": 43690, + "instructions": [ + { + "table_id": 2, + "type": "GOTO_TABLE" + }, + { + "actions": [ + { + "meter_id": 2, + "type": "METER" + } + ], + "type": "WRITE_ACTIONS" + }, + { + "actions": [ + { + "type": "COPY_FIELD", + "n_bits": 32, + "src_offset": 1, + "dst_offset": 2, + "src_oxm_id": "eth_src", + "dst_oxm_id": "eth_dst" + } + ], + "type": "APPLY_ACTIONS" + } + ], + "length": 64, + "match": { + "in_port": 1 + }, + "priority": 5, + "stats": { + "flow_count": 1 + }, + "table_id": 1 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json b/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json new file mode 100644 index 00000000..f59aa0b2 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json @@ -0,0 +1,13 @@ +{ + "flow": { + "cookie": 1234605616436508552, + "cookie_mask": 18446744073709551615, + "flags": 0, + "match": { + "in_port": 1 + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 1 + } +} diff --git a/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_mod.packet.json b/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_mod.packet.json new file mode 100644 index 00000000..cc3ba488 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/lib-ofctl-OFP15-flow_mod.packet.json @@ -0,0 +1,115 @@ +{ + "cmd": 0, + "flow": { + "instructions": [ + { + "actions": [ + { + "field": "vlan_vid", + "type": "SET_FIELD", + "value": 258 + }, + { + "type": "COPY_TTL_OUT" + }, + { + "type": "COPY_TTL_IN" + }, + { + "type": "COPY_TTL_IN" + }, + { + "type": "POP_PBB" + }, + { + "ethertype": 4660, + "type": "PUSH_PBB" + }, + { + "ethertype": 39030, + "type": "POP_MPLS" + }, + { + "ethertype": 34887, + "type": "PUSH_MPLS" + }, + { + "type": "POP_VLAN" + }, + { + "ethertype": 33024, + "type": "PUSH_VLAN" + }, + { + "type": "DEC_MPLS_TTL" + }, + { + "mpls_ttl": 10, + "type": "SET_MPLS_TTL" + }, + { + "type": "DEC_NW_TTL" + }, + { + "nw_ttl": 10, + "type": "SET_NW_TTL" + }, + { + "data": "AAECAwQFBgc=", + "data_type": "base64", + "experimenter": 101, + "type": "EXPERIMENTER" + }, + { + "queue_id": 3, + "type": "SET_QUEUE" + }, + { + "meter_id": 2, + "type": "METER" + }, + { + "group_id": 99, + "type": "GROUP" + }, + { + "max_len": 65535, + "port": 6, + "type": "OUTPUT" + } + ], + "type": "WRITE_ACTIONS" + }, + { + "actions": [ + { + "field": "eth_src", + "type": "SET_FIELD", + "value": "01:02:03:04:05:06" + }, + { + "field": "pbb_uca", + "type": "SET_FIELD", + "value": 1 + }, + { + "type": "COPY_FIELD", + "n_bits": 32, + "src_offset": 1, + "dst_offset": 2, + "src_oxm_id": "eth_src", + "dst_oxm_id": "eth_dst" + } + ], + "type": "APPLY_ACTIONS" + } + ], + "buffer_id": 65535, + "importance": 0, + "match": { + "eth_dst": "f2:0b:a4:7d:f8:ea" + }, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json new file mode 100644 index 00000000..ac4f93c4 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json @@ -0,0 +1,10 @@ +{ + "1": [ + { + "length": 16, + "stats": { + "flow_count": 1 + } + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_request.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_request.packet.json new file mode 100644 index 00000000..845af65b --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-aggregate_stats_request.packet.json @@ -0,0 +1,11 @@ +{ + "flow": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": {}, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 255 + } +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-desc_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-desc_reply.packet.json new file mode 100644 index 00000000..8fc54b74 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-desc_reply.packet.json @@ -0,0 +1,9 @@ +{ + "1": { + "dp_desc": "dp", + "hw_desc": "hw", + "mfr_desc": "mfr", + "serial_num": "serial", + "sw_desc": "sw" + } +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-experimenter.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-experimenter.packet.json new file mode 100644 index 00000000..c655f8f0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-experimenter.packet.json @@ -0,0 +1,8 @@ +{ + "exp": { + "data": "bmF6bw==", + "data_type": "base64", + "exp_type": 123456789, + "experimenter": 98765432 + } +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_reply.packet.json new file mode 100644 index 00000000..4e12f857 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_reply.packet.json @@ -0,0 +1,26 @@ +{ + "1": [ + { + "cookie": 1234605616436508552, + "flags": 1, + "hard_timeout": 255, + "idle_timeout": 255, + "importance": 43690, + "instructions": [ + { + "table_id": 2, + "type": "GOTO_TABLE" + } + ], + "length": 64, + "match": { + "in_port": 1 + }, + "priority": 5, + "stats": { + "flow_count": 1 + }, + "table_id": 1 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_request.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_request.packet.json new file mode 100644 index 00000000..f59aa0b2 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_desc_request.packet.json @@ -0,0 +1,13 @@ +{ + "flow": { + "cookie": 1234605616436508552, + "cookie_mask": 18446744073709551615, + "flags": 0, + "match": { + "in_port": 1 + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 1 + } +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json new file mode 100644 index 00000000..72054e33 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json @@ -0,0 +1,103 @@ +{ + "cmd": 0, + "flow": { + "instructions": [ + { + "actions": [ + { + "field": "vlan_vid", + "type": "SET_FIELD", + "value": 258 + }, + { + "type": "COPY_TTL_OUT" + }, + { + "type": "COPY_TTL_IN" + }, + { + "type": "COPY_TTL_IN" + }, + { + "type": "POP_PBB" + }, + { + "ethertype": 4660, + "type": "PUSH_PBB" + }, + { + "ethertype": 39030, + "type": "POP_MPLS" + }, + { + "ethertype": 34887, + "type": "PUSH_MPLS" + }, + { + "type": "POP_VLAN" + }, + { + "ethertype": 33024, + "type": "PUSH_VLAN" + }, + { + "type": "DEC_MPLS_TTL" + }, + { + "mpls_ttl": 10, + "type": "SET_MPLS_TTL" + }, + { + "type": "DEC_NW_TTL" + }, + { + "nw_ttl": 10, + "type": "SET_NW_TTL" + }, + { + "data": "AAECAwQFBgc=", + "data_type": "base64", + "experimenter": 101, + "type": "EXPERIMENTER" + }, + { + "queue_id": 3, + "type": "SET_QUEUE" + }, + { + "group_id": 99, + "type": "GROUP" + }, + { + "max_len": 65535, + "port": 6, + "type": "OUTPUT" + } + ], + "type": "WRITE_ACTIONS" + }, + { + "actions": [ + { + "field": "eth_src", + "type": "SET_FIELD", + "value": "01:02:03:04:05:06" + }, + { + "field": "pbb_uca", + "type": "SET_FIELD", + "value": 1 + } + ], + "type": "APPLY_ACTIONS" + } + ], + "buffer_id": 65535, + "importance": 0, + "match": { + "eth_dst": "f2:0b:a4:7d:f8:ea" + }, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_reply.packet.json new file mode 100644 index 00000000..385f256b --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_reply.packet.json @@ -0,0 +1,16 @@ +{ + "1": [ + { + "length": 40, + "match": { + "in_port": 1 + }, + "priority": 1, + "reason": 0, + "stats": { + "flow_count": 1 + }, + "table_id": 1 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_request.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_request.packet.json new file mode 100644 index 00000000..a42dfef0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-flow_stats_request.packet.json @@ -0,0 +1,11 @@ +{ + "flow": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": {}, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 0 + } +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_reply.packet.json new file mode 100644 index 00000000..b6b75020 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_reply.packet.json @@ -0,0 +1,27 @@ +{ + "1": [ + { + "buckets": [ + { + "actions": [ + { + "max_len": 65509, + "port": 1, + "type": "OUTPUT" + } + ], + "bucket_id": 65535, + "properties": [ + { + "type": "WEIGHT", + "weight": 65535 + } + ] + } + ], + "group_id": 1, + "properties": [], + "type": "SELECT" + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_request.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_request.packet.json new file mode 100644 index 00000000..f25aaff4 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_desc_request.packet.json @@ -0,0 +1,3 @@ +{ + "group_id": 52651 +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_features_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_features_reply.packet.json new file mode 100644 index 00000000..2a29ac2d --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_features_reply.packet.json @@ -0,0 +1,104 @@ +{ + "1": [ + { + "actions": [ + { + "ALL": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "SELECT": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "INDIRECT": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + }, + { + "FF": [ + "OUTPUT", + "COPY_TTL_OUT", + "COPY_TTL_IN", + "SET_MPLS_TTL", + "DEC_MPLS_TTL", + "PUSH_VLAN", + "POP_VLAN", + "PUSH_MPLS", + "POP_MPLS", + "SET_QUEUE", + "GROUP", + "SET_NW_TTL", + "DEC_NW_TTL", + "SET_FIELD" + ] + } + ], + "capabilities": [ + "SELECT_WEIGHT", + "CHAINING" + ], + "max_groups": [ + { + "ALL": 16777216 + }, + { + "SELECT": 16777216 + }, + { + "INDIRECT": 16777216 + }, + { + "FF": 16777216 + } + ], + "types": [ + "ALL", + "SELECT", + "INDIRECT", + "FF" + ] + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_mod.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_mod.packet.json new file mode 100644 index 00000000..eca861ea --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_mod.packet.json @@ -0,0 +1,42 @@ +{ + "cmd": 3, + "group": { + "buckets": [ + { + "actions": [ + { + "len": 8, + "type": "POP_VLAN" + }, + { + "field": "ipv4_dst", + "type": "SET_FIELD", + "value": "192.168.2.9" + } + ], + "bucket_id": 305419896, + "properties": [ + { + "length": 8, + "type": "WEIGHT", + "weight": 52428 + }, + { + "length": 8, + "type": "WATCH_PORT", + "watch": 56797 + }, + { + "length": 8, + "type": "WATCH_GROUP", + "watch": 4008636142 + } + ] + } + ], + "command_bucket_id": 3149642683, + "group_id": 2863311530, + "properties": [], + "type": "SELECT" + } +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_stats_reply.packet.json new file mode 100644 index 00000000..1c6f9039 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-group_stats_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "bucket_stats": [ + { + "byte_count": 2345, + "packet_count": 234 + } + ], + "byte_count": 12345, + "duration_nsec": 609036000, + "duration_sec": 9, + "group_id": 1, + "length": 56, + "packet_count": 123, + "ref_count": 2 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_desc_reply.packet.json new file mode 100644 index 00000000..d5efcd97 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_desc_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "bands": [ + { + "burst_size": 10, + "rate": 1000, + "type": "DROP" + } + ], + "flags": [ + "PKTPS", + "BURST", + "STATS" + ], + "meter_id": 100 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_features_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_features_reply.packet.json new file mode 100644 index 00000000..24dac7d4 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_features_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "band_types": [ + "DROP", + "DSCP_REMARK" + ], + "capabilities": [ + "KBPS", + "PKTPS", + "BURST", + "STATS" + ], + "max_bands": 255, + "max_color": 0, + "max_meter": 16777216 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_mod.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_mod.packet.json new file mode 100644 index 00000000..1d881209 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_mod.packet.json @@ -0,0 +1,24 @@ +{ + "cmd": 0, + "meter": { + "bands": [ + { + "burst_size": 10, + "rate": 1000, + "type": "DROP" + }, + { + "burst_size": 10, + "prec_level": 1, + "rate": 1000, + "type": "DSCP_REMARK" + } + ], + "flags": [ + "PKTPS", + "BURST", + "STATS" + ], + "meter_id": 100 + } +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_stats_reply.packet.json new file mode 100644 index 00000000..e7f9722b --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-meter_stats_reply.packet.json @@ -0,0 +1,19 @@ +{ + "1": [ + { + "band_stats": [ + { + "byte_band_count": 0, + "packet_band_count": 0 + } + ], + "byte_in_count": 0, + "duration_nsec": 480000, + "duration_sec": 0, + "len": 56, + "meter_id": 100, + "packet_in_count": 0, + "ref_count": 0 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_reply.packet.json new file mode 100644 index 00000000..c2f748a8 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_reply.packet.json @@ -0,0 +1,83 @@ +{ + "1": [ + { + "config": 0, + "hw_addr": "f2:0b:a4:d0:3f:70", + "length": 168, + "name": "Port7", + "port_no": 7, + "properties": [ + { + "advertised": 10240, + "curr": 10248, + "curr_speed": 5000, + "length": 32, + "max_speed": 5000, + "peer": 10248, + "supported": 10248, + "type": "ETHERNET" + }, + { + "length": 40, + "rx_grid_freq_lmda": 1500, + "rx_max_freq_lmda": 2000, + "rx_min_freq_lmda": 1000, + "supported": 1, + "tx_grid_freq_lmda": 1500, + "tx_max_freq_lmda": 2000, + "tx_min_freq_lmda": 1000, + "tx_pwr_max": 2000, + "tx_pwr_min": 1000, + "type": "OPTICAL" + }, + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": "EXPERIMENTER" + } + ], + "state": 4 + }, + { + "config": 0, + "hw_addr": "f2:0b:a4:7d:f8:ea", + "length": 72, + "name": "Port6", + "port_no": 6, + "properties": [ + { + "advertised": 10240, + "curr": 10248, + "curr_speed": 5000, + "length": 32, + "max_speed": 5000, + "peer": 10248, + "supported": 10248, + "type": "ETHERNET" + } + ], + "state": 4 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_request.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_request.packet.json new file mode 100644 index 00000000..d0519e83 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_desc_request.packet.json @@ -0,0 +1,3 @@ +{ + "port_no": 48346 +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_mod.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_mod.packet.json new file mode 100644 index 00000000..be9de69d --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_mod.packet.json @@ -0,0 +1,50 @@ +{ + "port_config": { + "config": 0, + "hw_addr": "00:11:00:00:11:11", + "mask": 0, + "port_no": 1, + "properties": [ + { + "advertise": 4096, + "length": 8, + "type": "ETHERNET" + }, + { + "configure": 3, + "fl_offset": 2000, + "freq_lmda": 1500, + "grid_span": 3000, + "length": 24, + "tx_pwr": 300, + "type": "OPTICAL" + }, + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": "EXPERIMENTER" + } + ] + } +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_stats_reply.packet.json new file mode 100644 index 00000000..821c9b72 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-port_stats_reply.packet.json @@ -0,0 +1,93 @@ +{ + "1": [ + { + "duration_nsec": 0, + "duration_sec": 0, + "length": 224, + "port_no": 7, + "properties": [ + { + "collisions": 0, + "length": 40, + "rx_crc_err": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "type": "ETHERNET" + }, + { + "bias_current": 300, + "flags": 3, + "length": 44, + "rx_freq_lmda": 1500, + "rx_grid_span": 500, + "rx_offset": 700, + "rx_pwr": 2000, + "temperature": 273, + "tx_freq_lmda": 1500, + "tx_grid_span": 500, + "tx_offset": 700, + "tx_pwr": 2000, + "type": "OPTICAL" + }, + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": "EXPERIMENTER" + } + ], + "rx_bytes": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 0, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + }, + { + "duration_nsec": 0, + "duration_sec": 0, + "length": 120, + "port_no": 6, + "properties": [ + { + "collisions": 0, + "length": 40, + "rx_crc_err": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "type": "ETHERNET" + } + ], + "rx_bytes": 336, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 4, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_reply.packet.json new file mode 100644 index 00000000..71ca0b71 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_reply.packet.json @@ -0,0 +1,61 @@ +{ + "1": [ + { + "len": 32, + "port_no": 7, + "properties": [ + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": "EXPERIMENTER" + } + ], + "queue_id": 0 + }, + { + "len": 88, + "port_no": 8, + "properties": [ + { + "length": 8, + "rate": 300, + "type": "MIN_RATE" + }, + { + "length": 8, + "rate": 900, + "type": "MAX_RATE" + }, + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": "EXPERIMENTER" + } + ], + "queue_id": 1 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_request.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_request.packet.json new file mode 100644 index 00000000..9765cf31 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_desc_request.packet.json @@ -0,0 +1,4 @@ +{ + "port_no": 52651, + "queue_id": 57020 +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_stats_reply.packet.json new file mode 100644 index 00000000..a6d246d0 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-queue_stats_reply.packet.json @@ -0,0 +1,64 @@ +{ + "1": [ + { + "duration_nsec": 0, + "duration_sec": 0, + "length": 104, + "port_no": 7, + "properties": [ + { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": "EXPERIMENTER" + }, + { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": "EXPERIMENTER" + } + ], + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + }, + { + "duration_nsec": 0, + "duration_sec": 0, + "length": 48, + "port_no": 6, + "properties": [], + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + }, + { + "duration_nsec": 0, + "duration_sec": 0, + "length": 48, + "port_no": 7, + "properties": [], + "queue_id": 2, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_features_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_features_reply.packet.json new file mode 100644 index 00000000..e16efb76 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_features_reply.packet.json @@ -0,0 +1,25 @@ +{ + "1": [ + { + "capabilities": 4, + "command": 1, + "features": 1, + "length": 80, + "max_entries": 255, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "table1", + "properties": [ + { + "oxm_values": [ + { + "eth_src": "aa:bb:cc:dd:ee:ff" + } + ], + "type": "PACKET_TYPES" + } + ], + "table_id": 1 + } + ] +} diff --git a/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_stats_reply.packet.json b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_stats_reply.packet.json new file mode 100644 index 00000000..95b2c495 --- /dev/null +++ b/tests/unit/lib/ofctl_json/of15/libofproto-OFP15-table_stats_reply.packet.json @@ -0,0 +1,16 @@ +{ + "1": [ + { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 0 + }, + { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 1 + } + ] +} diff --git a/tests/unit/lib/ovs/__init__.py b/tests/unit/lib/ovs/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/lib/ovs/test_vsctl.py b/tests/unit/lib/ovs/test_vsctl.py new file mode 100644 index 00000000..28edf6e9 --- /dev/null +++ b/tests/unit/lib/ovs/test_vsctl.py @@ -0,0 +1,789 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from distutils.spawn import find_executable +import logging +import subprocess +import unittest + +from nose.tools import eq_ +from nose.tools import ok_ + +from ryu.lib.hub import sleep +from ryu.lib.ovs import vsctl + + +LOG = logging.getLogger(__name__) + +DOCKER_IMAGE_MININET = 'osrg/ryu-book' + +OVSDB_MANAGER_ADDR = 'ptcp:6640' +OVSDB_SWITCH_ADDR = 'tcp:%s:6640' + + +def setUpModule(): + if not find_executable('docker'): + raise unittest.SkipTest( + 'Docker is not available. Test in %s will be skipped.' % __name__) + + +def _run(command): + popen = subprocess.Popen(command.split(), stdout=subprocess.PIPE) + popen.wait() + result = popen.stdout.read().decode('utf-8') + + if result: + return [str(r.strip('\r')) for r in result.split('\n')] + else: + return [] + + +class TestVSCtl(unittest.TestCase): + """ + Test cases for ryu.lib.ovs.vsctl.VSCtl + """ + container_mn = None # Container ID of Mininet + container_mn_ip = None # IP of Mininet container + + vsctl = None # instance of vsctl.VSCtl + + @classmethod + def _docker_exec(cls, container, command): + return _run('docker exec -t %s %s' % (container, command)) + + @classmethod + def _docker_exec_mn(cls, command): + return cls._docker_exec(cls.container_mn, command) + + @classmethod + def _docker_run(cls, image): + return _run('docker run --privileged -t -d %s' % image)[0] + + @classmethod + def _docker_stop(cls, container): + return _run('docker stop %s' % container)[0] + + @classmethod + def _docker_rm(cls, container): + return _run('docker rm %s' % container)[0] + + @classmethod + def _docker_inspect_ip_addr(cls, container): + return _run( + 'docker inspect --format="{{.NetworkSettings.IPAddress}}" %s' % + container)[0].strip('"') + + @classmethod + def _set_up_mn_container(cls): + cls.container_mn = cls._docker_run(DOCKER_IMAGE_MININET) + cls.container_mn_ip = cls._docker_inspect_ip_addr(cls.container_mn) + + # Note: Wait for loading the OVS kernel module. + # If the OVS kernel module is loaded at first time, it might take + # a few seconds. + sleep(5) + + cls._docker_exec_mn( + 'ovs-vsctl set-manager %s' % OVSDB_MANAGER_ADDR) + + @classmethod + def _set_up_vsctl(cls): + cls.vsctl = vsctl.VSCtl(OVSDB_SWITCH_ADDR % cls.container_mn_ip) + + @classmethod + def setUpClass(cls): + cls._set_up_mn_container() + cls._set_up_vsctl() + + @classmethod + def _tear_down_mn_container(cls): + cls._docker_exec_mn('mn --clean') + cls._docker_stop(cls.container_mn) + cls._docker_rm(cls.container_mn) + + @classmethod + def tearDownClass(cls): + cls._tear_down_mn_container() + + def setUp(self): + pass + + def tearDown(self): + pass + + def _run_commands(self, commands): + self.vsctl.run_command(commands, timeout_sec=1) + + # 00: Open vSwitch commands + + def test_00_01_init(self): + command = vsctl.VSCtlCommand('init') + self._run_commands([command]) + + ok_(command.result is None) + + def test_00_02_show(self): + command = vsctl.VSCtlCommand('show') + self._run_commands([command]) + + ok_(command.result is not None) + + # 01: Bridge commands + + def test_01_01_add_br_bridge(self): + bridge = 's1' + command = vsctl.VSCtlCommand('add-br', (bridge,)) + self._run_commands([command]) + + result = self._docker_exec_mn('ovs-vsctl list-br') + ok_(bridge in result) + + def test_01_02_add_br_parent_vlan(self): + bridge = 'sub-s1-100' + parent = 's1' + vlan = '100' + command = vsctl.VSCtlCommand('add-br', (bridge, parent, vlan)) + self._run_commands([command]) + + result = self._docker_exec_mn('ovs-vsctl list-br') + ok_(bridge in result) + result = self._docker_exec_mn( + 'ovs-vsctl br-to-parent %s' % bridge) + eq_(parent, result[0]) + result = self._docker_exec_mn( + 'ovs-vsctl br-to-vlan %s' % bridge) + eq_(vlan, result[0]) + + def test_01_03_del_br(self): + bridge = 's1' + child = 'sub-s1-100' + + command = vsctl.VSCtlCommand('del-br', (bridge,)) + self._run_commands([command]) + + result = self._docker_exec_mn('ovs-vsctl list-br') + ok_(bridge not in result) + ok_(child not in result) + + def test_01_04_list_br(self): + bridge = 's1' + child = 'sub-s1-100' + vlan = '100' + self._docker_exec_mn('ovs-vsctl add-br %s' % bridge) + self._docker_exec_mn( + 'ovs-vsctl add-br %s %s %s' % (child, bridge, vlan)) + + command = vsctl.VSCtlCommand('list-br') + self._run_commands([command]) + + ok_(bridge in command.result) + ok_(child in command.result) + + def test_01_05_br_exists(self): + bridge = 's1' + + command = vsctl.VSCtlCommand('br-exists', (bridge, )) + self._run_commands([command]) + + eq_(True, command.result) + + def test_01_06_br_to_vlan(self): + bridge = 's1' + + command = vsctl.VSCtlCommand('br-to-vlan', (bridge, )) + self._run_commands([command]) + + eq_(0, command.result) + + def test_01_06_br_to_vlan_fake_bridge(self): + bridge = 'sub-s1-100' + + command = vsctl.VSCtlCommand('br-to-vlan', (bridge, )) + self._run_commands([command]) + + eq_(100, command.result) + + def test_01_07_br_to_parent(self): + bridge = 's1' + parent = bridge + + command = vsctl.VSCtlCommand('br-to-parent', (bridge, )) + self._run_commands([command]) + + # result = + eq_(parent, command.result.name) + + def test_01_07_br_to_parent_fake_bridge(self): + bridge = 'sub-s1-100' + parent = 's1' + + command = vsctl.VSCtlCommand('br-to-parent', (bridge, )) + self._run_commands([command]) + + # result = + eq_(parent, command.result.name) + + def test_01_08_br_set_external_id_add(self): + bridge = 's1' + key = 'ext_id_key' + value = 'ext_id_value' + + command = vsctl.VSCtlCommand( + 'br-set-external-id', (bridge, key, value)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl br-get-external-id %s %s' % (bridge, key)) + eq_(value, result[0]) + + def test_01_09_br_get_external_id_value(self): + bridge = 's1' + key = 'ext_id_key' + value = 'ext_id_value' + + command = vsctl.VSCtlCommand( + 'br-get-external-id', (bridge, key)) + self._run_commands([command]) + + eq_(value, command.result) + + def test_01_10_br_get_external_id_dict(self): + bridge = 's1' + key = 'ext_id_key' + value = 'ext_id_value' + + command = vsctl.VSCtlCommand( + 'br-get-external-id', (bridge,)) + self._run_commands([command]) + + eq_({key: value}, command.result) + + def test_01_11_br_set_external_id_clear(self): + bridge = 's1' + key = 'ext_id_key' + + command = vsctl.VSCtlCommand( + 'br-set-external-id', (bridge, key)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl br-get-external-id %s %s' % (bridge, key)) + eq_([], result) + + # Clean up + self._docker_exec_mn('mn --clean') + + # 02: Port commands + + def test_02_01_list_ports(self): + bridge = 's1' + interface_1 = 's1-eth1' + interface_2 = 's1-eth2' + + self._docker_exec_mn( + 'ip link add %s type dummy' % interface_1) + self._docker_exec_mn( + 'ip link add %s type dummy' % interface_2) + self._docker_exec_mn( + 'ovs-vsctl add-br %(bridge)s' + ' -- add-port %(bridge)s %(interface_1)s' + ' -- add-port %(bridge)s %(interface_2)s' % locals()) + + command = vsctl.VSCtlCommand('list-ports', (bridge,)) + self._run_commands([command]) + + ok_(interface_1 in command.result) + ok_(interface_2 in command.result) + + def test_02_02_add_port(self): + bridge = 's1' + interface_1 = 's1-eth1' + self._docker_exec_mn( + 'ovs-vsctl del-port %s %s' % (bridge, interface_1)) + + command = vsctl.VSCtlCommand('add-port', (bridge, interface_1)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl port-to-br %s' % interface_1) + eq_(bridge, result[0]) + + def test_02_03_add_bond(self): + bridge = 's1' + interface_1 = 's1-eth1' + interface_2 = 's1-eth2' + port = 's1-bond1' + interface_list = [interface_1, interface_2] + self._docker_exec_mn('ovs-vsctl del-br %s' % bridge) + self._docker_exec_mn('ovs-vsctl add-br %s' % bridge) + + command = vsctl.VSCtlCommand( + 'add-bond', (bridge, port, interface_list)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl port-to-br %s' % port) + eq_(bridge, result[0]) + + def test_02_04_del_port(self): + bridge = 's1' + port = 's1-bond1' + + command = vsctl.VSCtlCommand('del-port', (bridge, port)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl list-ports %s' % bridge) + eq_([], result) + + def test_02_05_port_to_br(self): + bridge = 's1' + port_1 = 's1-eth1' + port_2 = 's1-eth2' + self._docker_exec_mn('ovs-vsctl del-br %s' % bridge) + self._docker_exec_mn( + 'ovs-vsctl add-br %(bridge)s' + ' -- add-port %(bridge)s %(port_1)s' + ' -- add-port %(bridge)s %(port_2)s' % locals()) + + command = vsctl.VSCtlCommand('port-to-br', (port_1,)) + self._run_commands([command]) + + eq_(bridge, command.result) + + # Clean up + self._docker_exec_mn('mn --clean') + + # 03: Interface commands + + def test_03_01_list_ifaces(self): + bridge = 's1' + interface_1 = 's1-eth1' + interface_2 = 's1-eth2' + + self._docker_exec_mn( + 'ip link add %s type dummy' % interface_1) + self._docker_exec_mn( + 'ip link add %s type dummy' % interface_2) + self._docker_exec_mn( + 'ovs-vsctl add-br %(bridge)s' + ' -- add-port %(bridge)s %(interface_1)s' + ' -- add-port %(bridge)s %(interface_2)s' % locals()) + + command = vsctl.VSCtlCommand('list-ifaces', (bridge,)) + self._run_commands([command]) + + ok_(interface_1 in command.result) + ok_(interface_2 in command.result) + + def test_03_02_ifaces_to_br(self): + bridge = 's1' + interface_1 = 's1-eth1' + + command = vsctl.VSCtlCommand('iface-to-br', (interface_1,)) + self._run_commands([command]) + + eq_(bridge, command.result) + + # Clean up + self._docker_exec_mn('mn --clean') + + # 04: Controller commands + + def test_04_01_get_controller(self): + bridge = 's1' + controller = 'tcp:127.0.0.1:6653' + self._docker_exec_mn( + 'ovs-vsctl add-br %(bridge)s' + ' -- set-controller %(bridge)s %(controller)s' % locals()) + + command = vsctl.VSCtlCommand('get-controller', (bridge,)) + self._run_commands([command]) + + eq_(1, len(command.result)) + eq_(controller, command.result[0]) + + def test_04_02_del_controller(self): + bridge = 's1' + + command = vsctl.VSCtlCommand('del-controller', (bridge,)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get-controller %s' % bridge) + eq_([], result) + + def test_04_03_set_controller(self): + bridge = 's1' + controller = 'tcp:127.0.0.1:6653' + + command = vsctl.VSCtlCommand('set-controller', (bridge, controller)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get-controller %s' % bridge) + eq_(controller, result[0]) + + def test_04_04_get_fail_mode(self): + bridge = 's1' + fai_mode = 'secure' + self._docker_exec_mn( + 'ovs-vsctl set-fail-mode %s %s' % (bridge, fai_mode)) + + command = vsctl.VSCtlCommand('get-fail-mode', (bridge,)) + self._run_commands([command]) + + eq_(fai_mode, command.result) + + def test_04_05_del_fail_mode(self): + bridge = 's1' + + command = vsctl.VSCtlCommand('del-fail-mode', (bridge,)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get-fail-mode %s' % bridge) + eq_([], result) + + def test_04_06_set_fail_mode(self): + bridge = 's1' + fail_mode = 'secure' + + command = vsctl.VSCtlCommand('set-fail-mode', (bridge, fail_mode)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get-fail-mode %s' % bridge) + eq_(fail_mode, result[0]) + + # Clean up + self._docker_exec_mn('mn --clean') + + # 05: Manager commands (not implemented yet) + # 06: SSL commands (not implemented yet) + # 07: Switch commands (not implemented yet) + + # 08: Database commands + + def test_08_01_list(self): + table = 'Bridge' + bridge = 's1' + interface_1 = 's1-eth1' + interface_2 = 's1-eth2' + fail_mode = 'secure' + protocols = 'OpenFlow10,OpenFlow13' + datapath_id = '1111111111111111' + + self._docker_exec_mn( + 'ip link add %s type dummy' % interface_1) + self._docker_exec_mn( + 'ip link add %s type dummy' % interface_2) + self._docker_exec_mn( + 'ovs-vsctl add-br %(bridge)s' + ' -- add-port %(bridge)s %(interface_1)s' + ' -- add-port %(bridge)s %(interface_2)s' % locals()) + self._docker_exec_mn( + 'ovs-vsctl set %(table)s %(bridge)s ' + 'fail_mode=%(fail_mode)s ' + 'protocols=%(protocols)s ' + 'other_config:datapath-id=%(datapath_id)s' % locals()) + + command = vsctl.VSCtlCommand('list', (table,)) + self._run_commands([command]) + + eq_(1, len(command.result)) + # command.result[0] = + eq_(bridge, command.result[0].name) + + def test_08_02_find(self): + table = 'Bridge' + bridge = 's1' + + command = vsctl.VSCtlCommand('find', (table, 'name=%s' % bridge)) + self._run_commands([command]) + + eq_(1, len(command.result)) + # command.result[0] = for Bridge + eq_(bridge, command.result[0].name) + + def test_08_02_find_complex(self): + table = 'Bridge' + bridge = 's1' + fail_mode = 'secure' + protocols = 'OpenFlow10,OpenFlow13' + datapath_id = '1111111111111111' + + command = vsctl.VSCtlCommand( + 'find', (table, 'fail_mode=%s' % fail_mode, + 'protocols=%s' % protocols, + 'other_config:datapath-id=%s' % datapath_id)) + self._run_commands([command]) + + eq_(1, len(command.result)) + # command.result[0] = for Bridge + eq_(bridge, command.result[0].name) + + def test_08_03_get_01_value(self): + table = 'Bridge' + bridge = 's1' + column = 'fail_mode' + value = 'secure' + + command = vsctl.VSCtlCommand('get', (table, bridge, column)) + self._run_commands([command]) + + # command.result[0] is a list of return values + eq_(value, command.result[0][0]) + + def test_08_03_get_02_set(self): + table = 'Bridge' + bridge = 's1' + column = 'protocols' + value = 'OpenFlow10,OpenFlow13'.split(',') + + command = vsctl.VSCtlCommand('get', (table, bridge, column)) + self._run_commands([command]) + + # command.result[0] is a list + eq_(value, command.result[0]) + + def test_08_03_get_03_map(self): + table = 'Bridge' + bridge = 's1' + column = 'other_config' + key = 'datapath-id' + datapath_id = '1111111111111111' + value = {key: datapath_id} + + command = vsctl.VSCtlCommand('get', (table, bridge, column)) + self._run_commands([command]) + + # command.result[0] is a dict + eq_(value, command.result[0]) + + def test_08_03_get_04_map_value(self): + table = 'Bridge' + bridge = 's1' + column = 'other_config' + key = 'datapath-id' + datapath_id = '1111111111111111' + value = datapath_id + + command = vsctl.VSCtlCommand( + 'get', (table, bridge, '%s:%s' % (column, key))) + self._run_commands([command]) + + # command.result[0] is a dict + eq_(value, command.result[0]) + + def test_08_04_set_01_value(self): + table = 'Bridge' + bridge = 's1' + column = 'fail_mode' + value = 'standalone' + + command = vsctl.VSCtlCommand( + 'set', (table, bridge, '%s=%s' % (column, value))) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s' % (table, bridge, column)) + eq_(value, result[0]) + + def test_08_04_set_02_set(self): + table = 'Bridge' + bridge = 's1' + column = 'protocols' + value = 'OpenFlow10,OpenFlow12,OpenFlow13' + + command = vsctl.VSCtlCommand( + 'set', (table, bridge, '%s=%s' % (column, value))) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s' % (table, bridge, column)) + expected_value = '["OpenFlow10", "OpenFlow12", "OpenFlow13"]' + eq_(expected_value, result[0]) + + def test_08_04_set_03_map(self): + table = 'Bridge' + bridge = 's1' + column = 'other_config' + key = 'datapath-id' + value = '0000000000000001' + + command = vsctl.VSCtlCommand( + 'set', (table, bridge, '%s:%s=%s' % (column, key, value))) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s:%s' % (table, bridge, column, key)) + expected_value = '"0000000000000001"' + eq_(expected_value, result[0]) + + def test_08_05_add_01_value(self): + table = 'Port' + bridge = 's1' + column = 'tag' + value = '100' + + command = vsctl.VSCtlCommand( + 'add', (table, bridge, column, value)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s' % (table, bridge, column)) + eq_(value, result[0]) + + def test_08_05_add_02_set(self): + table = 'Port' + bridge = 's1' + column = 'trunks' + value = '100,200' + + command = vsctl.VSCtlCommand( + 'add', (table, bridge, column, value)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s' % (table, bridge, column)) + expected_value = '[100, 200]' + eq_(expected_value, result[0]) + + def test_08_05_add_03_map(self): + table = 'Bridge' + bridge = 's1' + column = 'other_config' + key = 'datapath-id' + value = '0000000000000011' + + command = vsctl.VSCtlCommand( + 'add', (table, bridge, column, '%s=%s' % (key, value))) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s:%s' % (table, bridge, column, key)) + expected_value = '"0000000000000011"' + eq_(expected_value, result[0]) + + def test_08_06_remove_01_value(self): + table = 'Port' + bridge = 's1' + column = 'tag' + value = '100' + self._docker_exec_mn( + 'ovs-vsctl set %s %s %s=%s' % (table, bridge, column, value)) + + command = vsctl.VSCtlCommand( + 'remove', (table, bridge, column, value)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s' % (table, bridge, column)) + expected_value = '[]' + eq_(expected_value, result[0]) + + def test_08_06_remove_02_set(self): + table = 'Port' + bridge = 's1' + column = 'trunks' + init_value = '100,200,300' + value = '100,200' + self._docker_exec_mn( + 'ovs-vsctl set %s %s %s=%s' % (table, bridge, column, init_value)) + + command = vsctl.VSCtlCommand( + 'remove', (table, bridge, column, value)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s' % (table, bridge, column)) + expected_value = '[300]' + eq_(expected_value, result[0]) + + def test_08_06_remove_03_map(self): + table = 'Port' + bridge = 's1' + column = 'other_config' + key = 'priority-tag' + value = 'true' + self._docker_exec_mn( + 'ovs-vsctl set %s %s %s:%s=%s' % + (table, bridge, column, key, value)) + + command = vsctl.VSCtlCommand( + 'remove', (table, bridge, column, '%s=%s' % (key, value))) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s' % (table, bridge, column)) + expected_value = '{}' + eq_(expected_value, result[0]) + + def test_08_07_clear_01_value(self): + table = 'Port' + bridge = 's1' + column = 'tag' + value = '100' + self._docker_exec_mn( + 'ovs-vsctl set %s %s %s=%s' % (table, bridge, column, value)) + + command = vsctl.VSCtlCommand( + 'clear', (table, bridge, column)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s' % (table, bridge, column)) + expected_value = '[]' + eq_(expected_value, result[0]) + + def test_08_07_clear_02_set(self): + table = 'Port' + bridge = 's1' + column = 'trunks' + value = '100,200' + self._docker_exec_mn( + 'ovs-vsctl set %s %s %s=%s' % (table, bridge, column, value)) + + command = vsctl.VSCtlCommand( + 'clear', (table, bridge, column)) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s' % (table, bridge, column)) + expected_value = '[]' + eq_(expected_value, result[0]) + + def test_08_07_clear_03_map(self): + table = 'Port' + bridge = 's1' + column = 'other_config' + key = 'priority-tag' + value = 'true' + self._docker_exec_mn( + 'ovs-vsctl set %s %s %s:%s=%s' % + (table, bridge, column, key, value)) + + command = vsctl.VSCtlCommand( + 'clear', (table, bridge, column, '%s=%s' % (key, value))) + self._run_commands([command]) + + result = self._docker_exec_mn( + 'ovs-vsctl get %s %s %s' % (table, bridge, column)) + expected_value = '{}' + eq_(expected_value, result[0]) + + # Clean up + self._docker_exec_mn('mn --clean') diff --git a/tests/unit/lib/test_addrconv.py b/tests/unit/lib/test_addrconv.py new file mode 100644 index 00000000..77877038 --- /dev/null +++ b/tests/unit/lib/test_addrconv.py @@ -0,0 +1,56 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +from nose.tools import eq_ + +from ryu.lib import addrconv + + +class Test_addrconv(unittest.TestCase): + """ Test case for ryu.lib.addrconv + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + @staticmethod + def _test_conv(conv, text_value, bin_value): + eq_(conv.text_to_bin(text_value), bin_value) + eq_(conv.bin_to_text(bin_value), text_value) + + def test_ipv4(self): + self._test_conv(addrconv.ipv4, '0.0.0.0', b'\x00\x00\x00\x00') + self._test_conv(addrconv.ipv4, '127.0.0.1', b'\x7f\x00\x00\x01') + self._test_conv(addrconv.ipv4, '255.255.0.0', b'\xff\xff\x00\x00') + + def test_ipv6(self): + self._test_conv(addrconv.ipv6, 'ff02::1', + (b'\xff\x02\x00\x00\x00\x00\x00\x00' + b'\x00\x00\x00\x00\x00\x00\x00\x01')) + self._test_conv(addrconv.ipv6, 'fe80::f00b:a4ff:fe7d:f8ea', + (b'\xfe\x80\x00\x00\x00\x00\x00\x00' + b'\xf0\x0b\xa4\xff\xfe\x7d\xf8\xea')) + self._test_conv(addrconv.ipv6, '::', + (b'\x00\x00\x00\x00\x00\x00\x00\x00' + b'\x00\x00\x00\x00\x00\x00\x00\x00')) + + def test_mac(self): + self._test_conv(addrconv.mac, 'f2:0b:a4:01:0a:23', + b'\xf2\x0b\xa4\x01\x0a\x23') diff --git a/tests/unit/lib/test_hub.py b/tests/unit/lib/test_hub.py new file mode 100644 index 00000000..d8b75996 --- /dev/null +++ b/tests/unit/lib/test_hub.py @@ -0,0 +1,239 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import time +import unittest +from nose.tools import raises + +from ryu.lib import hub +hub.patch() + + +class MyException(BaseException): + pass + + +class Test_hub(unittest.TestCase): + """ Test case for ryu.lib.hub + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + # we want to test timeout first because the rest of tests rely on it. + # thus test_0_ prefix. + + @raises(hub.Timeout) + def test_0_timeout1(self): + with hub.Timeout(0.1): + hub.sleep(1) + + @raises(MyException) + def test_0_timeout2(self): + with hub.Timeout(0.1, MyException): + hub.sleep(1) + + def test_0_timeout3(self): + with hub.Timeout(1): + hub.sleep(0.1) + # sleep some more to ensure timer cancelation + hub.sleep(2) + + def test_spawn_event1(self): + def _child(ev, result): + hub.sleep(1) + result.append(1) + ev.set() + + ev = hub.Event() + result = [] + with hub.Timeout(2): + hub.spawn(_child, ev, result) + ev.wait() + assert len(result) == 1 + + def test_spawn_event2(self): + def _child(ev, result): + hub.sleep(1) + result.append(1) + ev.set() + + ev = hub.Event() + result = [] + with hub.Timeout(2): + t = hub.spawn(_child, ev, result) + ev.wait(timeout=0.5) + assert len(result) == 0 + ev.wait() + assert len(result) == 1 + + def test_spawn_event3(self): + def _child(ev, ev2, result): + ev2.wait() + hub.sleep(0.5) + result.append(1) + ev.set() + + ev = hub.Event() + ev2 = hub.Event() + result = [] + with hub.Timeout(2): + hub.spawn(_child, ev, ev2, result) + hub.spawn(_child, ev, ev2, result) + hub.sleep(0.5) + ev2.set() # this should wake up the above created two threads + ev.wait(timeout=1) + assert len(result) == 2 + + def test_spawn_select1(self): + import select + import socket + + def _child(s1): + hub.sleep(0.5) + s1.send(b"hoge") + + s1, s2 = socket.socketpair() + with hub.Timeout(1): + hub.spawn(_child, s1) + select.select([s2.fileno()], [], []) + select.select([s2.fileno()], [], []) # return immediately + + @raises(MyException) + def test_select1(self): + import select + import socket + + s1, s2 = socket.socketpair() + with hub.Timeout(1, MyException): + select.select([s2.fileno()], [], []) + + def test_select2(self): + import select + + with hub.Timeout(1, MyException): + select.select([], [], [], 0) # timeout immediately + + def test_select3(self): + import select + import socket + + s1, s2 = socket.socketpair() + with hub.Timeout(1, MyException): + list = [s1.fileno(), s2.fileno()] + rlist, wlist, xlist = select.select(list, list, list) + assert not s1.fileno() in rlist + assert not s2.fileno() in rlist + # the following two assertions are commented out because one of + # them fails with eventlet-patched select. + # assert s1.fileno() in wlist + # assert s2.fileno() in wlist + # note: eventlet-patched select returns at most one file. + assert (s1.fileno() in wlist) or (s2.fileno() in wlist) + assert not s1.fileno() in xlist + assert not s2.fileno() in xlist + + def test_spawn_joinall(self): + def _child(ev2, result): + ev2.wait() + hub.sleep(0.5) + result.append(1) + raise BaseException("this exception should not be propagated") + + ev2 = hub.Event() + threads = [] + result = [] + with hub.Timeout(2): + threads.append(hub.spawn(_child, ev2, result)) + threads.append(hub.spawn(_child, ev2, result)) + hub.sleep(0.5) + ev2.set() # this should wake up the above created two threads + hub.joinall(threads) + assert len(result) == 2 + + def test_spawn_kill_joinall(self): + def _child(ev2, result): + ev2.wait() + result.append(1) + + ev2 = hub.Event() + threads = [] + result = [] + with hub.Timeout(2): + threads.append(hub.spawn(_child, ev2, result)) + threads.append(hub.spawn(_child, ev2, result)) + hub.sleep(0.5) + for t in threads: + hub.kill(t) + hub.joinall(threads) + assert len(result) == 0 + + def test_spawn_kill_nowait_joinall(self): + # XXX this test relies on the scheduling behaviour. + # the intention here is, killing threads before they get active. + + def _child(result): + result.append(1) + + threads = [] + result = [] + with hub.Timeout(2): + threads.append(hub.spawn(_child, result)) + for t in threads: + hub.kill(t) + hub.joinall(threads) + assert len(result) == 0 + + def test_spawn_kill_die_joinall(self): + def _child(result): + result.append(1) + + threads = [] + result = [] + with hub.Timeout(2): + threads.append(hub.spawn(_child, result)) + threads.append(hub.spawn(_child, result)) + hub.sleep(0.5) + for t in threads: + hub.kill(t) + hub.joinall(threads) + assert len(result) == 2 + + def test_spawn_exception_joinall(self): + def _child(): + raise Exception("hoge") + + threads = [] + with hub.Timeout(2): + threads.append(hub.spawn(_child)) + threads.append(hub.spawn(_child)) + hub.sleep(0.5) + hub.joinall(threads) + + def test_event1(self): + ev = hub.Event() + ev.set() + with hub.Timeout(1): + ev.wait() # should return immediately + + def test_event2(self): + ev = hub.Event() + # allow multiple sets unlike eventlet Event + ev.set() + ev.set() diff --git a/tests/unit/lib/test_import_module.py b/tests/unit/lib/test_import_module.py new file mode 100644 index 00000000..852ee21b --- /dev/null +++ b/tests/unit/lib/test_import_module.py @@ -0,0 +1,66 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +from nose.tools import eq_ + +from ryu.utils import import_module + + +class Test_import_module(unittest.TestCase): + """ + Test case for ryu.utils.import_module + """ + + @staticmethod + def _my_import(name): + mod = __import__(name) + components = name.split('.') + for c in components[1:]: + mod = getattr(mod, c) + return mod + + def test_import_module_with_same_basename(self): + aaa = import_module('tests.unit.lib.test_mod.aaa.mod') + eq_("this is aaa", aaa.name) + bbb = import_module('tests.unit.lib.test_mod.bbb.mod') + eq_("this is bbb", bbb.name) + + def test_import_module_by_filename(self): + ccc = import_module('./lib/test_mod/ccc/mod.py') + eq_("this is ccc", ccc.name) + ddd = import_module('./lib/test_mod/ddd/mod.py') + # Note: When importing a module by filename, if module file name + # is duplicated, import_module reload (override) a module instance. + eq_("this is ddd", ddd.name) + + def test_import_same_module1(self): + from tests.unit.lib.test_mod import eee as eee1 + eq_("this is eee", eee1.name) + eee2 = import_module('./lib/test_mod/eee.py') + eq_("this is eee", eee2.name) + + def test_import_same_module2(self): + fff1 = import_module('./lib/test_mod/fff.py') + eq_("this is fff", fff1.name) + fff2 = import_module('tests.unit.lib.test_mod.fff') + eq_("this is fff", fff2.name) + + def test_import_same_module3(self): + ggg1 = import_module('./lib/test_mod/ggg.py') + eq_("this is ggg", ggg1.name) + ggg2 = self._my_import('tests.unit.lib.test_mod.ggg') + eq_("this is ggg", ggg2.name) diff --git a/tests/unit/lib/test_ip.py b/tests/unit/lib/test_ip.py new file mode 100644 index 00000000..66d8f0c2 --- /dev/null +++ b/tests/unit/lib/test_ip.py @@ -0,0 +1,156 @@ +# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import logging +import struct +import unittest + +from nose.tools import eq_ +from nose.tools import raises + +from ryu.lib import ip + +LOG = logging.getLogger('test_ip') + + +class Test_ip(unittest.TestCase): + """ + test case for ip address module + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_ipv4_to_bin(self): + ipv4_str = '10.28.197.1' + val = 0x0a1cc501 + + (res,) = struct.unpack('!I', ip.ipv4_to_bin(ipv4_str)) + eq_(val, res) + + def test_ipv4_to_int(self): + ipv4_str = '10.28.197.1' + val = 169657601 + + res = ip.ipv4_to_int(ipv4_str) + eq_(val, res) + + def test_ipv4_to_str_from_bin(self): + ipv4_bin = struct.pack('!I', 0x0a1cc501) + val = '10.28.197.1' + + res = ip.ipv4_to_str(ipv4_bin) + eq_(val, res) + + def test_ipv4_to_str_from_int(self): + ipv4_int = 169657601 + val = '10.28.197.1' + + res = ip.ipv4_to_str(ipv4_int) + eq_(val, res) + + def test_ipv6_to_bin(self): + ipv6_str = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' + val = struct.pack('!8H', 0x2013, 0xda8, 0x215, 0x8f2, 0xaa20, 0x66ff, + 0xfe4c, 0x9c3c) + res = ip.ipv6_to_bin(ipv6_str) + eq_(val, res) + + def test_ipv6_to_bin_with_shortcut(self): + ipv6_str = '3f:10::1:2' + val = struct.pack('!8H', 0x3f, 0x10, 0, 0, 0, 0, 0x1, 0x2) + + res = ip.ipv6_to_bin(ipv6_str) + eq_(val, res) + + def test_ipv6_to_int(self): + ipv6_str = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' + val = 0x20130da8021508f2aa2066fffe4c9c3c + + res = ip.ipv6_to_int(ipv6_str) + eq_(val, res) + + def test_ipv6_to_int_with_shortcut(self): + ipv6_str = '3f:10::1:2' + val = 0x003f0010000000000000000000010002 + + res = ip.ipv6_to_int(ipv6_str) + eq_(val, res) + + def test_ipv6_to_str_from_bin(self): + ipv6_bin = struct.pack('!8H', 0x2013, 0xda8, 0x215, 0x8f2, 0xaa20, + 0x66ff, 0xfe4c, 0x9c3c) + val = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' + + res = ip.ipv6_to_str(ipv6_bin) + eq_(val, res) + + def test_ipv6_to_str_from_int(self): + ipv6_int = 0x20130da8021508f2aa2066fffe4c9c3c + val = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' + + res = ip.ipv6_to_str(ipv6_int) + eq_(val, res) + + def test_text_to_bin_from_ipv4_text(self): + ipv4_str = '10.28.197.1' + val = struct.pack('!4B', 10, 28, 197, 1) + res = ip.text_to_bin(ipv4_str) + eq_(val, res) + + def test_text_to_bin_from_ipv6_text(self): + ipv6_str = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' + val = struct.pack('!8H', 0x2013, 0xda8, 0x215, 0x8f2, 0xaa20, + 0x66ff, 0xfe4c, 0x9c3c) + res = ip.text_to_bin(ipv6_str) + eq_(val, res) + + def test_text_to_int_from_ipv4_text(self): + ipv4_str = '10.28.197.1' # 0a.1c.c5.01 + val = 0x0a1cc501 + + res = ip.text_to_int(ipv4_str) + eq_(val, res) + + def test_text_to_int_from_ipv6_text(self): + ipv6_str = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' + val = 0x20130da8021508f2aa2066fffe4c9c3c + + res = ip.text_to_int(ipv6_str) + eq_(val, res) + + def test_bin_to_text_from_ipv4_bin(self): + ipv4_bin = struct.pack('!4B', 10, 28, 197, 1) + val = '10.28.197.1' + res = ip.bin_to_text(ipv4_bin) + eq_(val, res) + + def test_bin_to_text_from_ipv6_bin(self): + ipv6_bin = struct.pack('!8H', 0x2013, 0xda8, 0x215, 0x8f2, 0xaa20, + 0x66ff, 0xfe4c, 0x9c3c) + val = '2013:da8:215:8f2:aa20:66ff:fe4c:9c3c' + res = ip.bin_to_text(ipv6_bin) + eq_(val, res) + + @raises(struct.error) + def test_bin_to_text_with_invalid_bin(self): + invalid_bin = b'invalid' + + ip.bin_to_text(invalid_bin) diff --git a/tests/unit/lib/test_mac.py b/tests/unit/lib/test_mac.py new file mode 100644 index 00000000..91839ead --- /dev/null +++ b/tests/unit/lib/test_mac.py @@ -0,0 +1,95 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import struct +import netaddr +from struct import * +from nose.tools import * + +from ryu.lib import mac + +LOG = logging.getLogger('test_mac') + + +class Test_mac(unittest.TestCase): + """ Test case for mac + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_mac_is_multicast(self): + addr = b'\x01\x23\x45\x67\x89\x0a' + val = True + + res = mac.is_multicast(addr) + + eq_(val, res) + + def test_mac_haddr_to_str(self): + addr = 'aa:aa:aa:aa:aa:aa' + val = b'\xaa\xaa\xaa\xaa\xaa\xaa' + + res = mac.haddr_to_str(val) + + eq_(addr, res) + + def test_mac_haddr_to_str_none(self): + """ addr is None + """ + addr = None + val = 'None' + res = mac.haddr_to_str(addr) + + eq_(val, res) + + @raises(AssertionError) + def test_mac_haddr_to_str_assert(self): + val = b'\xaa\xaa\xaa\xaa\xaa' + + res = mac.haddr_to_str(val) + + def test_mac_haddr_to_bin_false(self): + """ len(hexes) = 6 (False) + """ + addr = 'aa:aa:aa:aa:aa:aa' + val = b'\xaa\xaa\xaa\xaa\xaa\xaa' + + res = mac.haddr_to_bin(addr) + + eq_(val, res) + + @raises(ValueError) + def test_mac_haddr_to_bin_true(self): + """ len(hexes) != 6 (True) + """ + addr = 'aa:aa:aa:aa:aa' + res = mac.haddr_to_bin(addr) + + def test_mac_haddr_bitand(self): + addr = b'\xaa\xaa\xaa\xaa\xaa\xaa' + mask = b'\xff\xff\xff\x00\x00\x00' + val = b'\xaa\xaa\xaa\x00\x00\x00' + + res = mac.haddr_bitand(addr, mask) + + eq_(val, res) diff --git a/tests/unit/lib/test_mod/__init__.py b/tests/unit/lib/test_mod/__init__.py new file mode 100644 index 00000000..ca8ef539 --- /dev/null +++ b/tests/unit/lib/test_mod/__init__.py @@ -0,0 +1,15 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unit/lib/test_mod/aaa/__init__.py b/tests/unit/lib/test_mod/aaa/__init__.py new file mode 100644 index 00000000..ca8ef539 --- /dev/null +++ b/tests/unit/lib/test_mod/aaa/__init__.py @@ -0,0 +1,15 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unit/lib/test_mod/aaa/mod.py b/tests/unit/lib/test_mod/aaa/mod.py new file mode 100644 index 00000000..a5eff136 --- /dev/null +++ b/tests/unit/lib/test_mod/aaa/mod.py @@ -0,0 +1,17 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name = "this is aaa" diff --git a/tests/unit/lib/test_mod/bbb/__init__.py b/tests/unit/lib/test_mod/bbb/__init__.py new file mode 100644 index 00000000..ca8ef539 --- /dev/null +++ b/tests/unit/lib/test_mod/bbb/__init__.py @@ -0,0 +1,15 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unit/lib/test_mod/bbb/mod.py b/tests/unit/lib/test_mod/bbb/mod.py new file mode 100644 index 00000000..397c8554 --- /dev/null +++ b/tests/unit/lib/test_mod/bbb/mod.py @@ -0,0 +1,17 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name = "this is bbb" diff --git a/tests/unit/lib/test_mod/ccc/__init__.py b/tests/unit/lib/test_mod/ccc/__init__.py new file mode 100644 index 00000000..ce07156d --- /dev/null +++ b/tests/unit/lib/test_mod/ccc/__init__.py @@ -0,0 +1,14 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unit/lib/test_mod/ccc/mod.py b/tests/unit/lib/test_mod/ccc/mod.py new file mode 100644 index 00000000..5be826cf --- /dev/null +++ b/tests/unit/lib/test_mod/ccc/mod.py @@ -0,0 +1,16 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name = "this is ccc" diff --git a/tests/unit/lib/test_mod/ddd/__init__.py b/tests/unit/lib/test_mod/ddd/__init__.py new file mode 100644 index 00000000..ce07156d --- /dev/null +++ b/tests/unit/lib/test_mod/ddd/__init__.py @@ -0,0 +1,14 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/tests/unit/lib/test_mod/ddd/mod.py b/tests/unit/lib/test_mod/ddd/mod.py new file mode 100644 index 00000000..31d31d53 --- /dev/null +++ b/tests/unit/lib/test_mod/ddd/mod.py @@ -0,0 +1,16 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name = "this is ddd" diff --git a/tests/unit/lib/test_mod/eee.py b/tests/unit/lib/test_mod/eee.py new file mode 100644 index 00000000..ed21a8aa --- /dev/null +++ b/tests/unit/lib/test_mod/eee.py @@ -0,0 +1,16 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name = "this is eee" diff --git a/tests/unit/lib/test_mod/fff.py b/tests/unit/lib/test_mod/fff.py new file mode 100644 index 00000000..5a565e38 --- /dev/null +++ b/tests/unit/lib/test_mod/fff.py @@ -0,0 +1,16 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name = "this is fff" diff --git a/tests/unit/lib/test_mod/ggg.py b/tests/unit/lib/test_mod/ggg.py new file mode 100644 index 00000000..29555e56 --- /dev/null +++ b/tests/unit/lib/test_mod/ggg.py @@ -0,0 +1,16 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +name = "this is ggg" diff --git a/tests/unit/lib/test_mrtlib.py b/tests/unit/lib/test_mrtlib.py new file mode 100644 index 00000000..e870f401 --- /dev/null +++ b/tests/unit/lib/test_mrtlib.py @@ -0,0 +1,765 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import bz2 +import io +import logging +import os +import sys +import unittest + +try: + import mock # Python 2 +except ImportError: + from unittest import mock # Python 3 + +from nose.tools import eq_ +from nose.tools import ok_ + +from ryu.lib import addrconv +from ryu.lib import mrtlib +from ryu.lib.packet import bgp +from ryu.lib.packet import ospf +from ryu.utils import binary_str + + +LOG = logging.getLogger(__name__) + +MRT_DATA_DIR = os.path.join( + os.path.dirname(sys.modules[__name__].__file__), '../../packet_data/mrt/') + + +class TestMrtlib(unittest.TestCase): + """ + Test case for ryu.lib.mrtlib. + """ + + def test_reader(self): + files = [ + 'rib.20161101.0000_pick.bz2', + 'updates.20161101.0000.bz2', + ] + + for f in files: + # print('\n*** testing mrtlib.Reader with %s ...' % f) + counter = 0 + input_file = os.path.join(MRT_DATA_DIR, f) + for record in mrtlib.Reader(bz2.BZ2File(input_file, 'rb')): + # print('* No.%d\n%s' % (counter, record)) + ok_(not isinstance(record, mrtlib.UnknownMrtRecord)) + counter += 1 + + def test_writer(self): + files = [ + 'rib.20161101.0000_pick.bz2', + 'updates.20161101.0000.bz2', + ] + + for f in files: + # print('\n*** testing mrtlib.Writer with %s ...' % f) + input_file = os.path.join(MRT_DATA_DIR, f) + input_buf = bz2.BZ2File(input_file, 'rb').read() + input_records = list(mrtlib.Reader(bz2.BZ2File(input_file, 'rb'))) + + counter = 0 + f = io.BytesIO() + mrt_writer = mrtlib.Writer(f) + for record in input_records: + # print('* No.%d\n%s' % (counter, record)) + mrt_writer.write(record) + counter += 1 + + output_buf = f.getvalue() + + eq_(binary_str(input_buf), binary_str(output_buf)) + + mrt_writer.close() + + eq_(True, mrt_writer._f.closed) + + +class TestMrtlibMrtRecord(unittest.TestCase): + """ + Test case for ryu.lib.mrtlib.MrtRecord. + """ + + def test_init_without_type_subtype(self): + type_ = mrtlib.MrtRecord.TYPE_TABLE_DUMP + subtype = mrtlib.TableDumpMrtRecord.SUBTYPE_AFI_IPv4 + + message = mrtlib.TableDumpAfiIPv4MrtMessage( + view_num=1, + seq_num=2, + prefix='192.168.1.0', + prefix_len=24, + status=1, + originated_time=0, + peer_ip='10.0.0.1', + peer_as=65000, + bgp_attributes=[], + ) + record = mrtlib.TableDumpMrtRecord(message) + + eq_(type_, record.type) + eq_(subtype, record.subtype) + + def test_parse_pre_with_type_et(self): + buf = ( + b'\x00\x00\x00\x00' # timestamp + b'\x00\x11\x00\x00' # type=TYPE_BGP4MP_ET(17), subtype + b'\x00\x00\x00\xaa' # length + ) + + required_len = mrtlib.MrtRecord.parse_pre(buf) + + eq_(0xaa + mrtlib.ExtendedTimestampMrtRecord.HEADER_SIZE, + required_len) + + +# Note: MrtCommonRecord is tested in TestMrtlibMrtRecord. +# class TestMrtlibMrtCommonRecord(unittest.TestCase): + + +class TestMrtlibExtendedTimestampMrtRecord(unittest.TestCase): + """ + Test case for ryu.lib.mrtlib.ExtendedTimestampMrtRecord. + """ + + def test_parse_extended_header(self): + body = b'test' + buf = ( + b'\x11\x11\x11\x11' # ms_timestamp + + body + ) + + (headers, + rest) = mrtlib.ExtendedTimestampMrtRecord.parse_extended_header(buf) + + ok_(isinstance(headers, list)) + eq_(1, len(headers)) + eq_(0x11111111, headers[0]) + eq_(body, rest) + + def test_serialize(self): + body = b'test' # 4 bytes + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x22\x22\x33\x33' # type, subtype + b'\x00\x00\x00\x04' # length=len(body) + b'\x44\x44\x44\x44' # ms_timestamp + + body + ) + + message_mock = mock.MagicMock(spec=mrtlib.MrtMessage) + message_mock.serialize.return_value = body + + record = mrtlib.ExtendedTimestampMrtRecord( + message=message_mock, + timestamp=0x11111111, + type_=0x2222, subtype=0x3333, + ms_timestamp=0x44444444, + length=0x00000004, + ) + + output = record.serialize() + + eq_(buf, output) + + +class TestMrtlibUnknownMrtRecord(unittest.TestCase): + """ + Test case for ryu.lib.mrtlib.UnknownMrtRecord. + """ + + def test_parse(self): + body = b'test' # 4 bytes + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x22\x22\x33\x33' # type, subtype + b'\x00\x00\x00\x04' # length=len(body) + + body + ) + + (record, rest) = mrtlib.MrtRecord.parse(buf) + + eq_(0x11111111, record.timestamp) + eq_(0x2222, record.type) + eq_(0x3333, record.subtype) + eq_(0x00000004, record.length) + eq_(body, record.message.buf) + eq_(b'', rest) + + def test_serialize(self): + body = b'test' # 4 bytes + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x22\x22\x33\x33' # type, subtype + b'\x00\x00\x00\x04' # length=len(body) + + body + ) + + message = mrtlib.UnknownMrtMessage(buf=body) + record = mrtlib.UnknownMrtRecord( + message=message, + timestamp=0x11111111, + type_=0x2222, subtype=0x3333, + length=0x00000004, + ) + + output = record.serialize() + + eq_(buf, output) + + +class TestMrtlibOspf2MrtRecord(unittest.TestCase): + """ + Test case for ryu.lib.mrtlib.Ospf2MrtRecord. + """ + + @mock.patch('ryu.lib.packet.ospf.ospf.parser') + def test_parse(self, mock_ospf_parser): + remote_ip = '10.0.0.1' + local_ip = '10.0.0.2' + body = b'test' # 4 bytes + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x0b\x00\x00' # type=TYPE_OSPFv2(11), subtype + b'\x00\x00\x00\x0c' # length=len(remote_ip + local_ip + body) + + addrconv.ipv4.text_to_bin(remote_ip) # remote_ip + + addrconv.ipv4.text_to_bin(local_ip) # local_ip + + body # ospf_message + ) + + mock_ospf_message = mock.MagicMock(spec=ospf.OSPFMessage) + mock_ospf_parser.return_value = (mock_ospf_message, None, '') + + (record, rest) = mrtlib.MrtRecord.parse(buf) + + eq_(0x11111111, record.timestamp) + eq_(mrtlib.MrtRecord.TYPE_OSPFv2, record.type) + eq_(0x0000, record.subtype) + eq_(0x0000000c, record.length) + eq_(remote_ip, record.message.remote_ip) + eq_(local_ip, record.message.local_ip) + eq_(mock_ospf_message, record.message.ospf_message) + eq_(b'', rest) + + def test_serialize(self): + remote_ip = '10.0.0.1' + local_ip = '10.0.0.2' + body = b'test' # 4 bytes + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x0b\x00\x00' # type=TYPE_OSPFv2(11), subtype + b'\x00\x00\x00\x0c' # length=len(remote_ip + local_ip + body) + + addrconv.ipv4.text_to_bin(remote_ip) # remote_ip + + addrconv.ipv4.text_to_bin(local_ip) # local_ip + + body # ospf_message + ) + + mock_ospf_message = mock.MagicMock(spec=ospf.OSPFMessage) + mock_ospf_message.serialize.return_value = body + + message = mrtlib.Ospf2MrtMessage( + remote_ip=remote_ip, + local_ip=local_ip, + ospf_message=mock_ospf_message, + ) + record = mrtlib.Ospf2MrtRecord( + message=message, + timestamp=0x11111111, + # type_=None, + # subtype=None, + # length=None, + ) + + output = record.serialize() + + eq_(buf, output) + + +class TestMrtlibTableDumpMrtRecord(unittest.TestCase): + """ + Test case for ryu.lib.mrtlib.TableDumpMrtRecord. + """ + + @mock.patch('ryu.lib.packet.bgp._PathAttribute.parser') + def test_parse_afi_ipv4(self, mock_bgp_attr_parser): + prefix = '10.0.0.0' + peer_ip = '172.16.0.1' + body = b'test' # 4 bytes + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x0c\x00\x01' # type=TYPE_TABLE_DUMP(12), + # subtype=SUBTYPE_AFI_IPv4(1) + b'\x00\x00\x00\x1a' # length=26 + b'\x22\x22\x33\x33' # view_num, seq_num + + addrconv.ipv4.text_to_bin(prefix) + # prefix + b'\x18\x01' # prefix_len=24, status=1 + b'\x44\x44\x44\x44' # originated_time + + addrconv.ipv4.text_to_bin(peer_ip) + # peer_ip + b'\xfd\xe8\x00\x04' # peer_as=65000, attr_len=len(body) + + body # bgp_attributes + ) + + mock_bgp_attr = mock.MagicMock(spec=bgp._PathAttribute) + mock_bgp_attr_parser.return_value = (mock_bgp_attr, b'') + + (record, rest) = mrtlib.MrtRecord.parse(buf) + + eq_(0x11111111, record.timestamp) + eq_(mrtlib.MrtRecord.TYPE_TABLE_DUMP, record.type) + eq_(mrtlib.TableDumpMrtRecord.SUBTYPE_AFI_IPv4, record.subtype) + eq_(0x0000001a, record.length) + eq_(0x2222, record.message.view_num) + eq_(0x3333, record.message.seq_num) + eq_(prefix, record.message.prefix) + eq_(24, record.message.prefix_len) + eq_(1, record.message.status) + eq_(0x44444444, record.message.originated_time) + eq_(peer_ip, record.message.peer_ip) + eq_(65000, record.message.peer_as) + eq_(0x0004, record.message.attr_len) + eq_([mock_bgp_attr], record.message.bgp_attributes) + eq_(b'', rest) + + def test_serialize_afi_ipv4(self): + prefix = '10.0.0.0' + peer_ip = '172.16.0.1' + body = b'test' # 4 bytes + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x0c\x00\x01' # type=TYPE_TABLE_DUMP(12), + # subtype=SUBTYPE_AFI_IPv4(1) + b'\x00\x00\x00\x1a' # length=26 + b'\x22\x22\x33\x33' # view_num, seq_num + + addrconv.ipv4.text_to_bin(prefix) + # prefix + b'\x18\x01' # prefix_len=24, status=1 + b'\x44\x44\x44\x44' # originated_time + + addrconv.ipv4.text_to_bin(peer_ip) + # peer_ip + b'\xfd\xe8\x00\x04' # peer_as=65000, attr_len=len(body) + + body # bgp_attributes + ) + + mock_bgp_attr = mock.MagicMock(spec=bgp._PathAttribute) + mock_bgp_attr.serialize.return_value = body + + message = mrtlib.TableDumpAfiIPv4MrtMessage( + view_num=0x2222, + seq_num=0x3333, + prefix=prefix, + prefix_len=24, + status=1, + originated_time=0x44444444, + peer_ip=peer_ip, + peer_as=65000, + bgp_attributes=[mock_bgp_attr], + # attr_len=4 + ) + record = mrtlib.TableDumpMrtRecord( + message=message, + timestamp=0x11111111, + # type_=None, + # subtype=None, + # length=None, + ) + + output = record.serialize() + + eq_(buf, output) + + @mock.patch('ryu.lib.packet.bgp._PathAttribute.parser') + def test_parse_afi_ipv6(self, mock_bgp_attr_parser): + prefix = '2001:db8::1' + peer_ip = 'fe80::1' + body = b'test' # 4 bytes + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x0c\x00\x02' # type=TYPE_TABLE_DUMP(12), + # subtype=SUBTYPE_AFI_IPv6(2) + b'\x00\x00\x00\x32' # length=50 + b'\x22\x22\x33\x33' # view_num, seq_num + + addrconv.ipv6.text_to_bin(prefix) + # prefix + b'\x40\x01' # prefix_len=64, status=1 + b'\x44\x44\x44\x44' # originated_time + + addrconv.ipv6.text_to_bin(peer_ip) + # peer_ip + b'\xfd\xe8\x00\x04' # peer_as=65000, attr_len=len(body) + + body # bgp_attributes + ) + + mock_bgp_attr = mock.MagicMock(spec=bgp._PathAttribute) + mock_bgp_attr_parser.return_value = (mock_bgp_attr, b'') + + (record, rest) = mrtlib.MrtRecord.parse(buf) + + eq_(0x11111111, record.timestamp) + eq_(mrtlib.MrtRecord.TYPE_TABLE_DUMP, record.type) + eq_(mrtlib.TableDumpMrtRecord.SUBTYPE_AFI_IPv6, record.subtype) + eq_(0x00000032, record.length) + eq_(0x2222, record.message.view_num) + eq_(0x3333, record.message.seq_num) + eq_(prefix, record.message.prefix) + eq_(64, record.message.prefix_len) + eq_(1, record.message.status) + eq_(0x44444444, record.message.originated_time) + eq_(peer_ip, record.message.peer_ip) + eq_(65000, record.message.peer_as) + eq_(0x0004, record.message.attr_len) + eq_([mock_bgp_attr], record.message.bgp_attributes) + eq_(b'', rest) + + def test_serialize_afi_ipv6(self): + prefix = '2001:db8::1' + peer_ip = 'fe80::1' + body = b'test' # 4 bytes + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x0c\x00\x02' # type=TYPE_TABLE_DUMP(12), + # subtype=SUBTYPE_AFI_IPv6(2) + b'\x00\x00\x00\x32' # length=50 + b'\x22\x22\x33\x33' # view_num, seq_num + + addrconv.ipv6.text_to_bin(prefix) + # prefix + b'\x40\x01' # prefix_len=64, status=1 + b'\x44\x44\x44\x44' # originated_time + + addrconv.ipv6.text_to_bin(peer_ip) + # peer_ip + b'\xfd\xe8\x00\x04' # peer_as=65000, attr_len=len(body) + + body # bgp_attributes + ) + + mock_bgp_attr = mock.MagicMock(spec=bgp._PathAttribute) + mock_bgp_attr.serialize.return_value = body + + message = mrtlib.TableDumpAfiIPv6MrtMessage( + view_num=0x2222, + seq_num=0x3333, + prefix=prefix, + prefix_len=64, + status=1, + originated_time=0x44444444, + peer_ip=peer_ip, + peer_as=65000, + bgp_attributes=[mock_bgp_attr], + # attr_len=4 + ) + record = mrtlib.TableDumpMrtRecord( + message=message, + timestamp=0x11111111, + # type_=None, + # subtype=None, + # length=None, + ) + + output = record.serialize() + + eq_(buf, output) + + +class TestMrtlibTableDump2MrtRecord(unittest.TestCase): + """ + Test case for ryu.lib.mrtlib.TableDump2MrtRecord. + """ + + # Note: The classes corresponding to the following subtypes are + # tested in TestMrtlibMrtRecord. + # - SUBTYPE_PEER_INDEX_TABLE = 1 + # - SUBTYPE_RIB_IPV4_UNICAST = 2 + # - SUBTYPE_RIB_IPV4_MULTICAST = 3 + # - SUBTYPE_RIB_IPV6_UNICAST = 4 + # - SUBTYPE_RIB_IPV6_MULTICAST = 5 + + @mock.patch('ryu.lib.mrtlib.MrtRibEntry.parse') + @mock.patch('ryu.lib.packet.bgp.BGPNLRI.parser') + def test_parse_rib_generic(self, mock_nlri_parser, mock_rib_entry_parser): + nlri_bin = b'nlri' # 4 bytes + rib_entries_bin = b'ribs' # 4 bytes + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x0d\x00\x06' # type=TYPE_TABLE_DUMP_V2(13), + # subtype=SUBTYPE_RIB_GENERIC(6) + b'\x00\x00\x00\x11' # length=17 + b'\x22\x22\x22\x22' # seq_num + b'\x33\x33\x44' # afi, safi + + nlri_bin + # nlri + b'\x00\x01' # entry_count + + rib_entries_bin # rib_entries + ) + buf_entries = ( + b'\x00\x01' # entry_count + + rib_entries_bin # rib_entries + ) + + mock_bgp_nlri = mock.MagicMock(spec=bgp._AddrPrefix) + mock_nlri_parser.return_value = (mock_bgp_nlri, buf_entries) + + mock_rib_entry = mock.MagicMock(spec=mrtlib.MrtRibEntry) + mock_rib_entry_parser.return_value = (mock_rib_entry, b'') + + (record, rest) = mrtlib.MrtRecord.parse(buf) + + eq_(0x11111111, record.timestamp) + eq_(mrtlib.MrtRecord.TYPE_TABLE_DUMP_V2, record.type) + eq_(mrtlib.TableDump2MrtRecord.SUBTYPE_RIB_GENERIC, record.subtype) + eq_(0x00000011, record.length) + eq_(0x22222222, record.message.seq_num) + eq_(0x3333, record.message.afi) + eq_(0x44, record.message.safi) + eq_(mock_bgp_nlri, record.message.nlri) + eq_(0x0001, record.message.entry_count) + eq_([mock_rib_entry], record.message.rib_entries) + eq_(b'', rest) + + def test_serialize_rib_generic(self): + nlri_bin = b'nlri' # 4 bytes + rib_entries_bin = b'ribs' # 4 bytes + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x0d\x00\x06' # type=TYPE_TABLE_DUMP_V2(13), + # subtype=SUBTYPE_RIB_GENERIC(6) + b'\x00\x00\x00\x11' # length=17 + b'\x22\x22\x22\x22' # seq_num + b'\x33\x33\x44' # afi, safi + + nlri_bin + # nlri + b'\x00\x01' # entry_count + + rib_entries_bin # rib_entries + ) + + mock_bgp_nlri = mock.MagicMock(spec=bgp._AddrPrefix) + mock_bgp_nlri.serialize.return_value = nlri_bin + + mock_rib_entry = mock.MagicMock(spec=mrtlib.MrtRibEntry) + mock_rib_entry.serialize.return_value = rib_entries_bin + + message = mrtlib.TableDump2RibGenericMrtMessage( + seq_num=0x22222222, + afi=0x3333, + safi=0x44, + nlri=mock_bgp_nlri, + rib_entries=[mock_rib_entry], + # entry_count=1, + ) + record = mrtlib.TableDump2MrtRecord( + message=message, + timestamp=0x11111111, + # type_=None, + # subtype=None, + # length=None, + ) + + output = record.serialize() + + eq_(buf, output) + + +class TestMrtlibMrtPeer(unittest.TestCase): + """ + Test case for ryu.lib.mrtlib.MrtPeer. + """ + + def test_parse_two_octet_as(self): + bgp_id = '1.1.1.1' + ip_addr = '10.0.0.1' + buf = ( + b'\x00' # type + + addrconv.ipv4.text_to_bin(bgp_id) # bgp_id + + addrconv.ipv4.text_to_bin(ip_addr) + # ip_addr + b'\xfd\xe8' # as_num + ) + + peer, rest = mrtlib.MrtPeer.parse(buf) + + eq_(0, peer.type) + eq_(bgp_id, peer.bgp_id) + eq_(ip_addr, peer.ip_addr) + eq_(65000, peer.as_num) + eq_(b'', rest) + + def test_serialize_two_octet_as(self): + bgp_id = '1.1.1.1' + ip_addr = '10.0.0.1' + buf = ( + b'\x00' # type + + addrconv.ipv4.text_to_bin(bgp_id) # bgp_id + + addrconv.ipv4.text_to_bin(ip_addr) + # ip_addr + b'\xfd\xe8' # as_num + ) + + peer = mrtlib.MrtPeer( + bgp_id=bgp_id, + ip_addr=ip_addr, + as_num=65000, + # type_=0, + ) + + output = peer.serialize() + + eq_(buf, output) + + +class TestMrtlibBgp4MpMrtRecord(unittest.TestCase): + """ + Test case for ryu.lib.mrtlib.Bgp4MpMrtRecord. + """ + + # Note: The classes corresponding to the following subtypes are + # tested in TestMrtlibMrtRecord. + # - SUBTYPE_BGP4MP_MESSAGE = 1 + # - SUBTYPE_BGP4MP_MESSAGE_AS4 = 4 + # - SUBTYPE_BGP4MP_STATE_CHANGE_AS4 = 5 + # - SUBTYPE_BGP4MP_MESSAGE_LOCAL = 6 + # - SUBTYPE_BGP4MP_MESSAGE_AS4_LOCAL = 7 + + def test_parse_state_change_afi_ipv4(self): + peer_ip = '10.0.0.1' + local_ip = '10.0.0.2' + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x10\x00\x00' # type=TYPE_BGP4MP(16), + # subtype=SUBTYPE_BGP4MP_STATE_CHANGE(0) + b'\x00\x00\x00\x14' # length=20 + b'\xfd\xe9\xfd\xea' # peer_as=65001, local_as=65002 + b'\x22\x22\x00\x01' # if_index, addr_family=AFI_IPv4(1) + + addrconv.ipv4.text_to_bin(peer_ip) # peer_ip + + addrconv.ipv4.text_to_bin(local_ip) + # local_ip + b'\x00\x01\x00\x02' # old_state=STATE_IDLE(1), + # new_state=STATE_CONNECT(2) + ) + + (record, rest) = mrtlib.MrtRecord.parse(buf) + + eq_(0x11111111, record.timestamp) + eq_(mrtlib.MrtRecord.TYPE_BGP4MP, record.type) + eq_(mrtlib.Bgp4MpMrtRecord.SUBTYPE_BGP4MP_STATE_CHANGE, record.subtype) + eq_(0x00000014, record.length) + eq_(65001, record.message.peer_as) + eq_(65002, record.message.local_as) + eq_(0x2222, record.message.if_index) + eq_(mrtlib.Bgp4MpStateChangeMrtMessage.AFI_IPv4, + record.message.afi) + eq_(mrtlib.Bgp4MpStateChangeMrtMessage.STATE_IDLE, + record.message.old_state) + eq_(mrtlib.Bgp4MpStateChangeMrtMessage.STATE_CONNECT, + record.message.new_state) + eq_(b'', rest) + + def test_serialize_state_change_afi_ipv4(self): + peer_ip = '10.0.0.1' + local_ip = '10.0.0.2' + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x10\x00\x00' # type=TYPE_BGP4MP(16), + # subtype=SUBTYPE_BGP4MP_STATE_CHANGE(0) + b'\x00\x00\x00\x14' # length=20 + b'\xfd\xe9\xfd\xea' # peer_as=65001, local_as=65002 + b'\x22\x22\x00\x01' # if_index, addr_family=AFI_IPv4(1) + + addrconv.ipv4.text_to_bin(peer_ip) # peer_ip + + addrconv.ipv4.text_to_bin(local_ip) + # local_ip + b'\x00\x01\x00\x02' # old_state=STATE_IDLE(1), + # new_state=STATE_CONNECT(2) + ) + + message = mrtlib.Bgp4MpStateChangeMrtMessage( + peer_as=65001, + local_as=65002, + if_index=0x2222, + peer_ip=peer_ip, + local_ip=local_ip, + old_state=mrtlib.Bgp4MpStateChangeMrtMessage.STATE_IDLE, + new_state=mrtlib.Bgp4MpStateChangeMrtMessage.STATE_CONNECT, + # afi=mrtlib.Bgp4MpStateChangeMrtMessage.AFI_IPv4, + ) + record = mrtlib.Bgp4MpMrtRecord( + message=message, + timestamp=0x11111111, + # type_=None, + # subtype=None, + # length=None, + ) + + output = record.serialize() + + eq_(buf, output) + + def test_parse_state_change_afi_ipv6(self): + peer_ip = 'fe80::1' + local_ip = 'fe80::2' + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x10\x00\x00' # type=TYPE_BGP4MP(16), + # subtype=SUBTYPE_BGP4MP_STATE_CHANGE(0) + b'\x00\x00\x00\x2c' # length=44 + b'\xfd\xe9\xfd\xea' # peer_as=65001, local_as=65002 + b'\x22\x22\x00\x02' # if_index, addr_family=AFI_IPv6(2) + + addrconv.ipv6.text_to_bin(peer_ip) # peer_ip + + addrconv.ipv6.text_to_bin(local_ip) + # local_ip + b'\x00\x01\x00\x02' # old_state=STATE_IDLE(1), + # new_state=STATE_CONNECT(2) + ) + + (record, rest) = mrtlib.MrtRecord.parse(buf) + + eq_(0x11111111, record.timestamp) + eq_(mrtlib.MrtRecord.TYPE_BGP4MP, record.type) + eq_(mrtlib.Bgp4MpMrtRecord.SUBTYPE_BGP4MP_STATE_CHANGE, record.subtype) + eq_(0x0000002c, record.length) + eq_(65001, record.message.peer_as) + eq_(65002, record.message.local_as) + eq_(0x2222, record.message.if_index) + eq_(mrtlib.Bgp4MpStateChangeMrtMessage.AFI_IPv6, + record.message.afi) + eq_(mrtlib.Bgp4MpStateChangeMrtMessage.STATE_IDLE, + record.message.old_state) + eq_(mrtlib.Bgp4MpStateChangeMrtMessage.STATE_CONNECT, + record.message.new_state) + eq_(b'', rest) + + def test_serialize_state_change_afi_ipv6(self): + peer_ip = 'fe80::1' + local_ip = 'fe80::2' + buf = ( + b'\x11\x11\x11\x11' # timestamp + b'\x00\x10\x00\x00' # type=TYPE_BGP4MP(16), + # subtype=SUBTYPE_BGP4MP_STATE_CHANGE(0) + b'\x00\x00\x00\x2c' # length=44 + b'\xfd\xe9\xfd\xea' # peer_as=65001, local_as=65002 + b'\x22\x22\x00\x02' # if_index, addr_family=AFI_IPv6(2) + + addrconv.ipv6.text_to_bin(peer_ip) # peer_ip + + addrconv.ipv6.text_to_bin(local_ip) + # local_ip + b'\x00\x01\x00\x02' # old_state=STATE_IDLE(1), + # new_state=STATE_CONNECT(2) + ) + + message = mrtlib.Bgp4MpStateChangeMrtMessage( + peer_as=65001, + local_as=65002, + if_index=0x2222, + peer_ip=peer_ip, + local_ip=local_ip, + old_state=mrtlib.Bgp4MpStateChangeMrtMessage.STATE_IDLE, + new_state=mrtlib.Bgp4MpStateChangeMrtMessage.STATE_CONNECT, + # afi=mrtlib.Bgp4MpStateChangeMrtMessage.AFI_IPv4, + ) + record = mrtlib.Bgp4MpMrtRecord( + message=message, + timestamp=0x11111111, + # type_=None, + # subtype=None, + # length=None, + ) + + output = record.serialize() + + eq_(buf, output) diff --git a/tests/unit/lib/test_of_config_classes.py b/tests/unit/lib/test_of_config_classes.py new file mode 100644 index 00000000..5b0dd6d3 --- /dev/null +++ b/tests/unit/lib/test_of_config_classes.py @@ -0,0 +1,442 @@ +# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2014 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +from nose.tools import eq_ +from nose.tools import ok_ + +import sys +import lxml.etree as ET +from formencode.doctest_xml_compare import xml_compare + +from ryu.lib.of_config import classes as ofc + + +GET = """ + CapableSwitch0 + + + LogicalSwitch9-Port4 + 4 + Port4 + 5000 + 5000 + + up + false + false + false + + + up + false + true + + + + 100Mb-FD + true + copper + unsupported + + + other + true + copper + unsupported + + + 100Mb-FD + true + copper + unsupported + + + 100Mb-FD + true + copper + unsupported + + + + + LogicalSwitch9-Port3 + 3 + Port3 + 5000 + 5000 + + up + false + false + false + + + up + false + true + + + + 100Mb-FD + true + copper + unsupported + + + other + true + copper + unsupported + + + 100Mb-FD + true + copper + unsupported + + + 100Mb-FD + true + copper + unsupported + + + + + LogicalSwitch7-Port2 + 2 + Port2 + 5000 + 5000 + + up + false + false + false + + + up + false + true + + + + 100Mb-FD + true + copper + unsupported + + + other + true + copper + unsupported + + + 100Mb-FD + true + copper + unsupported + + + 100Mb-FD + true + copper + unsupported + + + + + LogicalSwitch7-Port1 + 1 + Port1 + 5000 + 5000 + + up + false + false + false + + + up + false + true + + + + 100Mb-FD + true + copper + unsupported + + + other + true + copper + unsupported + + + 100Mb-FD + true + copper + unsupported + + + 100Mb-FD + true + copper + unsupported + + + + + LogicalSwitch9-Port4-Queue992 + 992 + 4 + + 10 + 130 + + + + LogicalSwitch9-Port4-Queue991 + 991 + 4 + + 10 + 120 + + + + LogicalSwitch7-Port2-Queue994 + 994 + 2 + + 400 + 900 + + + + LogicalSwitch7-Port2-Queue993 + 993 + 2 + + 200 + 300 + + + + + + LogicalSwitch9 + + 0 + 255 + 16777216 + true + true + true + true + true + false + false + + all + controller + table + inport + any + + + all + select + indirect + fast-failover + + + select-weight + select-liveness + chaining + + + output + group + set-queue + set-mpls-ttl + dec-mpls-ttl + set-nw-ttl + dec-nw-ttl + copy-ttl-out + copy-ttl-in + push-vlan + pop-vlan + push-mpls + pop-mpls + push-pbb + pop-pbb + set-field + + + goto-table + write-metadata + write-actions + apply-actions + clear-actions + meter + + + 08:60:6E:7F:74:E7:00:09 + true + false + + failSecureMode + + + + Switch9-Controller + equal + 127.0.0.1 + 6633 + tcp + + down + 1.3 + + + + + LogicalSwitch9-Port4 + LogicalSwitch9-Port3 + LogicalSwitch9-Port4-Queue992 + LogicalSwitch9-Port4-Queue991 + + + + LogicalSwitch7 + + 0 + 255 + 16777216 + true + true + true + true + true + false + false + + all + controller + table + inport + any + + + all + select + indirect + fast-failover + + + select-weight + select-liveness + chaining + + + output + group + set-queue + set-mpls-ttl + dec-mpls-ttl + set-nw-ttl + dec-nw-ttl + copy-ttl-out + copy-ttl-in + push-vlan + pop-vlan + push-mpls + pop-mpls + set-field + + + goto-table + write-metadata + write-actions + apply-actions + clear-actions + + + 08:60:6E:7F:74:E7:00:07 + true + false + + failSecureMode + + + + Switch7-Controller + equal + 127.0.0.1 + 6633 + tcp + + down + 1.2 + + + + + LogicalSwitch7-Port2 + LogicalSwitch7-Port1 + LogicalSwitch7-Port2-Queue994 + LogicalSwitch7-Port2-Queue993 + + + + +""" + + +class Test_of_config_classes(unittest.TestCase): + """ Test case for ryu.lib.of_config.classes + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_parse(self): + for xml0 in [GET]: + o = ofc.OFCapableSwitchType.from_xml(xml0) + xml1 = o.to_xml('capable-switch') + ok_(xml_compare(ET.fromstring(xml0), ET.fromstring(xml1), + reporter=sys.stderr.write)) + + def test_alt_names(self): + xml0 = GET + o = ofc.OFCapableSwitchType.from_xml(xml0) + eq_(o.logical_switches, getattr(o, 'logical_switches')) + eq_(o.logical_switches, getattr(o, 'logical-switches')) + + def test_iterate(self): + xml0 = GET + o = ofc.OFCapableSwitchType.from_xml(xml0) + for lsw in o.logical_switches.switch: + ok_(str(lsw.id).startswith('LogicalSwitch')) diff --git a/tests/unit/lib/test_ofctl.py b/tests/unit/lib/test_ofctl.py new file mode 100644 index 00000000..57fa8355 --- /dev/null +++ b/tests/unit/lib/test_ofctl.py @@ -0,0 +1,643 @@ +# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import functools +import json +import logging +from nose.tools import eq_ +import os +import sys +import unittest + +from ryu.lib import ofctl_v1_0 +from ryu.lib import ofctl_v1_2 +from ryu.lib import ofctl_v1_3 +from ryu.lib import ofctl_v1_4 +from ryu.lib import ofctl_v1_5 +from ryu.ofproto import ofproto_parser +from ryu.ofproto.ofproto_protocol import ProtocolDesc + +from tests import test_lib + +LOG = logging.getLogger(__name__) + + +class DummyDatapath(ProtocolDesc): + + def __init__(self, version): + super(DummyDatapath, self).__init__(version) + self.id = 1 # XXX + self.request_msg = None + self.reply_msg = None + self.waiters = None + + @staticmethod + def set_xid(msg): + msg.set_xid(0) + return 0 + + def send_msg(self, msg): + msg.serialize() + self.request_msg = msg + + if self.reply_msg: + lock, msgs = self.waiters[self.id][msg.xid] + msgs.append(self.reply_msg) + del self.waiters[self.id][msg.xid] + lock.set() + + def set_reply(self, msg, waiters): + self.reply_msg = msg + self.waiters = waiters + + +class Test_ofctl(unittest.TestCase): + + def _test(self, name, dp, method, args, request, reply, expected): + print('processing %s ...' % name) + waiters = {} + dp.set_reply(reply, waiters) + if reply: + output = method(dp=dp, waiters=waiters, **args) + else: + output = method(dp=dp, **args) + + # expected message <--> sent message + request.serialize() + try: + eq_(json.dumps(request.to_jsondict(), sort_keys=True), + json.dumps(dp.request_msg.to_jsondict(), sort_keys=True)) + except AssertionError as e: + # For debugging + json.dump(dp.request_msg.to_jsondict(), + open('/tmp/' + name + '_request.json', 'w'), + indent=3, sort_keys=True) + raise e + + # expected output <--> return of ofctl + def _remove(d, names): + def f(x): + return _remove(x, names) + + if isinstance(d, list): + return list(map(f, d)) + if isinstance(d, dict): + d2 = {} + for k, v in d.items(): + if k in names: + continue + d2[k] = f(v) + return d2 + return d + + expected = _remove(expected, ['len', 'length']) + output = _remove(output, ['len', 'length']) + try: + eq_(json.dumps(expected, sort_keys=True), + json.dumps(output, sort_keys=True)) + except AssertionError as e: + # For debugging + json.dump(output, open('/tmp/' + name + '_reply.json', 'w'), + indent=4) + raise e + + +def _add_tests(): + _ofp_vers = { + 'of10': 0x01, + 'of12': 0x03, + 'of13': 0x04, + 'of14': 0x05, + 'of15': 0x06, + } + + _test_cases = { + 'of10': [ + { + 'method': ofctl_v1_0.mod_flow_entry, + 'request': '1-2-ofp_flow_mod.packet.json', + 'reply': None + }, + ], + 'of12': [ + { + 'method': ofctl_v1_2.get_desc_stats, + 'request': '3-24-ofp_desc_stats_request.packet.json', + 'reply': '3-0-ofp_desc_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_queue_stats, + 'request': '3-37-ofp_queue_stats_request.packet.json', + 'reply': '3-38-ofp_queue_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_queue_stats, + 'request': 'lib-ofctl-ofp_queue_stats_request.packet1.json', + 'reply': '3-38-ofp_queue_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_queue_stats, + 'request': 'lib-ofctl-ofp_queue_stats_request.packet2.json', + 'reply': '3-38-ofp_queue_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_queue_stats, + 'request': 'lib-ofctl-ofp_queue_stats_request.packet3.json', + 'reply': '3-38-ofp_queue_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_queue_config, + 'request': '3-35-ofp_queue_get_config_request.packet.json', + 'reply': '3-36-ofp_queue_get_config_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_queue_config, + 'request': 'lib-ofctl-ofp_queue_get_config_request.packet.json', + 'reply': '3-36-ofp_queue_get_config_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_flow_stats, + 'request': '3-11-ofp_flow_stats_request.packet.json', + 'reply': '3-12-ofp_flow_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_aggregate_flow_stats, + 'request': '3-25-ofp_aggregate_stats_request.packet.json', + 'reply': '3-26-ofp_aggregate_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_table_stats, + 'request': '3-27-ofp_table_stats_request.packet.json', + 'reply': '3-28-ofp_table_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_port_stats, + 'request': '3-29-ofp_port_stats_request.packet.json', + 'reply': '3-30-ofp_port_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_port_stats, + 'request': 'lib-ofctl-ofp_port_stats_request.packet.json', + 'reply': '3-30-ofp_port_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_group_stats, + 'request': '3-61-ofp_group_stats_request.packet.json', + 'reply': '3-62-ofp_group_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_group_stats, + 'request': 'lib-ofctl-ofp_group_stats_request.packet.json', + 'reply': '3-62-ofp_group_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_group_features, + 'request': '3-31-ofp_group_features_stats_request.packet.json', + 'reply': '3-32-ofp_group_features_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_2.get_group_desc, + 'request': '3-33-ofp_group_desc_stats_request.packet.json', + 'reply': '3-34-ofp_group_desc_stats_reply.packet.json' + }, + # In OpenFlow 1.2, ofp_port_desc is not defined. + # We use ofp_features_request to get ports description instead. + { + 'method': ofctl_v1_2.get_port_desc, + 'request': '3-5-ofp_features_request.packet.json', + 'reply': '3-6-ofp_features_reply.packet.json' + }, + { + 'method': ofctl_v1_2.mod_flow_entry, + 'request': '3-2-ofp_flow_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_2.mod_group_entry, + 'request': '3-21-ofp_group_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_2.mod_port_behavior, + 'request': '3-22-ofp_port_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_2.send_experimenter, + 'request': '3-16-ofp_experimenter.packet.json', + 'reply': None + }, + ], + 'of13': [ + { + 'method': ofctl_v1_3.get_desc_stats, + 'request': '4-24-ofp_desc_request.packet.json', + 'reply': '4-0-ofp_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_queue_stats, + 'request': '4-37-ofp_queue_stats_request.packet.json', + 'reply': '4-38-ofp_queue_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_queue_stats, + 'request': 'lib-ofctl-ofp_queue_stats_request.packet1.json', + 'reply': '4-38-ofp_queue_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_queue_stats, + 'request': 'lib-ofctl-ofp_queue_stats_request.packet2.json', + 'reply': '4-38-ofp_queue_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_queue_stats, + 'request': 'lib-ofctl-ofp_queue_stats_request.packet3.json', + 'reply': '4-38-ofp_queue_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_queue_config, + 'request': '4-35-ofp_queue_get_config_request.packet.json', + 'reply': '4-36-ofp_queue_get_config_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_queue_config, + 'request': 'lib-ofctl-ofp_queue_get_config_request.packet.json', + 'reply': '4-36-ofp_queue_get_config_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_flow_stats, + 'request': '4-11-ofp_flow_stats_request.packet.json', + 'reply': '4-12-ofp_flow_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_aggregate_flow_stats, + 'request': '4-25-ofp_aggregate_stats_request.packet.json', + 'reply': '4-26-ofp_aggregate_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_table_stats, + 'request': '4-27-ofp_table_stats_request.packet.json', + 'reply': '4-28-ofp_table_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_table_features, + 'request': 'lib-ofctl-ofp_table_features_request.packet.json', + 'reply': '4-56-ofp_table_features_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_port_stats, + 'request': '4-29-ofp_port_stats_request.packet.json', + 'reply': '4-30-ofp_port_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_port_stats, + 'request': 'lib-ofctl-ofp_port_stats_request.packet.json', + 'reply': '4-30-ofp_port_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_meter_stats, + 'request': '4-49-ofp_meter_stats_request.packet.json', + 'reply': '4-50-ofp_meter_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_meter_stats, + 'request': 'lib-ofctl-ofp_meter_stats_request.packet.json', + 'reply': '4-50-ofp_meter_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_meter_features, + 'request': '4-51-ofp_meter_features_request.packet.json', + 'reply': '4-52-ofp_meter_features_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_meter_config, + 'request': '4-47-ofp_meter_config_request.packet.json', + 'reply': '4-48-ofp_meter_config_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_meter_config, + 'request': 'lib-ofctl-ofp_meter_config_request.packet.json', + 'reply': '4-48-ofp_meter_config_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_group_stats, + 'request': '4-57-ofp_group_stats_request.packet.json', + 'reply': '4-58-ofp_group_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_group_stats, + 'request': 'lib-ofctl-ofp_group_stats_request.packet.json', + 'reply': '4-58-ofp_group_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_group_features, + 'request': '4-31-ofp_group_features_request.packet.json', + 'reply': '4-32-ofp_group_features_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_group_desc, + 'request': '4-33-ofp_group_desc_request.packet.json', + 'reply': '4-34-ofp_group_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_3.get_port_desc, + 'request': '4-53-ofp_port_desc_request.packet.json', + 'reply': '4-54-ofp_port_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_3.mod_flow_entry, + 'request': '4-2-ofp_flow_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_3.mod_meter_entry, + 'request': '4-45-ofp_meter_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_3.mod_group_entry, + 'request': '4-21-ofp_group_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_3.mod_port_behavior, + 'request': '4-22-ofp_port_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_3.send_experimenter, + 'request': '4-16-ofp_experimenter.packet.json', + 'reply': None + }, + ], + 'of14': [ + { + 'method': ofctl_v1_4.get_desc_stats, + 'request': '5-24-ofp_desc_request.packet.json', + 'reply': '5-0-ofp_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_queue_stats, + 'request': '5-35-ofp_queue_stats_request.packet.json', + 'reply': '5-36-ofp_queue_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_queue_desc, + 'request': '5-63-ofp_queue_desc_request.packet.json', + 'reply': '5-64-ofp_queue_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_flow_stats, + 'request': '5-11-ofp_flow_stats_request.packet.json', + 'reply': '5-12-ofp_flow_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_aggregate_flow_stats, + 'request': '5-25-ofp_aggregate_stats_request.packet.json', + 'reply': '5-26-ofp_aggregate_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_table_stats, + 'request': '5-27-ofp_table_stats_request.packet.json', + 'reply': '5-28-ofp_table_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_table_features, + 'request': 'lib-ofctl-ofp_table_features_request.packet.json', + 'reply': '5-54-ofp_table_features_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_port_stats, + 'request': '5-29-ofp_port_stats_request.packet.json', + 'reply': '5-30-ofp_port_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_meter_stats, + 'request': '5-47-ofp_meter_stats_request.packet.json', + 'reply': '5-48-ofp_meter_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_meter_features, + 'request': '5-49-ofp_meter_features_request.packet.json', + 'reply': '5-50-ofp_meter_features_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_meter_config, + 'request': '5-45-ofp_meter_config_request.packet.json', + 'reply': '5-46-ofp_meter_config_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_group_stats, + 'request': '5-55-ofp_group_stats_request.packet.json', + 'reply': '5-56-ofp_group_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_group_features, + 'request': '5-31-ofp_group_features_request.packet.json', + 'reply': '5-32-ofp_group_features_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_group_desc, + 'request': '5-33-ofp_group_desc_request.packet.json', + 'reply': '5-34-ofp_group_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_4.get_port_desc, + 'request': '5-51-ofp_port_desc_request.packet.json', + 'reply': '5-52-ofp_port_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_4.mod_flow_entry, + 'request': '5-2-ofp_flow_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_4.mod_meter_entry, + 'request': '5-43-ofp_meter_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_4.mod_group_entry, + 'request': '5-21-ofp_group_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_4.mod_port_behavior, + 'request': '5-22-ofp_port_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_4.send_experimenter, + 'request': '5-16-ofp_experimenter.packet.json', + 'reply': None + }, + ], + 'of15': [ + { + 'method': ofctl_v1_5.get_desc_stats, + 'request': 'libofproto-OFP15-desc_request.packet.json', + 'reply': 'libofproto-OFP15-desc_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_queue_stats, + 'request': 'lib-ofctl-ofp_queue_stats_request.packet.json', + 'reply': 'libofproto-OFP15-queue_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_queue_desc, + 'request': 'libofproto-OFP15-queue_desc_request.packet.json', + 'reply': 'libofproto-OFP15-queue_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_flow_stats, + 'request': 'libofproto-OFP15-flow_stats_request.packet.json', + 'reply': 'libofproto-OFP15-flow_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_flow_desc_stats, + 'request': 'libofproto-OFP15-flow_desc_request.packet.json', + 'reply': 'libofproto-OFP15-flow_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_flow_desc_stats, + 'request': 'lib-ofctl-OFP15-flow_desc_request.packet.json', + 'reply': 'lib-ofctl-OFP15-flow_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_aggregate_flow_stats, + 'request': 'libofproto-OFP15-aggregate_stats_request.packet.json', + 'reply': 'libofproto-OFP15-aggregate_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_table_stats, + 'request': 'libofproto-OFP15-table_stats_request.packet.json', + 'reply': 'libofproto-OFP15-table_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_table_features, + 'request': 'lib-ofctl-ofp_table_features_request.packet.json', + 'reply': 'libofproto-OFP15-table_features_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_port_stats, + 'request': 'libofproto-OFP15-port_stats_request.packet.json', + 'reply': 'libofproto-OFP15-port_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_meter_stats, + 'request': 'libofproto-OFP15-meter_stats_request.packet.json', + 'reply': 'libofproto-OFP15-meter_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_meter_features, + 'request': 'libofproto-OFP15-meter_features_request.packet.json', + 'reply': 'libofproto-OFP15-meter_features_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_meter_desc, + 'request': 'libofproto-OFP15-meter_desc_request.packet.json', + 'reply': 'libofproto-OFP15-meter_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_group_stats, + 'request': 'libofproto-OFP15-group_stats_request.packet.json', + 'reply': 'libofproto-OFP15-group_stats_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_group_features, + 'request': 'libofproto-OFP15-group_features_request.packet.json', + 'reply': 'libofproto-OFP15-group_features_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_group_desc, + 'request': 'libofproto-OFP15-group_desc_request.packet.json', + 'reply': 'libofproto-OFP15-group_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_5.get_port_desc, + 'request': 'libofproto-OFP15-port_desc_request.packet.json', + 'reply': 'libofproto-OFP15-port_desc_reply.packet.json' + }, + { + 'method': ofctl_v1_5.mod_flow_entry, + 'request': 'libofproto-OFP15-flow_mod_no_nx.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_5.mod_flow_entry, + 'request': 'lib-ofctl-OFP15-flow_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_5.mod_meter_entry, + 'request': 'libofproto-OFP15-meter_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_5.mod_group_entry, + 'request': 'libofproto-OFP15-group_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_5.mod_port_behavior, + 'request': 'libofproto-OFP15-port_mod.packet.json', + 'reply': None + }, + { + 'method': ofctl_v1_5.send_experimenter, + 'request': 'libofproto-OFP15-experimenter.packet.json', + 'reply': None + } + ], + } + + def _jsonfile_to_msg(datapath, jsonfile): + return ofproto_parser.ofp_msg_from_jsondict( + datapath, json.load(open(jsonfile))) + + this_dir = os.path.dirname(sys.modules[__name__].__file__) + parser_json_root = os.path.join(this_dir, '../ofproto/json/') + ofctl_json_root = os.path.join(this_dir, 'ofctl_json/') + + for ofp_ver, tests in _test_cases.items(): + dp = DummyDatapath(_ofp_vers[ofp_ver]) + parser_json_dir = os.path.join(parser_json_root, ofp_ver) + ofctl_json_dir = os.path.join(ofctl_json_root, ofp_ver) + for test in tests: + name = 'test_ofctl_' + ofp_ver + '_' + test['request'] + print('adding %s ...' % name) + args = {} + args_json_path = os.path.join(ofctl_json_dir, test['request']) + if os.path.exists(args_json_path): + args = json.load(open(args_json_path)) + request = _jsonfile_to_msg( + dp, os.path.join(parser_json_dir, test['request'])) + reply = None + expected = None + if test['reply']: + reply = _jsonfile_to_msg( + dp, os.path.join(parser_json_dir, test['reply'])) + expected = json.load( + open(os.path.join(ofctl_json_dir, test['reply']))) + f = functools.partial( + Test_ofctl._test, name=name, dp=dp, method=test['method'], + args=args, request=request, reply=reply, expected=expected) + test_lib.add_method(Test_ofctl, name, f) + + +_add_tests() + +if __name__ == "__main__": + unittest.main() diff --git a/tests/unit/lib/test_ofctl_action_match.py b/tests/unit/lib/test_ofctl_action_match.py new file mode 100644 index 00000000..2b8707cf --- /dev/null +++ b/tests/unit/lib/test_ofctl_action_match.py @@ -0,0 +1,869 @@ +# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import unittest +import logging +import netaddr +import functools +import inspect + +from nose.tools import * + +from ryu.lib import addrconv +from ryu.lib import ofctl_v1_0 +from ryu.ofproto import ofproto_v1_0, ofproto_v1_0_parser +from ryu.lib import ofctl_v1_2 +from ryu.ofproto import ofproto_v1_2, ofproto_v1_2_parser +from ryu.lib import ofctl_v1_3 +from ryu.ofproto import ofproto_v1_3, ofproto_v1_3_parser +from ryu.ofproto import ofproto_protocol +from ryu.ofproto import inet + +from tests import test_lib + +LOG = logging.getLogger('test_ofctl_v1_2, v1_3') + +""" Common Functions """ + + +def _str_to_int(v): + try: + return int(v, 0) + except (ValueError, TypeError): + return v + + +def _to_match_eth(value): + if '/' in value: + value = value.split('/') + return value[0], value[1] + else: + return value, None + + +def _to_match_ip(value): + if '/' in value: + ip = netaddr.ip.IPNetwork(value) + ip_addr = str(ip.network) + ip_mask = str(ip.netmask) + return ip_addr, ip_mask + else: + return value, None + + +def _to_match_masked_int(value): + if isinstance(value, str) and '/' in value: + value = value.split('/') + return _str_to_int(value[0]), _str_to_int(value[1]) + else: + return _str_to_int(value), None + + +def _to_masked_int_str(value): + v, m = _to_match_masked_int(value) + v &= m + return '%d/%d' % (v, m) + + +conv_of10_to_of12_dict = { + 'dl_dst': 'eth_dst', + 'dl_src': 'eth_src', + 'dl_type': 'eth_type', + 'dl_vlan': 'vlan_vid', + 'nw_src': 'ipv4_src', + 'nw_dst': 'ipv4_dst', + 'nw_proto': 'ip_proto' +} + + +conv_of12_to_of10_dict = { + 'eth_src': 'dl_src', + 'eth_dst': 'dl_dst', + 'eth_type': 'dl_type', + 'ipv4_dst': 'nw_dst', + 'ipv4_src': 'nw_src', + 'ip_proto': 'nw_proto', + 'vlan_vid': 'dl_vlan', + 'tcp_src': 'tp_src', + 'tcp_dst': 'tp_dst', + 'udp_src': 'tp_src', + 'udp_dst': 'tp_dst' +} + +""" Test_ofctl """ + + +class Test_ofctl(unittest.TestCase): + + def __init__(self, methodName): + super(Test_ofctl, self).__init__(methodName) + + def setUp(self): + pass + + def tearDown(self): + pass + + def _test_actions(self, act, test): + dp = ofproto_protocol.ProtocolDesc(version=test.ver) + act_type = act["type"] + + # str -> action + insts = test.to_actions(dp, [act]) + + if test.ver == ofproto_v1_0.OFP_VERSION: + action = insts[0] + self._equal_str_to_act(action, act, act_type, test) + else: + inst = insts[0] + self._equal_str_to_inst(inst, act, act_type, test) + + # action -> str + inst_str = test.actions_to_str(insts) + if test.ver == ofproto_v1_0.OFP_VERSION: + act_str = inst_str + self._equal_act_to_str(act_str, act, act_type, test) + else: + self._equal_inst_to_str(inst_str, act, act_type, test) + + def _test_match(self, attrs, test): + dp = ofproto_protocol.ProtocolDesc(version=test.ver) + + # str -> match + match = test.to_match(dp, attrs) + + for key, value in attrs.items(): + key = self._conv_key(test, key, attrs) + self._equal_str_to_match(key, value, match, test) + + # match -> str + match_str = test.match_to_str(match) + + for key, value in attrs.items(): + if key in conv_of12_to_of10_dict: + key_old = conv_of12_to_of10_dict[key] + else: + key_old = key + self._equal_match_to_str(key_old, value, match_str, test) + + def _equal_str_to_inst(self, inst, act, act_type, test): + if act_type in test.supported_action: + cls = test.supported_action[act_type] + else: + cls = None + if act_type == 'GOTO_TABLE': + ok_(isinstance(inst, cls)) + eq_(inst.table_id, act["table_id"]) + elif act_type == 'WRITE_METADATA': + ok_(isinstance(inst, cls)) + eq_(inst.metadata, act["metadata"]) + eq_(inst.metadata_mask, act["metadata_mask"]) + elif act_type == 'METER': + ok_(isinstance(inst, cls)) + eq_(inst.meter_id, act["meter_id"]) + elif act_type == 'WRITE_ACTIONS': + ok_(isinstance(inst, cls)) + eq_(inst.type, test._ofproto.OFPIT_WRITE_ACTIONS) + self._equal_str_to_act(inst.actions[0], + act["actions"][0], + act["actions"][0]["type"], + test) + elif act_type == 'CLEAR_ACTIONS': + ok_(isinstance(inst, cls)) + eq_(inst.type, test._ofproto.OFPIT_CLEAR_ACTIONS) + else: + # APPLY_ACTIONS or Uknown Action Type + ok_(isinstance(inst, test._parser.OFPInstructionActions)) + eq_(inst.type, test._ofproto.OFPIT_APPLY_ACTIONS) + self._equal_str_to_act(inst.actions[0], act, + act_type, test) + + def _equal_str_to_act(self, action, act, act_type, test): + if act_type in test.supported_action: + cls = test.supported_action[act_type] + else: + cls = None + ok_(isinstance(action, cls)) + if act_type == 'OUTPUT': + eq_(action.port, act["port"]) + elif act_type == 'SET_VLAN_VID': + eq_(action.vlan_vid, act["vlan_vid"]) + elif act_type == 'SET_VLAN_PCP': + eq_(action.vlan_pcp, act["vlan_pcp"]) + elif act_type == 'SET_DL_SRC': + eq_(addrconv.mac.bin_to_text(action.dl_addr), + act["dl_src"]) + elif act_type == 'SET_DL_DST': + eq_(addrconv.mac.bin_to_text(action.dl_addr), + act["dl_dst"]) + elif act_type == 'SET_NW_SRC': + ip = netaddr.ip.IPAddress(action.nw_addr) + eq_(str(ip), act["nw_src"]) + elif act_type == 'SET_NW_DST': + ip = netaddr.ip.IPAddress(action.nw_addr) + eq_(str(ip), act["nw_dst"]) + elif act_type == 'SET_NW_TOS': + eq_(action.tos, act["nw_tos"]) + elif act_type == 'SET_TP_SRC': + eq_(action.tp, act["tp_src"]) + elif act_type == 'SET_TP_DST': + eq_(action.tp, act["tp_dst"]) + elif act_type == 'ENQUEUE': + eq_(action.queue_id, act["queue_id"]) + eq_(action.port, act["port"]) + elif act_type == 'SET_MPLS_TTL': + eq_(action.mpls_ttl, act["mpls_ttl"]) + elif act_type in ['PUSH_VLAN', 'PUSH_MPLS', + 'POP_MPLS', 'PUSH_PBB']: + eq_(action.ethertype, act["ethertype"]) + elif act_type == 'SET_QUEUE': + eq_(action.queue_id, act["queue_id"]) + elif act_type == 'GROUP': + eq_(action.group_id, act["group_id"]) + elif act_type == 'SET_NW_TTL': + eq_(action.nw_ttl, act["nw_ttl"]) + elif act_type == 'SET_FIELD': + eq_(action.key, act['field']) + eq_(action.value, act['value']) + elif act_type in ['STRIP_VLAN', 'COPY_TTL_OUT', + 'COPY_TTL_IN', 'DEC_MPLS_TTL', + 'POP_VLAN', 'DEC_NW_TTL', 'POP_PBB']: + pass + else: # Uknown Action Type + assert False + + def _equal_inst_to_str(self, inst_str, act, act_type, test): + if act_type == 'WRITE_ACTIONS': + act_str = inst_str[0]["WRITE_ACTIONS"] + act = act["actions"][0] + act_type = act["type"] + self._equal_act_to_str(act_str, act, act_type, test) + else: + inst_str_list = inst_str[0].split(':', 1) + eq_(inst_str_list[0], act_type) + if act_type == 'GOTO_TABLE': + eq_(int(inst_str_list[1]), act["table_id"]) + elif act_type == 'WRITE_METADATA': + met = inst_str_list[1].split('/') + eq_(int(met[0], 16), act["metadata"]) + eq_(int(met[1], 16), act["metadata_mask"]) + elif act_type == 'METER': + eq_(int(inst_str_list[1]), act["meter_id"]) + elif act_type == 'CLEAR_ACTIONS': + pass + else: + # APPLY_ACTIONS + act_str = inst_str + self._equal_act_to_str(act_str, act, act_type, test) + + def _equal_act_to_str(self, act_str, act, act_type, test): + act_str_list = act_str[0].split(':', 1) + eq_(act_str_list[0], act_type) + if act_type == 'OUTPUT': + eq_(int(act_str_list[1]), act["port"]) + elif act_type == 'SET_VLAN_VID': + eq_(int(act_str_list[1]), act["vlan_vid"]) + elif act_type == 'SET_VLAN_PCP': + eq_(int(act_str_list[1]), act["vlan_pcp"]) + elif act_type == 'SET_DL_SRC': + eq_(act_str_list[1], act["dl_src"]) + elif act_type == 'SET_DL_DST': + eq_(act_str_list[1], act["dl_dst"]) + elif act_type == 'SET_NW_SRC': + eq_(act_str_list[1], act["nw_src"]) + elif act_type == 'SET_NW_DST': + eq_(act_str_list[1], act["nw_dst"]) + elif act_type == 'SET_NW_TOS': + eq_(int(act_str_list[1]), act["nw_tos"]) + elif act_type == 'SET_TP_SRC': + eq_(int(act_str_list[1]), act["tp_src"]) + elif act_type == 'SET_TP_DST': + eq_(int(act_str_list[1]), act["tp_dst"]) + elif act_type == 'ENQUEUE': + enq = act_str_list[1].split(':') + eq_(int(enq[0], 10), act["port"]) + eq_(int(enq[1], 10), act["queue_id"]) + elif act_type == 'SET_MPLS_TTL': + eq_(int(act_str_list[1]), act["mpls_ttl"]) + elif act_type == 'PUSH_VLAN': + eq_(int(act_str_list[1]), act["ethertype"]) + elif act_type == 'PUSH_MPLS': + eq_(int(act_str_list[1]), act["ethertype"]) + elif act_type == 'POP_MPLS': + eq_(int(act_str_list[1]), act["ethertype"]) + elif act_type == 'SET_QUEUE': + eq_(int(act_str_list[1]), act["queue_id"]) + elif act_type == 'GROUP': + eq_(int(act_str_list[1]), act["group_id"]) + elif act_type == 'SET_NW_TTL': + eq_(int(act_str_list[1]), act["nw_ttl"]) + elif act_type == 'SET_FIELD': + field, value = act_str_list[1].split(':') + eq_(field.strip(' {'), act["field"]) + eq_(int(value.strip('} ')), act["value"]) + elif act_type == 'PUSH_PBB': + eq_(int(act_str_list[1]), act["ethertype"]) + elif act_type in ['STRIP_VLAN', 'COPY_TTL_OUT', + 'COPY_TTL_IN', 'DEC_MPLS_TTL', + 'POP_VLAN', 'DEC_NW_TTL', 'POP_PBB']: + pass + else: + assert False + + def _equal_str_to_match(self, key, value, match, test): + field_value = self._get_field_value(test, key, match) + + if key in ['eth_src', 'eth_dst', 'arp_sha', 'arp_tha']: + # MAC address + eth, mask = _to_match_eth(value) + if mask is not None: + # with mask + for i in range(0, len(mask)): + if mask[i] == 'f': + eq_(eth[i], field_value[0][i]) + eq_(mask, field_value[1]) + else: + # without mask + eq_(eth, field_value) + return + elif key in ['dl_src', 'dl_dst']: + eth, mask = _to_match_eth(value) + field_value = addrconv.mac.bin_to_text(field_value) + eq_(eth, field_value) + return + elif key in ['ipv4_src', 'ipv4_dst', 'arp_spa', 'arp_tpa']: + # IPv4 address + ipv4, mask = _to_match_ip(value) + if mask is not None: + # with mask + eq_(ipv4, field_value[0]) + eq_(mask, field_value[1]) + else: + # without mask + eq_(ipv4, field_value) + return + elif key in ['nw_src', 'nw_dst']: + # IPv4 address + ipv4, mask = _to_match_ip(value) + field_value = _to_match_ip(field_value) + if mask is not None: + # with mask + eq_(ipv4, field_value[0]) + eq_(mask, field_value[1]) + else: + # without mask + eq_(ipv4, field_value[0]) + return + elif key in ['ipv6_src', 'ipv6_dst']: + # IPv6 address + ipv6, mask = _to_match_ip(value) + if mask is not None: + # with mask + eq_(ipv6, field_value[0]) + eq_(mask, field_value[1]) + else: + # without mask + eq_(ipv6, field_value) + return + elif key == 'vlan_vid': + if test.ver == ofproto_v1_0.OFP_VERSION: + eq_(value, field_value) + else: + eq_(test.expected_value['vlan_vid'][ + value]['to_match'], field_value) + return + else: + if isinstance(value, str) and '/' in value: + # with mask + value, mask = _to_match_masked_int(value) + value &= mask + eq_(value, field_value[0]) + eq_(mask, field_value[1]) + else: + # without mask + eq_(_str_to_int(value), field_value) + return + + def _equal_match_to_str(self, key, value, match_str, test): + field_value = match_str[key] + if key in ['dl_src', 'dl_dst', 'arp_sha', 'arp_tha']: + # MAC address + eth, mask = _to_match_eth(value) + if mask is not None: + # with mask + field_value = field_value.split('/') + for i in range(0, len(mask)): + if mask[i] == 'f': + eq_(eth[i], field_value[0][i]) + eq_(mask, field_value[1]) + else: + # without mask + eq_(eth, field_value) + return + elif key in['nw_src', 'nw_dst', 'arp_spa', 'arp_tpa']: + # IPv4 address + if test.ver == ofproto_v1_0.OFP_VERSION: + ipv4, mask = _to_match_ip(value) + field_value = _to_match_ip(field_value) + if mask is not None: + # with mask + eq_(ipv4, field_value[0]) + eq_(mask, field_value[1]) + else: + # without mask + eq_(ipv4, field_value[0]) + else: + ipv4, mask = _to_match_ip(value) + if mask is not None: + # with mask + field_value = field_value.split('/') + eq_(ipv4, field_value[0]) + eq_(mask, field_value[1]) + else: + # without mask + eq_(ipv4, field_value) + return + elif key in ['ipv6_src', 'ipv6_dst']: + # IPv6 address + ipv6, mask = _to_match_ip(value) + if mask is not None: + # with mask + field_value = field_value.split('/') + eq_(ipv6, field_value[0]) + eq_(mask, field_value[1]) + else: + # without mask + eq_(ipv6, field_value) + return + elif key == 'dl_vlan': + if test.ver == ofproto_v1_0.OFP_VERSION: + eq_(value, field_value) + else: + eq_(test.expected_value['vlan_vid'][ + value]['to_str'], field_value) + return + else: + if isinstance(value, str) and '/' in value: + # with mask + value = _to_masked_int_str(value) + eq_(value, field_value) + else: + # without mask + eq_(_str_to_int(value), field_value) + return + + def _conv_key(self, test, key, attrs): + if test.ver != ofproto_v1_0.OFP_VERSION: + if key in conv_of10_to_of12_dict: + # For old field name + key = conv_of10_to_of12_dict[key] + elif key == 'tp_src' or key == 'tp_dst': + # TCP/UDP port + conv = {inet.IPPROTO_TCP: {'tp_src': 'tcp_src', + 'tp_dst': 'tcp_dst'}, + inet.IPPROTO_UDP: {'tp_src': 'udp_src', + 'tp_dst': 'udp_dst'}} + ip_proto = attrs.get('nw_proto', attrs.get('ip_proto', 0)) + key = conv[ip_proto][key] + + return key + + def _get_field_value(self, test, key, match): + if test.ver == ofproto_v1_0.OFP_VERSION: + members = inspect.getmembers(match) + for member in members: + if member[0] == key: + field_value = member[1] + elif member[0] == 'wildcards': + wildcards = member[1] + if key == 'nw_src': + field_value = test.nw_src_to_str(wildcards, field_value) + elif key == 'nw_dst': + field_value = test.nw_dst_to_str(wildcards, field_value) + else: + field_value = match[key] + + return field_value + + +class test_data_base(object): + # followings must be an attribute of subclass. + # _ofctl + # _ofproto + + def __init__(self): + self.ver = self._ofproto.OFP_VERSION + self.to_match = self._ofctl.to_match + self.match_to_str = self._ofctl.match_to_str + self.to_actions = self._ofctl.to_actions + self.actions_to_str = self._ofctl.actions_to_str + + +class test_data_v1_0(test_data_base): + """ Test_data for of_v1_0 """ + _ofctl = ofctl_v1_0 + _ofproto = ofproto_v1_0 + _parser = ofproto_v1_0_parser + + def __init__(self): + super(test_data_v1_0, self).__init__() + self.nw_src_to_str = self._ofctl.nw_src_to_str + self.nw_dst_to_str = self._ofctl.nw_dst_to_str + self.supported_action = {} + self.act_list = [ + {'type': 'OUTPUT', 'port': 3}, + {'type': 'SET_VLAN_VID', 'vlan_vid': 5}, + {'type': 'SET_VLAN_PCP', 'vlan_pcp': 3}, + {'type': 'STRIP_VLAN'}, + {'type': 'SET_DL_SRC', 'dl_src': 'aa:bb:cc:11:22:33'}, + {'type': 'SET_DL_DST', 'dl_dst': 'aa:bb:cc:11:22:33'}, + {'type': 'SET_NW_SRC', 'nw_src': '10.0.0.1'}, + {'type': 'SET_NW_DST', 'nw_dst': '10.0.0.1'}, + {'type': 'SET_NW_TOS', 'nw_tos': 184}, + {'type': 'SET_TP_SRC', 'tp_src': 8080}, + {'type': 'SET_TP_DST', 'tp_dst': 8080}, + {'type': 'ENQUEUE', 'queue_id': 3, 'port': 1} + ] + self.attr_list = [ + {'in_port': 7}, + {'dl_src': 'aa:bb:cc:11:22:33'}, + {'dl_dst': 'aa:bb:cc:11:22:33'}, + {'dl_vlan': 5}, + {'dl_vlan_pcp': 3}, + {'dl_type': 123}, + {'nw_tos': 16}, + {'nw_proto': 5}, + {'nw_src': '192.168.0.1'}, + {'nw_src': '192.168.0.1/24'}, + {'nw_dst': '192.168.0.1'}, + {'nw_dst': '192.168.0.1/24'}, + {'tp_src': 1}, + {'tp_dst': 2} + ] + self.set_action() + + def set_action(self): + self.supported_action.update( + { + 'OUTPUT': self._parser.OFPActionOutput, + 'SET_VLAN_VID': self._parser.OFPActionVlanVid, + 'SET_VLAN_PCP': self._parser.OFPActionVlanPcp, + 'STRIP_VLAN': self._parser.OFPActionStripVlan, + 'SET_DL_SRC': self._parser.OFPActionSetDlSrc, + 'SET_DL_DST': self._parser.OFPActionSetDlDst, + 'SET_NW_SRC': self._parser.OFPActionSetNwSrc, + 'SET_NW_DST': self._parser.OFPActionSetNwDst, + 'SET_NW_TOS': self._parser.OFPActionSetNwTos, + 'SET_TP_SRC': self._parser.OFPActionSetTpSrc, + 'SET_TP_DST': self._parser.OFPActionSetTpDst, + 'ENQUEUE': self._parser.OFPActionEnqueue + }) + + +class test_data_v1_2(test_data_base): + """ Test_data for of_v1_2 """ + _ofctl = ofctl_v1_2 + _ofproto = ofproto_v1_2 + _parser = ofproto_v1_2_parser + + def __init__(self): + super(test_data_v1_2, self).__init__() + self.supported_action = {} + self.act_list = [ + {'type': 'OUTPUT', 'port': 3}, + {'type': 'COPY_TTL_OUT'}, + {'type': 'COPY_TTL_IN'}, + {'type': 'SET_MPLS_TTL', 'mpls_ttl': 64}, + {'type': 'DEC_MPLS_TTL'}, + {'type': 'PUSH_VLAN', 'ethertype': 0x0800}, + {'type': 'POP_VLAN'}, + {'type': 'PUSH_MPLS', 'ethertype': 0x0800}, + {'type': 'POP_MPLS', 'ethertype': 0x0800}, + {'type': 'SET_QUEUE', 'queue_id': 7}, + {'type': 'GROUP', 'group_id': 5}, + {'type': 'SET_NW_TTL', 'nw_ttl': 64}, + {'type': 'DEC_NW_TTL'}, + {"type": "CLEAR_ACTIONS"}, + {"type": "WRITE_ACTIONS", + "actions": [{"type": "OUTPUT", "port": 4}]}, + {'type': 'GOTO_TABLE', 'table_id': 8}, + {'type': 'WRITE_METADATA', 'metadata': 8, + 'metadata_mask': (1 << 64) - 1}, + ] + self.attr_list = [ + {'in_port': 7}, + {'in_phy_port': 5, 'in_port': 3}, + {'metadata': 12345}, + {'metadata': '0x1212121212121212'}, + {'metadata': '0x19af28be37fa91b/0x1010101010101010'}, + {'dl_src': "aa:bb:cc:11:22:33"}, + {'dl_src': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff"}, + {'dl_dst': "aa:bb:cc:11:22:33"}, + {'dl_dst': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff"}, + {'dl_type': 123}, + {'eth_src': "aa:bb:cc:11:22:33"}, + {'eth_src': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff"}, + {'eth_dst': "aa:bb:cc:11:22:33"}, + {'eth_dst': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff"}, + {'eth_type': 0x800}, + {'dl_vlan': 0}, + {'dl_vlan': 3}, + {'dl_vlan': 4095}, + {'dl_vlan': "0"}, + {'dl_vlan': "3"}, + {'dl_vlan': "4095"}, + {'dl_vlan': "0x0000"}, + {'dl_vlan': "0x0003"}, + {'dl_vlan': "0x0fff"}, + {'dl_vlan': "0x1000"}, + {'dl_vlan': "0x1003"}, + {'dl_vlan': "0x1fff"}, + {'dl_vlan': "4096/4096"}, + {'dl_vlan': "4096/4097"}, + {'dl_vlan': "2744/2748"}, + {'dl_vlan': "2748/2748"}, + {'dl_vlan': "2748/2749"}, + {'dl_vlan': "0x1000/0x1000"}, + {'dl_vlan': "0x1000/0x1001"}, + {'dl_vlan': "0x0ab8/0x0abc"}, + {'dl_vlan': "0x0abc/0x0abc"}, + {'dl_vlan': "0x0abc/0x0abd"}, + {'vlan_pcp': 3, 'vlan_vid': 3}, + {'ip_dscp': 3, 'eth_type': 0x0800}, + {'ip_ecn': 4, 'eth_type': 0x86dd}, + {'nw_src': "192.168.0.1", 'eth_type': 0x0800}, + {'nw_src': "192.168.0.1/24", 'eth_type': 0x0800}, + {'nw_src': "192.168.10.10/255.255.0.0", 'eth_type': 0x0800}, + {'nw_dst': "192.168.0.1", 'eth_type': 0x0800}, + {'nw_dst': "192.168.0.1/24", 'eth_type': 0x0800}, + {'nw_dst': "192.168.10.10/255.255.255.0"}, + {'nw_proto': 5, 'eth_type': 0x0800}, + {'ip_proto': 5, 'eth_type': 0x86dd}, + {'ipv4_src': "192.168.0.1", 'eth_type': 0x0800}, + {'ipv4_src': "192.168.0.1/24", 'eth_type': 0x0800}, + {'ipv4_src': "192.168.10.10/255.255.0.0", 'eth_type': 0x0800}, + {'ipv4_dst': "192.168.0.1", 'eth_type': 0x0800}, + {'ipv4_dst': "192.168.0.1/24", 'eth_type': 0x0800}, + {'ipv4_dst': "192.168.10.10/255.255.255.0", 'eth_type': 0x0800}, + {'tp_src': 1, 'ip_proto': 6}, + {'tp_dst': 2, 'ip_proto': 6}, + {'tp_src': 3, 'ip_proto': 17}, + {'tp_dst': 4, 'ip_proto': 17}, + {'vlan_vid': 0}, + {'vlan_vid': 3}, + {'vlan_vid': 4095}, + {'vlan_vid': "0"}, + {'vlan_vid': "3"}, + {'vlan_vid': "4095"}, + {'vlan_vid': "0x0000"}, + {'vlan_vid': "0x0003"}, + {'vlan_vid': "0x0fff"}, + {'vlan_vid': "0x1000"}, + {'vlan_vid': "0x1003"}, + {'vlan_vid': "0x1fff"}, + {'vlan_vid': "4096/4096"}, + {'vlan_vid': "4096/4097"}, + {'vlan_vid': "2744/2748"}, + {'vlan_vid': "2748/2748"}, + {'vlan_vid': "2748/2749"}, + {'vlan_vid': "0x1000/0x1000"}, + {'vlan_vid': "0x1000/0x1001"}, + {'vlan_vid': "0x0ab8/0x0abc"}, + {'vlan_vid': "0x0abc/0x0abc"}, + {'vlan_vid': "0x0abc/0x0abd"}, + {'tcp_src': 3, 'ip_proto': 6}, + {'tcp_dst': 5, 'ip_proto': 6}, + {'udp_src': 2, 'ip_proto': 17}, + {'udp_dst': 6, 'ip_proto': 17}, + {'sctp_src': 99, 'ip_proto': 132}, + {'sctp_dst': 99, 'ip_proto': 132}, + {'icmpv4_type': 5, 'ip_proto': 1}, + {'icmpv4_code': 6, 'ip_proto': 1}, + {'arp_op': 3, 'eth_type': 0x0806}, + {'arp_spa': "192.168.0.11", 'eth_type': 0x0806}, + {'arp_spa': "192.168.0.22/24", 'eth_type': 0x0806}, + {'arp_tpa': "192.168.0.33", 'eth_type': 0x0806}, + {'arp_tpa': "192.168.0.44/24", 'eth_type': 0x0806}, + {'arp_sha': "aa:bb:cc:11:22:33", 'eth_type': 0x0806}, + {'arp_sha': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff", + 'eth_type': 0x0806}, + {'arp_tha': "aa:bb:cc:11:22:33", 'eth_type': 0x0806}, + {'arp_tha': "aa:bb:cc:11:22:33/00:00:00:00:ff:ff", + 'eth_type': 0x0806}, + {'ipv6_src': '2001::aaaa:bbbb:cccc:1111', 'eth_type': 0x86dd}, + {'ipv6_src': '2001::aaaa:bbbb:cccc:1111/64', 'eth_type': 0x86dd}, + {'ipv6_dst': '2001::ffff:cccc:bbbb:1111', 'eth_type': 0x86dd}, + {'ipv6_dst': '2001::ffff:cccc:bbbb:1111/64', 'eth_type': 0x86dd}, + {'ipv6_flabel': 2, 'eth_type': 0x86dd}, + {'icmpv6_type': 3, 'ip_proto': 58}, + {'icmpv6_code': 4, 'ip_proto': 58}, + {'ipv6_nd_target': '2001::ffff:cccc:bbbb:1111', + 'icmpv6_type': 135, 'ip_proto': 58}, + {'ipv6_nd_sll': "aa:bb:cc:11:22:33", + 'icmpv6_type': 135, 'ip_proto': 58}, + {'ipv6_nd_tll': "aa:bb:cc:11:22:33", + 'icmpv6_type': 136, 'ip_proto': 58}, + {'mpls_label': 3, 'eth_type': 0x8848}, + {'mpls_tc': 2, 'eth_type': 0x8848} + ] + self.supported_action.update( + { + 'OUTPUT': self._parser.OFPActionOutput, + 'COPY_TTL_OUT': self._parser.OFPActionCopyTtlOut, + 'COPY_TTL_IN': self._parser.OFPActionCopyTtlIn, + 'SET_MPLS_TTL': self._parser.OFPActionSetMplsTtl, + 'DEC_MPLS_TTL': self._parser.OFPActionDecMplsTtl, + 'PUSH_VLAN': self._parser.OFPActionPushVlan, + 'POP_VLAN': self._parser.OFPActionPopVlan, + 'PUSH_MPLS': self._parser.OFPActionPushMpls, + 'POP_MPLS': self._parser.OFPActionPopMpls, + 'SET_QUEUE': self._parser.OFPActionSetQueue, + 'GROUP': self._parser.OFPActionGroup, + 'SET_NW_TTL': self._parser.OFPActionSetNwTtl, + 'DEC_NW_TTL': self._parser.OFPActionDecNwTtl, + 'SET_FIELD': self._parser.OFPActionSetField, + 'GOTO_TABLE': self._parser.OFPInstructionGotoTable, + 'WRITE_METADATA': self._parser.OFPInstructionWriteMetadata, + 'WRITE_ACTIONS': self._parser.OFPInstructionActions, + 'CLEAR_ACTIONS': self._parser.OFPInstructionActions, + }) + self.set_expected_value() + + def set_expected_value(self): + vid_present = self._ofproto.OFPVID_PRESENT + self.expected_value = { + "vlan_vid": { + 0: {"to_match": 0 | vid_present, "to_str": "0"}, + 3: {"to_match": 3 | vid_present, "to_str": "3"}, + 4095: {"to_match": 4095 | vid_present, "to_str": "4095"}, + "0": {"to_match": 0 | vid_present, "to_str": "0"}, + "3": {"to_match": 3 | vid_present, "to_str": "3"}, + "4095": {"to_match": 4095 | vid_present, "to_str": "4095"}, + "0x0000": {"to_match": 0x0000, "to_str": "0x0000"}, + "0x0003": {"to_match": 0x0003, "to_str": "0x0003"}, + "0x0fff": {"to_match": 0x0fff, "to_str": "0x0fff"}, + "0x1000": {"to_match": 0x1000, "to_str": "0"}, + "0x1003": {"to_match": 0x1003, "to_str": "3"}, + "0x1fff": {"to_match": 0x1fff, "to_str": "4095"}, + "4096/4096": {"to_match": (4096, 4096), + "to_str": "0x1000/0x1000"}, + "4096/4097": {"to_match": (4096, 4097), + "to_str": "0x1000/0x1001"}, + "2744/2748": {"to_match": (2744, 2748), + "to_str": "0x0ab8/0x0abc"}, + "2748/2748": {"to_match": (2748, 2748), + "to_str": "0x0abc/0x0abc"}, + "2748/2749": {"to_match": (2748, 2749), + "to_str": "0x0abc/0x0abd"}, + "0x1000/0x1000": {"to_match": (0x1000, 0x1000), + "to_str": "0x1000/0x1000"}, + "0x1000/0x1001": {"to_match": (0x1000, 0x1001), + "to_str": "0x1000/0x1001"}, + "0x0ab8/0x0abc": {"to_match": (0x0ab8, 0x0abc), + "to_str": "0x0ab8/0x0abc"}, + "0x0abc/0x0abc": {"to_match": (0x0abc, 0x0abc), + "to_str": "0x0abc/0x0abc"}, + "0x0abc/0x0abd": {"to_match": (0x0abc, 0x0abd), + "to_str": "0x0abc/0x0abd"} + } + } + + +class test_data_v1_3(test_data_v1_2): + """ Test_data for of_v1_3 """ + _ofctl = ofctl_v1_3 + _ofproto = ofproto_v1_3 + _parser = ofproto_v1_3_parser + + def __init__(self): + super(test_data_v1_3, self).__init__() + self.act_list.extend( + [ + {'type': 'PUSH_PBB', 'ethertype': 0x0800}, + {'type': 'POP_PBB'}, + {'type': 'METER', 'meter_id': 3}, + ] + ) + self.attr_list.extend( + [ + {'mpls_bos': 3, 'eth_type': 0x8848}, + {'pbb_isid': 5, 'eth_type': 0x88E7}, + {'pbb_isid': "0x05", 'eth_type': 0x88E7}, + {'pbb_isid': "0x05/0xff", 'eth_type': 0x88E7}, + {'tunnel_id': 7}, + {'tunnel_id': "0x07"}, + {'tunnel_id': "0x07/0xff"}, + {'ipv6_exthdr': 3, 'eth_type': 0x86dd}, + {'ipv6_exthdr': "0x40", 'eth_type': 0x86dd}, + {'ipv6_exthdr': "0x40/0x1F0", 'eth_type': 0x86dd}, + ] + ) + self.supported_action.update( + { + 'PUSH_PBB': self._parser.OFPActionPushPbb, + 'POP_PBB': self._parser.OFPActionPopPbb, + 'METER': self._parser.OFPInstructionMeter, + }) + self.set_expected_value() + + +def _add_tests_actions(cls): + for act in cls.act_list: + method_name = 'test_' + str(cls.ver) + '_' + act["type"] + '_action' + + def _run(self, name, act, cls): + print('processing %s ...' % name) + cls_ = Test_ofctl(name) + cls_._test_actions(act, cls) + print('adding %s ...' % method_name) + func = functools.partial(_run, name=method_name, act=act, cls=cls) + test_lib.add_method(Test_ofctl, method_name, func) + + +def _add_tests_match(cls): + for attr in cls.attr_list: + for key, value in attr.items(): + method_name = 'test_' + \ + str(cls.ver) + '_' + key + '_' + str( + value) + str(type(value)) + '_match' + + def _run(self, name, attr, cls): + print('processing %s ...' % name) + cls_ = Test_ofctl(name) + cls_._test_match(attr, cls) + print('adding %s ...' % method_name) + func = functools.partial( + _run, name=method_name, attr=attr, cls=cls) + test_lib.add_method(Test_ofctl, method_name, func) + + +""" Test case """ + +# for of10 +cls = test_data_v1_0() +_add_tests_actions(cls) +_add_tests_match(cls) + +# for of12 +cls = test_data_v1_2() +_add_tests_actions(cls) +_add_tests_match(cls) + +# for of13 +cls = test_data_v1_3() +_add_tests_actions(cls) +_add_tests_match(cls) diff --git a/tests/unit/lib/test_ofctl_string.py b/tests/unit/lib/test_ofctl_string.py new file mode 100644 index 00000000..fb491e39 --- /dev/null +++ b/tests/unit/lib/test_ofctl_string.py @@ -0,0 +1,151 @@ +# Copyright (C) 2017 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +from ryu.lib import ofctl_string +from ryu.ofproto import ofproto_parser +from ryu.ofproto.ofproto_protocol import ProtocolDesc +from ryu.ofproto import ofproto_v1_5 + + +class Test_OfctlString(unittest.TestCase): + """Test cases for ryu.ofproto.ofp_instruction_from_str. + """ + + def __init__(self, methodName): + print('init %s' % methodName) + self.fake_dp_of15 = ProtocolDesc(ofproto_v1_5.OFP_VERSION) + self.maxDiff = None + super(Test_OfctlString, self).__init__(methodName) + + def _test_str(self, dp, ofctl_str, *jsondict): + json = ofctl_string.ofp_instruction_from_str( + ofproto_v1_5, ofctl_str) + inst = ofproto_parser.ofp_instruction_from_jsondict(dp, json) + self.assertEqual(len(inst), len(jsondict)) + for i in range(len(inst)): + self.assertEqual(jsondict[i], inst[i].to_jsondict()) + + def test_drop(self): + inst = ofctl_string.ofp_instruction_from_str( + ofproto_v1_5, 'drop') + self.assertEqual(inst, []) + + def test_conjunction(self): + self._test_str(self.fake_dp_of15, + 'conjunction(0x234, 1/3),conjunction(0xdea, 2/2)', + {'OFPInstructionActions': { + 'actions': [ + {'NXActionConjunction': {'clause': 0, + 'experimenter': 8992, + 'id': 0x234, + 'len': None, + 'n_clauses': 3, + 'subtype': 34, + 'type': 65535}}, + {'NXActionConjunction': {'clause': 1, + 'experimenter': 8992, + 'id': 0xdea, + 'len': None, + 'n_clauses': 2, + 'subtype': 34, + 'type': 65535}}], + 'type': 4}}) + + def test_ct(self): + self._test_str(self.fake_dp_of15, + 'ct(commit)', + {'OFPInstructionActions': { + 'actions': [{'NXActionCT': {'actions': [], + 'alg': 0, + 'experimenter': 8992, + 'flags': 1, + 'len': None, + 'recirc_table': 255, + 'subtype': 35, + 'type': 65535, + 'zone_ofs_nbits': 0, + 'zone_src': u''}}], + 'type': 4}}) + + def test_ct_2(self): + self._test_str(self.fake_dp_of15, + 'ct(commit,zone=NXM_NX_REG8[0..15],' + 'exec(set_field:1->ct_mark))', + {'OFPInstructionActions': { + 'actions': [{'NXActionCT': { + 'actions': [ + {'OFPActionSetField': { + 'field': {'OXMTlv': {'field': 'ct_mark', + 'mask': None, + 'value': 1}}, + 'len': 8, + 'type': 25}}], + 'alg': 0, + 'experimenter': 8992, + 'flags': 1, + 'len': None, + 'recirc_table': 255, + 'subtype': 35, + 'type': 65535, + 'zone_ofs_nbits': 15, + 'zone_src': u'reg8'}}], + 'type': 4}}) + + def test_resubmit(self): + self._test_str(self.fake_dp_of15, + 'resubmit(,10)', + {'OFPInstructionActions': + {'actions': [{'NXActionResubmitTable': { + 'experimenter': 8992, + 'in_port': 65528, + 'len': None, + 'subtype': 14, + 'table_id': 10, + 'type': 65535}}], + 'type': 4}}) + + def test_set_field(self): + self._test_str(self.fake_dp_of15, + 'set_field:10/0xff->tun_id', + {'OFPInstructionActions': + {'actions': [{'OFPActionSetField': { + 'field': {'OXMTlv': {'field': 'tunnel_id', + 'mask': 255, + 'value': 10}}, + 'len': 8, + 'type': 25}}], + 'type': 4}}) + + def test_pop_vlan(self): + self._test_str(self.fake_dp_of15, + 'pop_vlan', + {'OFPInstructionActions': + {'actions': [{'OFPActionPopVlan': {'len': 8, + 'type': 18}}], + 'type': 4}}) + + def test_multi(self): + self._test_str(self.fake_dp_of15, + 'pop_vlan,goto_table:33', + {'OFPInstructionActions': + {'actions': [{'OFPActionPopVlan': {'len': 8, + 'type': 18}}], + 'type': 4}}, + {'OFPInstructionGotoTable': + {'len': 8, + 'table_id': 33, + 'type': 1}}) diff --git a/tests/unit/lib/test_ofctl_utils.py b/tests/unit/lib/test_ofctl_utils.py new file mode 100644 index 00000000..2f02f43b --- /dev/null +++ b/tests/unit/lib/test_ofctl_utils.py @@ -0,0 +1,142 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import unittest + +from ryu.lib import ofctl_utils +from ryu.ofproto import ofproto_v1_3 + + +LOG = logging.getLogger(__name__) + + +class Test_ofctl_utils(unittest.TestCase): + # prepare test target + util = ofctl_utils.OFCtlUtil(ofproto_v1_3) + + def _test_str_to_int(self, input_value, expected_value): + output_value = ofctl_utils.str_to_int(input_value) + self.assertEqual(expected_value, output_value) + + def test_str_to_int(self): + self._test_str_to_int(1, 1) # int + self._test_str_to_int('0b10', 2) # binary digit + self._test_str_to_int('0o10', 8) # octal digit + self._test_str_to_int('0x10', 16) # hexadecimal digit + + def test_ofp_port_from_user(self): + self.assertEqual( + ofproto_v1_3.OFPP_CONTROLLER, + self.util.ofp_port_from_user(ofproto_v1_3.OFPP_CONTROLLER) # int + ) + self.assertEqual( + ofproto_v1_3.OFPP_CONTROLLER, + self.util.ofp_port_from_user('CONTROLLER') # str without prefix + ) + self.assertEqual( + ofproto_v1_3.OFPP_CONTROLLER, + self.util.ofp_port_from_user('OFPP_CONTROLLER') # str with prefix + ) + + def test_ofp_port_to_user(self): + self.assertEqual( + 'CONTROLLER', + self.util.ofp_port_to_user(ofproto_v1_3.OFPP_CONTROLLER) + ) + self.assertEqual( + 1, + self.util.ofp_port_to_user(1) # not matched + ) + + def test_ofp_table_from_user(self): + self.assertEqual( + ofproto_v1_3.OFPTT_ALL, + self.util.ofp_table_from_user('ALL') + ) + + def test_ofp_table_to_user(self): + self.assertEqual( + 'ALL', + self.util.ofp_table_to_user(ofproto_v1_3.OFPTT_ALL) + ) + + def test_ofp_cml_from_user(self): + self.assertEqual( + ofproto_v1_3.OFPCML_NO_BUFFER, + self.util.ofp_cml_from_user('NO_BUFFER') + ) + + def test_ofp_cml_to_user(self): + self.assertEqual( + 'NO_BUFFER', + self.util.ofp_cml_to_user(ofproto_v1_3.OFPCML_NO_BUFFER) + ) + + def test_ofp_group_from_user(self): + self.assertEqual( + ofproto_v1_3.OFPG_ANY, + self.util.ofp_group_from_user('ANY') + ) + + def test_ofp_group_to_user(self): + self.assertEqual( + 'ANY', + self.util.ofp_group_to_user(ofproto_v1_3.OFPG_ANY) + ) + + def test_ofp_buffer_from_user(self): + self.assertEqual( + ofproto_v1_3.OFP_NO_BUFFER, + self.util.ofp_buffer_from_user('NO_BUFFER') + ) + self.assertEqual( + 1, + self.util.ofp_buffer_from_user(1) # not matched + ) + + def test_ofp_buffer_to_user(self): + self.assertEqual( + 'NO_BUFFER', + self.util.ofp_buffer_to_user(ofproto_v1_3.OFP_NO_BUFFER) + ) + self.assertEqual( + 1, + self.util.ofp_buffer_to_user(1) # not matched + ) + + def test_ofp_meter_from_user(self): + self.assertEqual( + ofproto_v1_3.OFPM_ALL, + self.util.ofp_meter_from_user('ALL') + ) + + def test_ofp_meter_to_user(self): + self.assertEqual( + 'ALL', + self.util.ofp_meter_to_user(ofproto_v1_3.OFPM_ALL) + ) + + def test_ofp_queue_from_user(self): + self.assertEqual( + ofproto_v1_3.OFPQ_ALL, + self.util.ofp_queue_from_user('ALL') + ) + + def test_ofp_queue_to_user(self): + self.assertEqual( + 'ALL', + self.util.ofp_queue_to_user(ofproto_v1_3.OFPQ_ALL) + ) diff --git a/tests/unit/lib/test_ofctl_v1_3.py b/tests/unit/lib/test_ofctl_v1_3.py new file mode 100644 index 00000000..81cfacbf --- /dev/null +++ b/tests/unit/lib/test_ofctl_v1_3.py @@ -0,0 +1,54 @@ +# Copyright (C) 2013 Stratosphere Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +from nose.tools import * + +from ryu.lib import ofctl_v1_3 +from ryu.ofproto import ofproto_v1_3, ofproto_v1_3_parser +from ryu.ofproto import ofproto_protocol +from ryu.ofproto.ofproto_v1_3_parser import OFPActionPopMpls + +LOG = logging.getLogger('test_ofctl_v1_3') + + +class Test_ofctl_v1_3(unittest.TestCase): + + """ Test case for ofctl_v1_3 + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_to_actions_pop_mpls(self): + dp = ofproto_protocol.ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) + + acts = [ + { + 'type': 'POP_MPLS', + 'ethertype': 0x0800 + } + ] + result = ofctl_v1_3.to_actions(dp, acts) + insts = result[0] + act = insts.actions[0] + ok_(isinstance(act, OFPActionPopMpls)) + eq_(act.ethertype, 0x0800) diff --git a/tests/unit/lib/test_ofp_pktinfilter.py b/tests/unit/lib/test_ofp_pktinfilter.py new file mode 100644 index 00000000..2c037737 --- /dev/null +++ b/tests/unit/lib/test_ofp_pktinfilter.py @@ -0,0 +1,92 @@ +# Copyright (C) 2013 Stratosphere Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import six + +from nose.tools import * + +from ryu.controller import ofp_event +from ryu.controller.handler import ( + set_ev_cls, + MAIN_DISPATCHER, +) +from ryu.lib.packet import vlan, ethernet, ipv4 +from ryu.lib.ofp_pktinfilter import packet_in_filter, RequiredTypeFilter +from ryu.lib import mac +from ryu.ofproto import ether, ofproto_v1_3, ofproto_v1_3_parser +from ryu.ofproto.ofproto_protocol import ProtocolDesc + + +LOG = logging.getLogger('test_pktinfilter') + + +class _PacketInFilterApp(object): + @set_ev_cls(ofp_event.EventOFPPacketIn, MAIN_DISPATCHER) + @packet_in_filter(RequiredTypeFilter, {'types': [ + vlan.vlan, + ]}) + def packet_in_handler(self, ev): + return True + + +class Test_packet_in_filter(unittest.TestCase): + + """ Test case for pktinfilter + """ + + def setUp(self): + self.app = _PacketInFilterApp() + + def tearDown(self): + pass + + def test_pkt_in_filter_pass(self): + datapath = ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) + e = ethernet.ethernet(mac.BROADCAST_STR, + mac.BROADCAST_STR, + ether.ETH_TYPE_8021Q) + v = vlan.vlan() + i = ipv4.ipv4() + pkt = (e / v / i) + pkt.serialize() + pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, + data=six.binary_type(pkt.data)) + ev = ofp_event.EventOFPPacketIn(pkt_in) + ok_(self.app.packet_in_handler(ev)) + + def test_pkt_in_filter_discard(self): + datapath = ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) + e = ethernet.ethernet(mac.BROADCAST_STR, + mac.BROADCAST_STR, + ether.ETH_TYPE_IP) + i = ipv4.ipv4() + pkt = (e / i) + pkt.serialize() + pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, + data=six.binary_type(pkt.data)) + ev = ofp_event.EventOFPPacketIn(pkt_in) + ok_(not self.app.packet_in_handler(ev)) + + def test_pkt_in_filter_truncated(self): + datapath = ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) + truncated_data = '' + pkt_in = ofproto_v1_3_parser.OFPPacketIn(datapath, + data=truncated_data) + ev = ofp_event.EventOFPPacketIn(pkt_in) + ok_(not self.app.packet_in_handler(ev)) diff --git a/tests/unit/lib/test_pack_utils.py b/tests/unit/lib/test_pack_utils.py new file mode 100644 index 00000000..5bc99513 --- /dev/null +++ b/tests/unit/lib/test_pack_utils.py @@ -0,0 +1,59 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +import six +import struct + +from nose.tools import ok_, eq_ + +from ryu.lib import pack_utils + + +class TestMsgPackInto(unittest.TestCase): + """ Test case for msg_pack_into + """ + + def _test_msg_pack_into(self, offset_type='e'): + fmt = '!HH' + len_ = struct.calcsize(fmt) + buf = bytearray(len_) + offset = len_ + arg1 = 1 + arg2 = 2 + + if offset_type == 'l': + offset += 1 + elif offset_type == 'g': + offset -= 1 + + pack_utils.msg_pack_into(fmt, buf, offset, arg1, arg2) + + check_offset = len(buf) - len_ + res = struct.unpack_from(fmt, six.binary_type(buf), check_offset) + + eq_(arg1, res[0]) + eq_(arg2, res[1]) + + return True + + def test_msg_pack_into(self): + ok_(self._test_msg_pack_into()) + + def test_msg_pack_into_less(self): + ok_(self._test_msg_pack_into('l')) + + def test_msg_pack_into_greater(self): + ok_(self._test_msg_pack_into('g')) diff --git a/tests/unit/lib/test_pcaplib.py b/tests/unit/lib/test_pcaplib.py new file mode 100644 index 00000000..ac86904e --- /dev/null +++ b/tests/unit/lib/test_pcaplib.py @@ -0,0 +1,230 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import logging +import os +import struct +import sys +import unittest + +try: + import mock # Python 2 +except ImportError: + from unittest import mock # Python 3 + +from nose.tools import eq_ +from nose.tools import raises + +from ryu.utils import binary_str +from ryu.lib import pcaplib + +LOG = logging.getLogger(__name__) + +PCAP_PACKET_DATA_DIR = os.path.join( + os.path.dirname(sys.modules[__name__].__file__), + '../../packet_data/pcap/') + + +class Test_PcapFileHdr(unittest.TestCase): + """ + Test case for pcaplib.PcapFileHdr class + """ + hdr = pcaplib.PcapFileHdr( + magic=None, # temporary default + version_major=2, + version_minor=4, + thiszone=0x11223344, + sigfigs=0x22334455, + snaplen=0x33445566, + network=0x44556677, + ) + + buf_big = ( + b'\xa1\xb2\xc3\xd4' # magic (Big Endian) + b'\x00\x02\x00\x04' # version_major, version_minor + b'\x11\x22\x33\x44' # thiszone + b'\x22\x33\x44\x55' # sigfigs + b'\x33\x44\x55\x66' # snaplen + b'\x44\x55\x66\x77' # network + ) + + buf_little = ( + b'\xd4\xc3\xb2\xa1' # magic (Little Endian) + b'\x02\x00\x04\x00' # version_major, version_minor + b'\x44\x33\x22\x11' # thiszone + b'\x55\x44\x33\x22' # sigfigs + b'\x66\x55\x44\x33' # snaplen + b'\x77\x66\x55\x44' # network + ) + + buf_invalid = ( + b'\xff\xff\xff\xff' # magic (Invalid) + b'\x02\x00\x04\x00' # version_major, version_minor + b'\x44\x33\x22\x11' # thiszone + b'\x55\x44\x33\x22' # sigfigs + b'\x66\x55\x44\x33' # snaplen + b'\x77\x66\x55\x44' # network + ) + + def _assert(self, magic, ret): + self.hdr.magic = magic + eq_(self.hdr.__dict__, ret.__dict__) + + def test_parser_with_big_endian(self): + ret, byteorder = pcaplib.PcapFileHdr.parser(self.buf_big) + self._assert(pcaplib.PcapFileHdr.MAGIC_NUMBER_IDENTICAL, ret) + eq_('big', byteorder) + + def test_parser_with_little_endian(self): + ret, byteorder = pcaplib.PcapFileHdr.parser(self.buf_little) + self._assert(pcaplib.PcapFileHdr.MAGIC_NUMBER_SWAPPED, ret) + eq_('little', byteorder) + + @mock.patch('sys.byteorder', 'big') + def test_serialize_with_big_endian(self): + buf = self.hdr.serialize() + eq_(binary_str(self.buf_big), binary_str(buf)) + + @mock.patch('sys.byteorder', 'little') + def test_serialize_with_little_endian(self): + buf = self.hdr.serialize() + eq_(binary_str(self.buf_little), binary_str(buf)) + + @raises(struct.error) + def test_parser_with_invalid_magic_number(self): + pcaplib.PcapFileHdr.parser(self.buf_invalid) + + +class Test_PcapPktHdr(unittest.TestCase): + """ + Test case for pcaplib.PcapPktHdr class + """ + expected_buf = b'test_data' + + hdr = pcaplib.PcapPktHdr( + ts_sec=0x11223344, + ts_usec=0x22334455, + incl_len=len(expected_buf), + orig_len=0x44556677, + ) + + buf_big = ( + b'\x11\x22\x33\x44' # ts_sec + b'\x22\x33\x44\x55' # ts_usec + b'\x00\x00\x00\x09' # incl_len = len(expected_buf) + b'\x44\x55\x66\x77' # orig_len + ) + + buf_little = ( + b'\x44\x33\x22\x11' # ts_sec + b'\x55\x44\x33\x22' # ts_usec + b'\x09\x00\x00\x00' # incl_len = len(expected_buf) + b'\x77\x66\x55\x44' # orig_len + ) + + def test_parser_with_big_endian(self): + ret, buf = pcaplib.PcapPktHdr.parser( + self.buf_big + self.expected_buf, 'big') + eq_(self.hdr.__dict__, ret.__dict__) + eq_(self.expected_buf, buf) + + def test_parser_with_little_endian(self): + ret, buf = pcaplib.PcapPktHdr.parser( + self.buf_little + self.expected_buf, 'little') + eq_(self.hdr.__dict__, ret.__dict__) + eq_(self.expected_buf, buf) + + @mock.patch('sys.byteorder', 'big') + def test_serialize_with_big_endian(self): + buf = self.hdr.serialize() + eq_(binary_str(self.buf_big), binary_str(buf)) + + @mock.patch('sys.byteorder', 'little') + def test_serialize_with_little_endian(self): + buf = self.hdr.serialize() + eq_(binary_str(self.buf_little), binary_str(buf)) + + +class Test_pcaplib_Reader(unittest.TestCase): + """ + Test case for pcaplib.Reader class + """ + + expected_outputs = [ + (0x1234 + (0x5678 / 1e6), b'test_data_1'), # sec=0x1234, usec=0x5678 + (0x2345 + (0x6789 / 1e6), b'test_data_2'), # sec=0x2345, usec=0x6789 + ] + + def _test(self, file_name): + outputs = [] + for ts, buf in pcaplib.Reader(open(file_name, 'rb')): + outputs.append((ts, buf)) + + eq_(self.expected_outputs, outputs) + + def test_with_big_endian(self): + self._test(os.path.join(PCAP_PACKET_DATA_DIR, 'big_endian.pcap')) + + def test_with_little_endian(self): + self._test(os.path.join(PCAP_PACKET_DATA_DIR, 'little_endian.pcap')) + + +class DummyFile(object): + + def __init__(self): + self.buf = b'' + + def write(self, buf): + self.buf += buf + + def close(self): + pass + + +class Test_pcaplib_Writer(unittest.TestCase): + """ + Test case for pcaplib.Writer class + """ + + @staticmethod + def _test(file_name): + expected_buf = open(file_name, 'rb').read() + f = DummyFile() + w = pcaplib.Writer(f) + w.write_pkt(b'test_data_1', ts=(0x1234 + (0x5678 / 1e6))) + w.write_pkt(b'test_data_2', ts=(0x2345 + (0x6789 / 1e6))) + eq_(expected_buf, f.buf) + + @mock.patch('sys.byteorder', 'big') + def test_with_big_endian(self): + self._test(os.path.join(PCAP_PACKET_DATA_DIR, 'big_endian.pcap')) + + @mock.patch('sys.byteorder', 'little') + def test_with_little_endian(self): + self._test(os.path.join(PCAP_PACKET_DATA_DIR, 'little_endian.pcap')) + + @staticmethod + @mock.patch.object(pcaplib.Writer, '_write_pcap_file_hdr', mock.MagicMock) + @mock.patch.object(pcaplib.Writer, '_write_pkt_hdr', mock.MagicMock) + def test_with_longer_buf(): + f = DummyFile() + snaplen = 4 + w = pcaplib.Writer(f, snaplen=snaplen) + w.write_pkt(b'hogehoge', ts=0) + expected_buf = b'hoge' # b'hogehoge'[:snaplen] + eq_(expected_buf, f.buf) + eq_(snaplen, len(f.buf)) diff --git a/tests/unit/lib/test_rpc.py b/tests/unit/lib/test_rpc.py new file mode 100644 index 00000000..2df123ee --- /dev/null +++ b/tests/unit/lib/test_rpc.py @@ -0,0 +1,360 @@ +# Copyright (C) 2013-2015 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013-2015 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import numbers +import socket +import struct +import unittest + +from nose.tools import raises +import six + +from ryu.lib import hub +from ryu.lib import rpc + + +class MyException(BaseException): + pass + + +class Test_rpc(unittest.TestCase): + """ Test case for ryu.lib.rpc + """ + + def _handle_request(self, m): + e = self._server_endpoint + msgid, method, params = m + if method == 'resp': + e.send_response(msgid, result=params[0]) + elif method == 'err': + e.send_response(msgid, error=params[0]) + elif method == 'callback': + n, cb, v = params + assert n > 0 + self._requests.add(e.send_request(cb, [msgid, n, cb, v])) + elif method == 'notify1': + e.send_notification(params[1], params[2]) + e.send_response(msgid, result=params[0]) + elif method == 'shutdown': + how = getattr(socket, params[0]) + self._server_sock.shutdown(how) + e.send_response(msgid, result=method) + else: + raise Exception("unknown method %s" % method) + + def _handle_notification(self, m): + e = self._server_endpoint + method, params = m + if method == 'notify2': + e.send_notification(params[0], params[1]) + + def _handle_response(self, m): + e = self._server_endpoint + msgid, error, result = m + assert error is None + self._requests.remove(msgid) + omsgid, n, cb, v = result + assert n >= 0 + if n == 0: + e.send_response(omsgid, result=v) + else: + self._requests.add(e.send_request(cb, [omsgid, n, cb, v])) + + def setUp(self): + self._server_sock, self._client_sock = socket.socketpair() + table = { + rpc.MessageType.REQUEST: self._handle_request, + rpc.MessageType.RESPONSE: self._handle_response, + rpc.MessageType.NOTIFY: self._handle_notification + } + self._requests = set() + self._server_sock.setblocking(0) + self._server_endpoint = rpc.EndPoint(self._server_sock, + disp_table=table) + self._server_thread = hub.spawn(self._server_endpoint.serve) + + def tearDown(self): + hub.kill(self._server_thread) + hub.joinall([self._server_thread]) + + def test_0_call_str(self): + c = rpc.Client(self._client_sock) + obj = 'hoge' + result = c.call('resp', [obj]) + assert result == obj + assert isinstance(result, str) + + def test_0_call_int(self): + c = rpc.Client(self._client_sock) + obj = 12345 + assert isinstance(obj, int) + result = c.call('resp', [obj]) + assert result == obj + assert isinstance(result, numbers.Integral) + + def test_0_call_int2(self): + c = rpc.Client(self._client_sock) + obj = six.MAXSIZE + assert isinstance(obj, int) + result = c.call('resp', [obj]) + assert result == obj + assert isinstance(result, numbers.Integral) + + def test_0_call_int3(self): + c = rpc.Client(self._client_sock) + obj = - six.MAXSIZE - 1 + assert isinstance(obj, int) + result = c.call('resp', [obj]) + assert result == obj + assert isinstance(result, numbers.Integral) + + def test_0_call_long(self): + c = rpc.Client(self._client_sock) + obj = 0xffffffffffffffff # max value for msgpack + assert isinstance(obj, numbers.Integral) + result = c.call('resp', [obj]) + assert result == obj + assert isinstance(result, numbers.Integral) + + def test_0_call_long2(self): + c = rpc.Client(self._client_sock) + # Note: the python type of this value is int for 64-bit arch + obj = -0x8000000000000000 # min value for msgpack + assert isinstance(obj, numbers.Integral) + result = c.call('resp', [obj]) + assert result == obj + assert isinstance(result, numbers.Integral) + + @raises(TypeError) + def test_0_call_bytearray(self): + c = rpc.Client(self._client_sock) + obj = bytearray(b'foo') + result = c.call('resp', [obj]) + assert result == obj + assert isinstance(result, str) + + def test_1_shutdown_wr(self): + # test if the server shutdown on disconnect + self._client_sock.shutdown(socket.SHUT_WR) + hub.joinall([self._server_thread]) + + @raises(EOFError) + def test_1_client_shutdown_wr(self): + c = rpc.Client(self._client_sock) + c.call('shutdown', ['SHUT_WR']) + + def test_1_call_True(self): + c = rpc.Client(self._client_sock) + obj = True + assert c.call('resp', [obj]) == obj + + def test_2_call_None(self): + c = rpc.Client(self._client_sock) + obj = None + assert c.call('resp', [obj]) is None + + def test_2_call_False(self): + c = rpc.Client(self._client_sock) + obj = False + assert c.call('resp', [obj]) == obj + + def test_2_call_dict(self): + c = rpc.Client(self._client_sock) + obj = {'hoge': 1, 'fuga': 2} + assert c.call('resp', [obj]) == obj + + def test_2_call_empty_dict(self): + c = rpc.Client(self._client_sock) + obj = {} + assert c.call('resp', [obj]) == obj + + def test_2_call_array(self): + c = rpc.Client(self._client_sock) + obj = [1, 2, 3, 4] + assert c.call('resp', [obj]) == obj + + def test_2_call_empty_array(self): + c = rpc.Client(self._client_sock) + obj = [] + assert c.call('resp', [obj]) == obj + + def test_2_call_tuple(self): + c = rpc.Client(self._client_sock) + # Note: msgpack library implicitly convert a tuple into a list + obj = (1, 2, 3) + assert c.call('resp', [obj]) == list(obj) + + def test_2_call_unicode(self): + c = rpc.Client(self._client_sock) + # Note: We use encoding='utf-8' option in msgpack.Packer/Unpacker + # in order to support Python 3. + # With this option, utf-8 encoded bytes will be decoded into unicode + # type in Python 2 and str type in Python 3. + obj = u"hoge" + result = c.call('resp', [obj]) + assert result == obj + assert isinstance(result, six.text_type) + + def test_2_call_small_binary(self): + c = rpc.Client(self._client_sock) + obj = struct.pack("100x") + result = c.call('resp', [obj]) + assert result == obj + assert isinstance(result, six.binary_type) + + def test_3_call_complex(self): + c = rpc.Client(self._client_sock) + obj = [1, 'hoge', {'foo': 1, 3: 'bar'}] + assert c.call('resp', [obj]) == obj + + @unittest.skip("doesn't work with eventlet 0.18 and later") + def test_4_call_large_binary(self): + c = rpc.Client(self._client_sock) + obj = struct.pack("10000000x") + result = c.call('resp', [obj]) + assert result == obj + assert isinstance(result, six.binary_type) + + def test_0_notification1(self): + l = [] + + def callback(n): + l.append(n) + c = rpc.Client(self._client_sock, notification_callback=callback) + obj = 'hogehoge' + robj = 'fugafuga' + assert c.call('notify1', [robj, 'notify_hoge', [obj]]) == robj + c.receive_notification() + assert len(l) == 1 + n = l.pop(0) + assert n is not None + method, params = n + assert method == 'notify_hoge' + assert params[0] == obj + + def test_0_notification2(self): + l = [] + + def callback(n): + l.append(n) + c = rpc.Client(self._client_sock, notification_callback=callback) + obj = 'hogehogehoge' + c.send_notification('notify2', ['notify_hoge', [obj]]) + c.receive_notification() + assert len(l) == 1 + n = l.pop(0) + assert n is not None + method, params = n + assert method == 'notify_hoge' + assert params[0] == obj + + def test_0_call_error(self): + c = rpc.Client(self._client_sock) + obj = 'hoge' + try: + c.call('err', [obj]) + raise Exception("unexpected") + except rpc.RPCError as e: + assert e.get_value() == obj + + def test_0_call_error_notification(self): + l = [] + + def callback(n): + l.append(n) + c = rpc.Client(self._client_sock, notification_callback=callback) + c.send_notification('notify2', ['notify_foo', []]) + hub.sleep(0.5) # give the peer a chance to run + obj = 'hoge' + try: + c.call('err', [obj]) + raise Exception("unexpected") + except rpc.RPCError as e: + assert e.get_value() == obj + assert len(l) == 1 + n = l.pop(0) + method, params = n + assert method == 'notify_foo' + assert params == [] + + def test_4_async_call(self): + """send a bunch of requests and then wait for responses + """ + num_calls = 9999 + old_blocking = self._client_sock.setblocking(0) + try: + e = rpc.EndPoint(self._client_sock) + s = set() + for i in range(1, num_calls + 1): + s.add(e.send_request('resp', [i])) + sum = 0 + while s: + e.block() + e.process() + done = set() + for x in s: + r = e.get_response(x) + if r is None: + continue + res, error = r + assert error is None + sum += res + done.add(x) + assert done.issubset(s) + s -= done + assert sum == (1 + num_calls) * num_calls / 2 + finally: + self._client_sock.setblocking(old_blocking) + + def test_4_async_call2(self): + """both sides act as rpc client and server + """ + assert not self._requests + num_calls = 100 + old_blocking = self._client_sock.setblocking(0) + try: + e = rpc.EndPoint(self._client_sock) + s = set() + for i in range(1, num_calls + 1): + s.add(e.send_request('callback', [i, 'ourcallback', 0])) + sum = 0 + while s: + e.block() + e.process() + done = set() + for x in s: + r = e.get_response(x) + if r is None: + continue + res, error = r + assert error is None + sum += res + done.add(x) + assert done.issubset(s) + s -= done + r = e.get_request() + if r is not None: + msgid, method, params = r + assert method == 'ourcallback' + omsgid, n, cb, v = params + assert omsgid in s + assert cb == 'ourcallback' + assert n > 0 + e.send_response(msgid, result=[omsgid, n - 1, cb, v + 1]) + assert sum == (1 + num_calls) * num_calls / 2 + finally: + self._client_sock.setblocking(old_blocking) + assert not self._requests diff --git a/tests/unit/lib/test_stringify.py b/tests/unit/lib/test_stringify.py new file mode 100644 index 00000000..46fb21f0 --- /dev/null +++ b/tests/unit/lib/test_stringify.py @@ -0,0 +1,75 @@ +# Copyright (C) 2013-2015 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013-2015 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import base64 +import six +import unittest +from nose.tools import eq_ + +from ryu.lib import stringify + + +class C1(stringify.StringifyMixin): + def __init__(self, a, c): + print("init %s %s" % (a, c)) + self.a = a + self._b = 'B' + self.c = c + + +class Test_stringify(unittest.TestCase): + """ Test case for ryu.lib.stringify + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_jsondict(self): + if six.PY3: + def b64encode(s): + return base64.b64encode(s).decode('ascii') + else: + b64encode = base64.b64encode + j = {'C1': {'a': 'QUFB', 'c': 'Q0ND'}} + eq_(j['C1']['a'], b64encode(b'AAA')) + eq_(j['C1']['c'], b64encode(b'CCC')) + c = C1(a=b'AAA', c=b'CCC') + c2 = C1.from_jsondict(j['C1']) + eq_(c.__class__, c2.__class__) + eq_(c.__dict__, c2.__dict__) + eq_(j, c.to_jsondict()) + + def test_jsondict2(self): + + def my_encode(x): + return x.lower() + + def my_decode(x): + return x.upper() + + j = {'C1': {'a': 'aaa', 'c': 'ccc'}} + eq_(j['C1']['a'], my_encode('AAA')) + eq_(j['C1']['c'], my_encode('CCC')) + c = C1(a='AAA', c='CCC') + c2 = C1.from_jsondict(j['C1'], decode_string=my_decode) + eq_(c.__class__, c2.__class__) + eq_(c.__dict__, c2.__dict__) + eq_(j, c.to_jsondict(encode_string=my_encode)) diff --git a/tests/unit/ofproto/__init__.py b/tests/unit/ofproto/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/ofproto/json/of10/1-1-ofp_packet_out.packet.json b/tests/unit/ofproto/json/of10/1-1-ofp_packet_out.packet.json new file mode 100644 index 00000000..0dc98f49 --- /dev/null +++ b/tests/unit/ofproto/json/of10/1-1-ofp_packet_out.packet.json @@ -0,0 +1,15 @@ +{ + "OFPPacketOut": { + "actions": [ + { + "OFPActionOutput": { + "max_len": 65535, + "port": 65532 + } + } + ], + "buffer_id": 4294967295, + "data": "8guk0D9w8gukffjqCABFAABU+BoAAP8Br4sKAAABCgAAAggAAgj3YAAAMdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", + "in_port": 65533 + } +} diff --git a/tests/unit/ofproto/json/of10/1-2-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of10/1-2-ofp_flow_mod.packet.json new file mode 100644 index 00000000..4a63685e --- /dev/null +++ b/tests/unit/ofproto/json/of10/1-2-ofp_flow_mod.packet.json @@ -0,0 +1,37 @@ +{ + "OFPFlowMod": { + "actions": [ + { + "OFPActionOutput": { + "max_len": 65535, + "port": 6 + } + } + ], + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "match": { + "OFPMatch": { + "dl_dst": "f2:0b:a4:7d:f8:ea", + "dl_src": "00:00:00:00:00:00", + "dl_type": 0, + "dl_vlan": 0, + "dl_vlan_pcp": 0, + "in_port": 0, + "nw_dst": "0.0.0.0", + "nw_proto": 0, + "nw_src": "0.0.0.0", + "nw_tos": 0, + "tp_dst": 0, + "tp_src": 0, + "wildcards": 4194295 + } + }, + "out_port": 65532, + "priority": 123 + } +} diff --git a/tests/unit/ofproto/json/of10/1-4-ofp_packet_in.packet.json b/tests/unit/ofproto/json/of10/1-4-ofp_packet_in.packet.json new file mode 100644 index 00000000..6ccd2fb8 --- /dev/null +++ b/tests/unit/ofproto/json/of10/1-4-ofp_packet_in.packet.json @@ -0,0 +1,9 @@ +{ + "OFPPacketIn": { + "buffer_id": 2, + "data": "////////8gukffjqCAYAAQgABgQAAfILpH346goAAAEAAAAAAAAKAAAD", + "in_port": 99, + "reason": 1, + "total_len": 42 + } +} diff --git a/tests/unit/ofproto/json/of10/1-5-features_request.packet.json b/tests/unit/ofproto/json/of10/1-5-features_request.packet.json new file mode 100644 index 00000000..8f48ad5a --- /dev/null +++ b/tests/unit/ofproto/json/of10/1-5-features_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPFeaturesRequest": {} +} diff --git a/tests/unit/ofproto/json/of10/1-6-ofp_switch_features.packet.json b/tests/unit/ofproto/json/of10/1-6-ofp_switch_features.packet.json new file mode 100644 index 00000000..208431f7 --- /dev/null +++ b/tests/unit/ofproto/json/of10/1-6-ofp_switch_features.packet.json @@ -0,0 +1,37 @@ +{ + "OFPSwitchFeatures": { + "actions": 2115, + "capabilities": 169, + "datapath_id": 1095522080376, + "n_buffers": 0, + "n_tables": 255, + "ports": { + "6": { + "OFPPhyPort": { + "advertised": 640, + "config": 0, + "curr": 648, + "hw_addr": "f2:0b:a4:7d:f8:ea", + "name": "Port6", + "peer": 648, + "port_no": 6, + "state": 2, + "supported": 648 + } + }, + "7": { + "OFPPhyPort": { + "advertised": 640, + "config": 0, + "curr": 648, + "hw_addr": "f2:0b:a4:d0:3f:70", + "name": "Port7", + "peer": 648, + "port_no": 7, + "state": 16, + "supported": 648 + } + } + } + } +} diff --git a/tests/unit/ofproto/json/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet.json b/tests/unit/ofproto/json/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet.json new file mode 100644 index 00000000..f8e38d71 --- /dev/null +++ b/tests/unit/ofproto/json/of10/libofproto-OFP10-ofp_packet_out_packet_library.packet.json @@ -0,0 +1,58 @@ +{ + "OFPPacketOut": { + "actions": [ + { + "OFPActionOutput": { + "max_len": 65535, + "port": 65532 + } + } + ], + "buffer_id": 4294967295, + "data": { + "Packet": { + "protocols": [ + { + "ethernet": { + "dst": "f2:0b:a4:d0:3f:70", + "ethertype": 2048, + "src": "f2:0b:a4:7d:f8:ea" + } + }, + { + "ipv4": { + "csum": 44939, + "dst": "10.0.0.2", + "flags": 0, + "header_length": 5, + "identification": 63514, + "offset": 0, + "option": null, + "proto": 1, + "src": "10.0.0.1", + "tos": 0, + "total_length": 84, + "ttl": 255, + "version": 4 + } + }, + { + "icmp": { + "code": 0, + "csum": 520, + "data": { + "echo": { + "data": "MdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", + "id": 63328, + "seq": 0 + } + }, + "type": 8 + } + } + ] + } + }, + "in_port": 65533 + } +} diff --git a/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet.json b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet.json new file mode 100644 index 00000000..a41c2b64 --- /dev/null +++ b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_mpls_ttl.packet.json @@ -0,0 +1,37 @@ +{ + "OFPFlowMod": { + "actions": [ + { + "NXActionDecMplsTtl": { + "subtype": 26, + "vendor": 8992 + } + } + ], + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "match": { + "OFPMatch": { + "dl_dst": "00:00:00:00:00:00", + "dl_src": "00:00:00:00:00:00", + "dl_type": 34887, + "dl_vlan": 0, + "dl_vlan_pcp": 0, + "in_port": 0, + "nw_dst": "0.0.0.0", + "nw_proto": 0, + "nw_src": "0.0.0.0", + "nw_tos": 0, + "tp_dst": 0, + "tp_src": 0, + "wildcards": 3678447 + } + }, + "out_port": 65535, + "priority": 100 + } +} diff --git a/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet.json b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet.json new file mode 100644 index 00000000..3f6806c8 --- /dev/null +++ b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_dec_nw_ttl.packet.json @@ -0,0 +1,37 @@ +{ + "OFPFlowMod": { + "actions": [ + { + "NXActionDecTtl": { + "subtype": 18, + "vendor": 8992 + } + } + ], + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "match": { + "OFPMatch": { + "dl_dst": "00:00:00:00:00:00", + "dl_src": "00:00:00:00:00:00", + "dl_type": 34887, + "dl_vlan": 0, + "dl_vlan_pcp": 0, + "in_port": 0, + "nw_dst": "0.0.0.0", + "nw_proto": 0, + "nw_src": "0.0.0.0", + "nw_tos": 0, + "tp_dst": 0, + "tp_src": 0, + "wildcards": 3678447 + } + }, + "out_port": 65535, + "priority": 100 + } +} diff --git a/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_pop_mpls.packet.json b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_pop_mpls.packet.json new file mode 100644 index 00000000..69c0d70b --- /dev/null +++ b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_pop_mpls.packet.json @@ -0,0 +1,38 @@ +{ + "OFPFlowMod": { + "actions": [ + { + "NXActionPopMpls": { + "ethertype": 2048, + "subtype": 24, + "vendor": 8992 + } + } + ], + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "match": { + "OFPMatch": { + "dl_dst": "00:00:00:00:00:00", + "dl_src": "00:00:00:00:00:00", + "dl_type": 34887, + "dl_vlan": 0, + "dl_vlan_pcp": 0, + "in_port": 0, + "nw_dst": "0.0.0.0", + "nw_proto": 0, + "nw_src": "0.0.0.0", + "nw_tos": 0, + "tp_dst": 0, + "tp_src": 0, + "wildcards": 3678447 + } + }, + "out_port": 65535, + "priority": 100 + } +} diff --git a/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_push_mpls.packet.json b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_push_mpls.packet.json new file mode 100644 index 00000000..9e7853cb --- /dev/null +++ b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_push_mpls.packet.json @@ -0,0 +1,38 @@ +{ + "OFPFlowMod": { + "actions": [ + { + "NXActionPushMpls": { + "ethertype": 34887, + "subtype": 23, + "vendor": 8992 + } + } + ], + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "match": { + "OFPMatch": { + "dl_dst": "00:00:00:00:00:00", + "dl_src": "00:00:00:00:00:00", + "dl_type": 2048, + "dl_vlan": 0, + "dl_vlan_pcp": 0, + "in_port": 0, + "nw_dst": "0.0.0.0", + "nw_proto": 0, + "nw_src": "0.0.0.0", + "nw_tos": 0, + "tp_dst": 0, + "tp_src": 0, + "wildcards": 3678447 + } + }, + "out_port": 65535, + "priority": 100 + } +} diff --git a/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_label.packet.json b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_label.packet.json new file mode 100644 index 00000000..4cc001b2 --- /dev/null +++ b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_label.packet.json @@ -0,0 +1,38 @@ +{ + "OFPFlowMod": { + "actions": [ + { + "NXActionSetMplsLabel": { + "label": 10, + "subtype": 30, + "vendor": 8992 + } + } + ], + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "match": { + "OFPMatch": { + "dl_dst": "00:00:00:00:00:00", + "dl_src": "00:00:00:00:00:00", + "dl_type": 34887, + "dl_vlan": 0, + "dl_vlan_pcp": 0, + "in_port": 0, + "nw_dst": "0.0.0.0", + "nw_proto": 0, + "nw_src": "0.0.0.0", + "nw_tos": 0, + "tp_dst": 0, + "tp_src": 0, + "wildcards": 3678447 + } + }, + "out_port": 65535, + "priority": 100 + } +} diff --git a/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_tc.packet.json b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_tc.packet.json new file mode 100644 index 00000000..864fd7e7 --- /dev/null +++ b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_tc.packet.json @@ -0,0 +1,38 @@ +{ + "OFPFlowMod": { + "actions": [ + { + "NXActionSetMplsTc": { + "subtype": 31, + "tc": 10, + "vendor": 8992 + } + } + ], + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "match": { + "OFPMatch": { + "dl_dst": "00:00:00:00:00:00", + "dl_src": "00:00:00:00:00:00", + "dl_type": 34887, + "dl_vlan": 0, + "dl_vlan_pcp": 0, + "in_port": 0, + "nw_dst": "0.0.0.0", + "nw_proto": 0, + "nw_src": "0.0.0.0", + "nw_tos": 0, + "tp_dst": 0, + "tp_src": 0, + "wildcards": 3678447 + } + }, + "out_port": 65535, + "priority": 100 + } +} diff --git a/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet.json b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet.json new file mode 100644 index 00000000..da6e86f9 --- /dev/null +++ b/tests/unit/ofproto/json/of10/ovs-ofctl-of10-action_set_mpls_ttl.packet.json @@ -0,0 +1,38 @@ +{ + "OFPFlowMod": { + "actions": [ + { + "NXActionSetMplsTtl": { + "subtype": 25, + "ttl": 127, + "vendor": 8992 + } + } + ], + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "match": { + "OFPMatch": { + "dl_dst": "00:00:00:00:00:00", + "dl_src": "00:00:00:00:00:00", + "dl_type": 34887, + "dl_vlan": 0, + "dl_vlan_pcp": 0, + "in_port": 0, + "nw_dst": "0.0.0.0", + "nw_proto": 0, + "nw_src": "0.0.0.0", + "nw_tos": 0, + "tp_dst": 0, + "tp_src": 0, + "wildcards": 3678447 + } + }, + "out_port": 65535, + "priority": 100 + } +} diff --git a/tests/unit/ofproto/json/of12/3-0-ofp_desc_stats_reply.packet.json b/tests/unit/ofproto/json/of12/3-0-ofp_desc_stats_reply.packet.json new file mode 100644 index 00000000..4d5181ca --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-0-ofp_desc_stats_reply.packet.json @@ -0,0 +1,15 @@ +{ + "OFPStatsReply": { + "body": { + "OFPDescStats": { + "dp_desc": "dp", + "hw_desc": "hw", + "mfr_desc": "mfr", + "serial_num": "serial", + "sw_desc": "sw" + } + }, + "flags": 0, + "type": 0 + } +} diff --git a/tests/unit/ofproto/json/of12/3-1-ofp_packet_out.packet.json b/tests/unit/ofproto/json/of12/3-1-ofp_packet_out.packet.json new file mode 100644 index 00000000..efb39e2d --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-1-ofp_packet_out.packet.json @@ -0,0 +1,18 @@ +{ + "OFPPacketOut": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 4294967292, + "type": 0 + } + } + ], + "actions_len": 16, + "buffer_id": 4294967295, + "data": "8guk0D9w8gukffjqCABFAABU+BoAAP8Br4sKAAABCgAAAggAAgj3YAAAMdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", + "in_port": 4294967293 + } +} diff --git a/tests/unit/ofproto/json/of12/3-10-ofp_hello.packet.json b/tests/unit/ofproto/json/of12/3-10-ofp_hello.packet.json new file mode 100644 index 00000000..ce07cebd --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-10-ofp_hello.packet.json @@ -0,0 +1,3 @@ +{ + "OFPHello": {} +} diff --git a/tests/unit/ofproto/json/of12/3-11-ofp_flow_stats_request.packet.json b/tests/unit/ofproto/json/of12/3-11-ofp_flow_stats_request.packet.json new file mode 100644 index 00000000..d12cac71 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-11-ofp_flow_stats_request.packet.json @@ -0,0 +1,17 @@ +{ + "OFPFlowStatsRequest": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 0 + } +} diff --git a/tests/unit/ofproto/json/of12/3-12-ofp_flow_stats_reply.packet.json b/tests/unit/ofproto/json/of12/3-12-ofp_flow_stats_reply.packet.json new file mode 100644 index 00000000..5f802b45 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-12-ofp_flow_stats_reply.packet.json @@ -0,0 +1,161 @@ +{ + "OFPStatsReply": { + "body": [ + { + "OFPFlowStats": { + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115277000, + "duration_sec": 358, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [], + "length": 56, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "packet_count": 0, + "priority": 65535, + "table_id": 0 + } + }, + { + "OFPFlowStats": { + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115055000, + "duration_sec": 358, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 0, + "port": 4294967290, + "type": 0 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "length": 88, + "match": { + "OFPMatch": { + "length": 10, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + } + ], + "type": 1 + } + }, + "packet_count": 0, + "priority": 65534, + "table_id": 0 + } + }, + { + "OFPFlowStats": { + "byte_count": 238, + "cookie": 0, + "duration_nsec": 511582000, + "duration_sec": 316220, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 1, + "type": 1 + } + } + ], + "length": 80, + "match": { + "OFPMatch": { + "length": 22, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 6 + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "packet_count": 3, + "priority": 123, + "table_id": 0 + } + }, + { + "OFPFlowStats": { + "byte_count": 98, + "cookie": 0, + "duration_nsec": 980901000, + "duration_sec": 313499, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 4294967293, + "type": 0 + } + } + ], + "len": 24, + "type": 3 + } + } + ], + "length": 80, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "packet_count": 1, + "priority": 0, + "table_id": 0 + } + } + ], + "flags": 0, + "type": 1 + } +} diff --git a/tests/unit/ofproto/json/of12/3-13-ofp_echo_request.packet.json b/tests/unit/ofproto/json/of12/3-13-ofp_echo_request.packet.json new file mode 100644 index 00000000..e1f2af42 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-13-ofp_echo_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPEchoRequest": { + "data": "aG9nZQ==" + } +} diff --git a/tests/unit/ofproto/json/of12/3-14-ofp_echo_reply.packet.json b/tests/unit/ofproto/json/of12/3-14-ofp_echo_reply.packet.json new file mode 100644 index 00000000..2a573634 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-14-ofp_echo_reply.packet.json @@ -0,0 +1,5 @@ +{ + "OFPEchoReply": { + "data": "aG9nZQ==" + } +} diff --git a/tests/unit/ofproto/json/of12/3-15-ofp_error_msg.packet.json b/tests/unit/ofproto/json/of12/3-15-ofp_error_msg.packet.json new file mode 100644 index 00000000..e9ab2b5e --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-15-ofp_error_msg.packet.json @@ -0,0 +1,7 @@ +{ + "OFPErrorMsg": { + "code": 11, + "data": "ZnVnYWZ1Z2E=", + "type": 2 + } +} diff --git a/tests/unit/ofproto/json/of12/3-16-ofp_experimenter.packet.json b/tests/unit/ofproto/json/of12/3-16-ofp_experimenter.packet.json new file mode 100644 index 00000000..4ad13c73 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-16-ofp_experimenter.packet.json @@ -0,0 +1,7 @@ +{ + "OFPExperimenter": { + "data": "bmF6bw==", + "exp_type": 123456789, + "experimenter": 98765432 + } +} diff --git a/tests/unit/ofproto/json/of12/3-17-ofp_barrier_request.packet.json b/tests/unit/ofproto/json/of12/3-17-ofp_barrier_request.packet.json new file mode 100644 index 00000000..2aae9ec3 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-17-ofp_barrier_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPBarrierRequest": {} +} diff --git a/tests/unit/ofproto/json/of12/3-18-ofp_barrier_reply.packet.json b/tests/unit/ofproto/json/of12/3-18-ofp_barrier_reply.packet.json new file mode 100644 index 00000000..11f8cfcc --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-18-ofp_barrier_reply.packet.json @@ -0,0 +1,3 @@ +{ + "OFPBarrierReply": {} +} diff --git a/tests/unit/ofproto/json/of12/3-19-ofp_role_request.packet.json b/tests/unit/ofproto/json/of12/3-19-ofp_role_request.packet.json new file mode 100644 index 00000000..5cdbc2f1 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-19-ofp_role_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPRoleRequest": { + "generation_id": 17294086455919964160, + "role": 2 + } +} diff --git a/tests/unit/ofproto/json/of12/3-2-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of12/3-2-ofp_flow_mod.packet.json new file mode 100644 index 00000000..43e0e3c9 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-2-ofp_flow_mod.packet.json @@ -0,0 +1,82 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 258 + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 6, + "type": 0 + } + } + ], + "len": 40, + "type": 3 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "01:02:03:04:05:06" + } + }, + "len": 16, + "type": 25 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of12/3-20-ofp_role_reply.packet.json b/tests/unit/ofproto/json/of12/3-20-ofp_role_reply.packet.json new file mode 100644 index 00000000..3fd9a13f --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-20-ofp_role_reply.packet.json @@ -0,0 +1,6 @@ +{ + "OFPRoleReply": { + "generation_id": 17294086455919964160, + "role": 3 + } +} diff --git a/tests/unit/ofproto/json/of12/3-21-ofp_group_mod.packet.json b/tests/unit/ofproto/json/of12/3-21-ofp_group_mod.packet.json new file mode 100644 index 00000000..1a3767da --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-21-ofp_group_mod.packet.json @@ -0,0 +1,27 @@ +{ + "OFPGroupMod": { + "buckets": [ + { + "OFPBucket": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 2, + "type": 0 + } + } + ], + "len": 32, + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + } + ], + "command": 0, + "group_id": 1, + "type": 0 + } +} diff --git a/tests/unit/ofproto/json/of12/3-22-ofp_port_mod.packet.json b/tests/unit/ofproto/json/of12/3-22-ofp_port_mod.packet.json new file mode 100644 index 00000000..e334f5d8 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-22-ofp_port_mod.packet.json @@ -0,0 +1,9 @@ +{ + "OFPPortMod": { + "advertise": 4096, + "config": 0, + "hw_addr": "00-11-00-00-11-11", + "mask": 0, + "port_no": 1 + } +} diff --git a/tests/unit/ofproto/json/of12/3-23-ofp_table_mod.packet.json b/tests/unit/ofproto/json/of12/3-23-ofp_table_mod.packet.json new file mode 100644 index 00000000..5019c29b --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-23-ofp_table_mod.packet.json @@ -0,0 +1,6 @@ +{ + "OFPTableMod": { + "config": 0, + "table_id": 255 + } +} diff --git a/tests/unit/ofproto/json/of12/3-24-ofp_desc_stats_request.packet.json b/tests/unit/ofproto/json/of12/3-24-ofp_desc_stats_request.packet.json new file mode 100644 index 00000000..6129d409 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-24-ofp_desc_stats_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPDescStatsRequest": { + "flags": 0 + } +} diff --git a/tests/unit/ofproto/json/of12/3-25-ofp_aggregate_stats_request.packet.json b/tests/unit/ofproto/json/of12/3-25-ofp_aggregate_stats_request.packet.json new file mode 100644 index 00000000..cc3d76fd --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-25-ofp_aggregate_stats_request.packet.json @@ -0,0 +1,17 @@ +{ + "OFPAggregateStatsRequest": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 255 + } +} diff --git a/tests/unit/ofproto/json/of12/3-26-ofp_aggregate_stats_reply.packet.json b/tests/unit/ofproto/json/of12/3-26-ofp_aggregate_stats_reply.packet.json new file mode 100644 index 00000000..ed1473aa --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-26-ofp_aggregate_stats_reply.packet.json @@ -0,0 +1,13 @@ +{ + "OFPStatsReply": { + "body": { + "OFPAggregateStatsReply": { + "byte_count": 574, + "flow_count": 6, + "packet_count": 7 + } + }, + "flags": 0, + "type": 2 + } +} diff --git a/tests/unit/ofproto/json/of12/3-27-ofp_table_stats_request.packet.json b/tests/unit/ofproto/json/of12/3-27-ofp_table_stats_request.packet.json new file mode 100644 index 00000000..03adedd1 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-27-ofp_table_stats_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPTableStatsRequest": { + "flags": 0 + } +} diff --git a/tests/unit/ofproto/json/of12/3-28-ofp_table_stats_reply.packet.json b/tests/unit/ofproto/json/of12/3-28-ofp_table_stats_reply.packet.json new file mode 100644 index 00000000..7480fde4 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-28-ofp_table_stats_reply.packet.json @@ -0,0 +1,5108 @@ +{ + "OFPStatsReply": { + "body": [ + { + "OFPTableStats": { + "active_count": 4, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 4, + "match": 68719476733, + "matched_count": 4, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", + "table_id": 0, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 2, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 3, + "match": 68719476733, + "matched_count": 3, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x01", + "table_id": 1, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x02", + "table_id": 2, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x03", + "table_id": 3, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x04", + "table_id": 4, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x05", + "table_id": 5, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x06", + "table_id": 6, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x07", + "table_id": 7, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x08", + "table_id": 8, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x09", + "table_id": 9, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x0a", + "table_id": 10, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x0b", + "table_id": 11, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x0c", + "table_id": 12, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x0d", + "table_id": 13, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x0e", + "table_id": 14, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x0f", + "table_id": 15, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x10", + "table_id": 16, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x11", + "table_id": 17, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x12", + "table_id": 18, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x13", + "table_id": 19, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x14", + "table_id": 20, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x15", + "table_id": 21, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x16", + "table_id": 22, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x17", + "table_id": 23, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x18", + "table_id": 24, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x19", + "table_id": 25, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x1a", + "table_id": 26, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x1b", + "table_id": 27, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x1c", + "table_id": 28, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x1d", + "table_id": 29, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x1e", + "table_id": 30, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x1f", + "table_id": 31, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x20", + "table_id": 32, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x21", + "table_id": 33, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x22", + "table_id": 34, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x23", + "table_id": 35, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x24", + "table_id": 36, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x25", + "table_id": 37, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x26", + "table_id": 38, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x27", + "table_id": 39, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x28", + "table_id": 40, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x29", + "table_id": 41, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x2a", + "table_id": 42, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x2b", + "table_id": 43, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x2c", + "table_id": 44, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x2d", + "table_id": 45, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x2e", + "table_id": 46, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x2f", + "table_id": 47, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x30", + "table_id": 48, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x31", + "table_id": 49, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x32", + "table_id": 50, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x33", + "table_id": 51, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x34", + "table_id": 52, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x35", + "table_id": 53, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x36", + "table_id": 54, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x37", + "table_id": 55, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x38", + "table_id": 56, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x39", + "table_id": 57, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x3a", + "table_id": 58, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x3b", + "table_id": 59, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x3c", + "table_id": 60, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x3d", + "table_id": 61, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x3e", + "table_id": 62, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x3f", + "table_id": 63, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x40", + "table_id": 64, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x41", + "table_id": 65, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x42", + "table_id": 66, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x43", + "table_id": 67, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x44", + "table_id": 68, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x45", + "table_id": 69, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x46", + "table_id": 70, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x47", + "table_id": 71, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x48", + "table_id": 72, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x49", + "table_id": 73, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x4a", + "table_id": 74, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x4b", + "table_id": 75, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x4c", + "table_id": 76, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x4d", + "table_id": 77, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x4e", + "table_id": 78, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x4f", + "table_id": 79, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x50", + "table_id": 80, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x51", + "table_id": 81, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x52", + "table_id": 82, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x53", + "table_id": 83, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x54", + "table_id": 84, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x55", + "table_id": 85, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x56", + "table_id": 86, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x57", + "table_id": 87, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x58", + "table_id": 88, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x59", + "table_id": 89, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x5a", + "table_id": 90, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x5b", + "table_id": 91, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x5c", + "table_id": 92, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x5d", + "table_id": 93, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x5e", + "table_id": 94, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x5f", + "table_id": 95, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x60", + "table_id": 96, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x61", + "table_id": 97, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x62", + "table_id": 98, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x63", + "table_id": 99, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x64", + "table_id": 100, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x65", + "table_id": 101, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x66", + "table_id": 102, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x67", + "table_id": 103, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x68", + "table_id": 104, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x69", + "table_id": 105, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x6a", + "table_id": 106, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x6b", + "table_id": 107, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x6c", + "table_id": 108, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x6d", + "table_id": 109, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x6e", + "table_id": 110, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x6f", + "table_id": 111, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x70", + "table_id": 112, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x71", + "table_id": 113, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x72", + "table_id": 114, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x73", + "table_id": 115, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x74", + "table_id": 116, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x75", + "table_id": 117, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x76", + "table_id": 118, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x77", + "table_id": 119, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x78", + "table_id": 120, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x79", + "table_id": 121, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x7a", + "table_id": 122, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x7b", + "table_id": 123, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x7c", + "table_id": 124, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x7d", + "table_id": 125, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x7e", + "table_id": 126, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x7f", + "table_id": 127, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x80", + "table_id": 128, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x81", + "table_id": 129, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x82", + "table_id": 130, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x83", + "table_id": 131, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x84", + "table_id": 132, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x85", + "table_id": 133, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x86", + "table_id": 134, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x87", + "table_id": 135, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x88", + "table_id": 136, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x89", + "table_id": 137, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x8a", + "table_id": 138, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x8b", + "table_id": 139, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x8c", + "table_id": 140, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x8d", + "table_id": 141, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x8e", + "table_id": 142, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x8f", + "table_id": 143, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x90", + "table_id": 144, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x91", + "table_id": 145, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x92", + "table_id": 146, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x93", + "table_id": 147, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x94", + "table_id": 148, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x95", + "table_id": 149, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x96", + "table_id": 150, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x97", + "table_id": 151, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x98", + "table_id": 152, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x99", + "table_id": 153, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x9a", + "table_id": 154, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x9b", + "table_id": 155, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x9c", + "table_id": 156, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x9d", + "table_id": 157, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x9e", + "table_id": 158, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x9f", + "table_id": 159, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xa0", + "table_id": 160, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xa1", + "table_id": 161, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xa2", + "table_id": 162, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xa3", + "table_id": 163, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xa4", + "table_id": 164, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xa5", + "table_id": 165, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xa6", + "table_id": 166, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xa7", + "table_id": 167, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xa8", + "table_id": 168, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xa9", + "table_id": 169, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xaa", + "table_id": 170, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xab", + "table_id": 171, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xac", + "table_id": 172, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xad", + "table_id": 173, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xae", + "table_id": 174, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xaf", + "table_id": 175, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xb0", + "table_id": 176, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xb1", + "table_id": 177, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xb2", + "table_id": 178, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xb3", + "table_id": 179, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xb4", + "table_id": 180, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xb5", + "table_id": 181, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xb6", + "table_id": 182, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xb7", + "table_id": 183, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xb8", + "table_id": 184, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xb9", + "table_id": 185, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xba", + "table_id": 186, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xbb", + "table_id": 187, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xbc", + "table_id": 188, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xbd", + "table_id": 189, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xbe", + "table_id": 190, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xbf", + "table_id": 191, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xc0", + "table_id": 192, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xc1", + "table_id": 193, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xc2", + "table_id": 194, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xc3", + "table_id": 195, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xc4", + "table_id": 196, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xc5", + "table_id": 197, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xc6", + "table_id": 198, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xc7", + "table_id": 199, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xc8", + "table_id": 200, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xc9", + "table_id": 201, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xca", + "table_id": 202, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xcb", + "table_id": 203, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xcc", + "table_id": 204, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xcd", + "table_id": 205, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xce", + "table_id": 206, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xcf", + "table_id": 207, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xd0", + "table_id": 208, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xd1", + "table_id": 209, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xd2", + "table_id": 210, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xd3", + "table_id": 211, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xd4", + "table_id": 212, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xd5", + "table_id": 213, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xd6", + "table_id": 214, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xd7", + "table_id": 215, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xd8", + "table_id": 216, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xd9", + "table_id": 217, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xda", + "table_id": 218, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xdb", + "table_id": 219, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xdc", + "table_id": 220, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xdd", + "table_id": 221, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xde", + "table_id": 222, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xdf", + "table_id": 223, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xe0", + "table_id": 224, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xe1", + "table_id": 225, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xe2", + "table_id": 226, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xe3", + "table_id": 227, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xe4", + "table_id": 228, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xe5", + "table_id": 229, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xe6", + "table_id": 230, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xe7", + "table_id": 231, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xe8", + "table_id": 232, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xe9", + "table_id": 233, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xea", + "table_id": 234, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xeb", + "table_id": 235, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xec", + "table_id": 236, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xed", + "table_id": 237, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xee", + "table_id": 238, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xef", + "table_id": 239, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xf0", + "table_id": 240, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xf1", + "table_id": 241, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xf2", + "table_id": 242, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xf3", + "table_id": 243, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xf4", + "table_id": 244, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xf5", + "table_id": 245, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xf6", + "table_id": 246, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xf7", + "table_id": 247, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xf8", + "table_id": 248, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xf9", + "table_id": 249, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xfa", + "table_id": 250, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xfb", + "table_id": 251, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xfc", + "table_id": 252, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xfd", + "table_id": 253, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + }, + { + "OFPTableStats": { + "active_count": 0, + "apply_actions": 67082241, + "apply_setfields": 0, + "config": 0, + "instructions": 62, + "lookup_count": 0, + "match": 68719476733, + "matched_count": 0, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0xfe", + "table_id": 254, + "wildcards": 68719476733, + "write_actions": 67082241, + "write_setfields": 0 + } + } + ], + "flags": 0, + "type": 3 + } +} diff --git a/tests/unit/ofproto/json/of12/3-29-ofp_port_stats_request.packet.json b/tests/unit/ofproto/json/of12/3-29-ofp_port_stats_request.packet.json new file mode 100644 index 00000000..9a94ed8b --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-29-ofp_port_stats_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPPortStatsRequest": { + "flags": 0, + "port_no": 4294967295 + } +} diff --git a/tests/unit/ofproto/json/of12/3-3-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of12/3-3-ofp_flow_mod.packet.json new file mode 100644 index 00000000..cd68b51f --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-3-ofp_flow_mod.packet.json @@ -0,0 +1,46 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 1, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 22, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 6 + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 0 + } +} diff --git a/tests/unit/ofproto/json/of12/3-30-ofp_port_stats_reply.packet.json b/tests/unit/ofproto/json/of12/3-30-ofp_port_stats_reply.packet.json new file mode 100644 index 00000000..9afd8cd4 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-30-ofp_port_stats_reply.packet.json @@ -0,0 +1,42 @@ +{ + "OFPStatsReply": { + "body": [ + { + "OFPPortStats": { + "collisions": 0, + "port_no": 7, + "rx_bytes": 0, + "rx_crc_err": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "rx_packets": 0, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + }, + { + "OFPPortStats": { + "collisions": 0, + "port_no": 6, + "rx_bytes": 336, + "rx_crc_err": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "rx_packets": 4, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + } + ], + "flags": 0, + "type": 4 + } +} diff --git a/tests/unit/ofproto/json/of12/3-31-ofp_group_features_stats_request.packet.json b/tests/unit/ofproto/json/of12/3-31-ofp_group_features_stats_request.packet.json new file mode 100644 index 00000000..03974d3e --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-31-ofp_group_features_stats_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPGroupFeaturesStatsRequest": { + "flags": 0 + } +} diff --git a/tests/unit/ofproto/json/of12/3-32-ofp_group_features_stats_reply.packet.json b/tests/unit/ofproto/json/of12/3-32-ofp_group_features_stats_reply.packet.json new file mode 100644 index 00000000..7e867868 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-32-ofp_group_features_stats_reply.packet.json @@ -0,0 +1,25 @@ +{ + "OFPStatsReply": { + "body": { + "OFPGroupFeaturesStats": { + "actions": [ + 67082241, + 67082241, + 67082241, + 67082241 + ], + "capabilities": 5, + "length": 40, + "max_groups": [ + 16777216, + 16777216, + 16777216, + 16777216 + ], + "types": 15 + } + }, + "flags": 0, + "type": 8 + } +} diff --git a/tests/unit/ofproto/json/of12/3-33-ofp_group_desc_stats_request.packet.json b/tests/unit/ofproto/json/of12/3-33-ofp_group_desc_stats_request.packet.json new file mode 100644 index 00000000..e62fe9a0 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-33-ofp_group_desc_stats_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPGroupDescStatsRequest": { + "flags": 0 + } +} diff --git a/tests/unit/ofproto/json/of12/3-34-ofp_group_desc_stats_reply.packet.json b/tests/unit/ofproto/json/of12/3-34-ofp_group_desc_stats_reply.packet.json new file mode 100644 index 00000000..5166d1ce --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-34-ofp_group_desc_stats_reply.packet.json @@ -0,0 +1,35 @@ +{ + "OFPStatsReply": { + "body": [ + { + "OFPGroupDescStats": { + "buckets": [ + { + "OFPBucket": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 2, + "type": 0 + } + } + ], + "len": 32, + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + } + ], + "group_id": 1, + "length": 40, + "type": 0 + } + } + ], + "flags": 0, + "type": 7 + } +} diff --git a/tests/unit/ofproto/json/of12/3-35-ofp_queue_get_config_request.packet.json b/tests/unit/ofproto/json/of12/3-35-ofp_queue_get_config_request.packet.json new file mode 100644 index 00000000..a50308c0 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-35-ofp_queue_get_config_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPQueueGetConfigRequest": { + "port": 4294967295 + } +} diff --git a/tests/unit/ofproto/json/of12/3-36-ofp_queue_get_config_reply.packet.json b/tests/unit/ofproto/json/of12/3-36-ofp_queue_get_config_reply.packet.json new file mode 100644 index 00000000..7d0a7bbe --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-36-ofp_queue_get_config_reply.packet.json @@ -0,0 +1,53 @@ +{ + "OFPQueueGetConfigReply": { + "port": 4294967295, + "queues": [ + { + "OFPPacketQueue": { + "len": 48, + "port": 77, + "properties": [ + { + "OFPQueuePropMinRate": { + "len": 16, + "property": 1, + "rate": 10 + } + }, + { + "OFPQueuePropMaxRate": { + "len": 16, + "property": 2, + "rate": 900 + } + } + ], + "queue_id": 99 + } + }, + { + "OFPPacketQueue": { + "len": 48, + "port": 77, + "properties": [ + { + "OFPQueuePropMinRate": { + "len": 16, + "property": 1, + "rate": 100 + } + }, + { + "OFPQueuePropMaxRate": { + "len": 16, + "property": 2, + "rate": 200 + } + } + ], + "queue_id": 88 + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of12/3-37-ofp_queue_stats_request.packet.json b/tests/unit/ofproto/json/of12/3-37-ofp_queue_stats_request.packet.json new file mode 100644 index 00000000..5c7479d3 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-37-ofp_queue_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPQueueStatsRequest": { + "flags": 0, + "port_no": 4294967295, + "queue_id": 4294967295 + } +} diff --git a/tests/unit/ofproto/json/of12/3-38-ofp_queue_stats_reply.packet.json b/tests/unit/ofproto/json/of12/3-38-ofp_queue_stats_reply.packet.json new file mode 100644 index 00000000..fb21c96a --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-38-ofp_queue_stats_reply.packet.json @@ -0,0 +1,35 @@ +{ + "OFPStatsReply": { + "body": [ + { + "OFPQueueStats": { + "port_no": 7, + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + }, + { + "OFPQueueStats": { + "port_no": 6, + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + }, + { + "OFPQueueStats": { + "port_no": 7, + "queue_id": 2, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + } + ], + "flags": 0, + "type": 5 + } +} diff --git a/tests/unit/ofproto/json/of12/3-39-ofp_port_status.packet.json b/tests/unit/ofproto/json/of12/3-39-ofp_port_status.packet.json new file mode 100644 index 00000000..a842932e --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-39-ofp_port_status.packet.json @@ -0,0 +1,20 @@ +{ + "OFPPortStatus": { + "desc": { + "OFPPort": { + "advertised": 10240, + "config": 0, + "curr": 10248, + "curr_speed": 5000, + "hw_addr": "f2:0b:a4:d0:3f:70", + "max_speed": 5000, + "name": "\u79c1\u306e\u30dd\u30fc\u30c8", + "peer": 10248, + "port_no": 7, + "state": 4, + "supported": 10248 + } + }, + "reason": 0 + } +} diff --git a/tests/unit/ofproto/json/of12/3-4-ofp_packet_in.packet.json b/tests/unit/ofproto/json/of12/3-4-ofp_packet_in.packet.json new file mode 100644 index 00000000..b211934e --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-4-ofp_packet_in.packet.json @@ -0,0 +1,80 @@ +{ + "OFPPacketIn": { + "buffer_id": 2, + "data": "////////8gukffjqCAYAAQgABgQAAfILpH346goAAAEAAAAAAAAKAAAD", + "match": { + "OFPMatch": { + "length": 80, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 6 + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "ff:ff:ff:ff:ff:ff" + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_op", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "arp_spa", + "mask": null, + "value": "10.0.0.1" + } + }, + { + "OXMTlv": { + "field": "arp_tpa", + "mask": null, + "value": "10.0.0.3" + } + }, + { + "OXMTlv": { + "field": "arp_sha", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_tha", + "mask": null, + "value": "00:00:00:00:00:00" + } + } + ], + "type": 1 + } + }, + "reason": 1, + "table_id": 1, + "total_len": 42 + } +} diff --git a/tests/unit/ofproto/json/of12/3-40-ofp_flow_removed.packet.json b/tests/unit/ofproto/json/of12/3-40-ofp_flow_removed.packet.json new file mode 100644 index 00000000..994953e6 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-40-ofp_flow_removed.packet.json @@ -0,0 +1,29 @@ +{ + "OFPFlowRemoved": { + "byte_count": 86, + "cookie": 0, + "duration_nsec": 48825000, + "duration_sec": 3, + "hard_timeout": 0, + "idle_timeout": 3, + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "packet_count": 1, + "priority": 65535, + "reason": 0, + "table_id": 0 + } +} diff --git a/tests/unit/ofproto/json/of12/3-41-ofp_error_msg_experimenter.packet.json b/tests/unit/ofproto/json/of12/3-41-ofp_error_msg_experimenter.packet.json new file mode 100644 index 00000000..37bfb6a9 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-41-ofp_error_msg_experimenter.packet.json @@ -0,0 +1,8 @@ +{ + "OFPErrorExperimenterMsg": { + "data": "amlra2VuIGRhdGE=", + "exp_type": 60000, + "experimenter": 999999, + "type": 65535 + } +} diff --git a/tests/unit/ofproto/json/of12/3-5-ofp_features_request.packet.json b/tests/unit/ofproto/json/of12/3-5-ofp_features_request.packet.json new file mode 100644 index 00000000..8f48ad5a --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-5-ofp_features_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPFeaturesRequest": {} +} diff --git a/tests/unit/ofproto/json/of12/3-59-ofp_packet_in.packet.json b/tests/unit/ofproto/json/of12/3-59-ofp_packet_in.packet.json new file mode 100644 index 00000000..5b365a22 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-59-ofp_packet_in.packet.json @@ -0,0 +1,262 @@ +{ + "OFPPacketIn": { + "buffer_id": 4026531840, + "data": "", + "match": { + "OFPMatch": { + "length": 294, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 84281096 + } + }, + { + "OXMTlv": { + "field": "in_phy_port", + "mask": null, + "value": 16909060 + } + }, + { + "OXMTlv": { + "field": "metadata", + "mask": null, + "value": 283686952306183 + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "ff:ff:ff:ff:ff:ff" + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 999 + } + }, + { + "OXMTlv": { + "field": "ip_dscp", + "mask": null, + "value": 9 + } + }, + { + "OXMTlv": { + "field": "ip_ecn", + "mask": null, + "value": 3 + } + }, + { + "OXMTlv": { + "field": "ip_proto", + "mask": null, + "value": 99 + } + }, + { + "OXMTlv": { + "field": "ipv4_src", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "tcp_src", + "mask": null, + "value": 8080 + } + }, + { + "OXMTlv": { + "field": "tcp_dst", + "mask": null, + "value": 18080 + } + }, + { + "OXMTlv": { + "field": "udp_src", + "mask": null, + "value": 28080 + } + }, + { + "OXMTlv": { + "field": "udp_dst", + "mask": null, + "value": 55936 + } + }, + { + "OXMTlv": { + "field": "sctp_src", + "mask": null, + "value": 48080 + } + }, + { + "OXMTlv": { + "field": "sctp_dst", + "mask": null, + "value": 59328 + } + }, + { + "OXMTlv": { + "field": "icmpv4_type", + "mask": null, + "value": 100 + } + }, + { + "OXMTlv": { + "field": "icmpv4_code", + "mask": null, + "value": 101 + } + }, + { + "OXMTlv": { + "field": "arp_op", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "arp_spa", + "mask": null, + "value": "10.0.0.1" + } + }, + { + "OXMTlv": { + "field": "arp_tpa", + "mask": null, + "value": "10.0.0.3" + } + }, + { + "OXMTlv": { + "field": "arp_sha", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_tha", + "mask": null, + "value": "00:00:00:00:00:00" + } + }, + { + "OXMTlv": { + "field": "ipv6_src", + "mask": null, + "value": "fe80::f00b:a4ff:fe48:28a5" + } + }, + { + "OXMTlv": { + "field": "ipv6_dst", + "mask": null, + "value": "fe80::f00b:a4ff:fe05:b7dc" + } + }, + { + "OXMTlv": { + "field": "ipv6_flabel", + "mask": null, + "value": 541473 + } + }, + { + "OXMTlv": { + "field": "icmpv6_type", + "mask": null, + "value": 200 + } + }, + { + "OXMTlv": { + "field": "icmpv6_code", + "mask": null, + "value": 201 + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_target", + "mask": null, + "value": "fe80::a60:6eff:fe7f:74e7" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_sll", + "mask": null, + "value": "00:00:00:00:02:9a" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_tll", + "mask": null, + "value": "00:00:00:00:02:2b" + } + }, + { + "OXMTlv": { + "field": "mpls_label", + "mask": null, + "value": 624485 + } + }, + { + "OXMTlv": { + "field": "mpls_tc", + "mask": null, + "value": 5 + } + } + ], + "type": 1 + } + }, + "reason": 0, + "table_id": 200, + "total_len": 0 + } +} diff --git a/tests/unit/ofproto/json/of12/3-6-ofp_features_reply.packet.json b/tests/unit/ofproto/json/of12/3-6-ofp_features_reply.packet.json new file mode 100644 index 00000000..7b9233ac --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-6-ofp_features_reply.packet.json @@ -0,0 +1,40 @@ +{ + "OFPSwitchFeatures": { + "capabilities": 79, + "datapath_id": 9210263729383, + "n_buffers": 0, + "n_tables": 255, + "ports": { + "6": { + "OFPPort": { + "advertised": 10240, + "config": 0, + "curr": 10248, + "curr_speed": 5000, + "hw_addr": "f2:0b:a4:7d:f8:ea", + "max_speed": 5000, + "name": "Port6", + "peer": 10248, + "port_no": 6, + "state": 4, + "supported": 10248 + } + }, + "7": { + "OFPPort": { + "advertised": 10240, + "config": 0, + "curr": 10248, + "curr_speed": 5000, + "hw_addr": "f2:0b:a4:d0:3f:70", + "max_speed": 5000, + "name": "Port7", + "peer": 10248, + "port_no": 7, + "state": 4, + "supported": 10248 + } + } + } + } +} diff --git a/tests/unit/ofproto/json/of12/3-60-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of12/3-60-ofp_flow_mod.packet.json new file mode 100644 index 00000000..f5de7cef --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-60-ofp_flow_mod.packet.json @@ -0,0 +1,269 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [], + "match": { + "OFPMatch": { + "length": 294, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 84281096 + } + }, + { + "OXMTlv": { + "field": "in_phy_port", + "mask": null, + "value": 16909060 + } + }, + { + "OXMTlv": { + "field": "metadata", + "mask": null, + "value": 283686952306183 + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "ff:ff:ff:ff:ff:ff" + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 999 + } + }, + { + "OXMTlv": { + "field": "ip_dscp", + "mask": null, + "value": 9 + } + }, + { + "OXMTlv": { + "field": "ip_ecn", + "mask": null, + "value": 3 + } + }, + { + "OXMTlv": { + "field": "ip_proto", + "mask": null, + "value": 99 + } + }, + { + "OXMTlv": { + "field": "ipv4_src", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "tcp_src", + "mask": null, + "value": 8080 + } + }, + { + "OXMTlv": { + "field": "tcp_dst", + "mask": null, + "value": 18080 + } + }, + { + "OXMTlv": { + "field": "udp_src", + "mask": null, + "value": 28080 + } + }, + { + "OXMTlv": { + "field": "udp_dst", + "mask": null, + "value": 55936 + } + }, + { + "OXMTlv": { + "field": "sctp_src", + "mask": null, + "value": 48080 + } + }, + { + "OXMTlv": { + "field": "sctp_dst", + "mask": null, + "value": 59328 + } + }, + { + "OXMTlv": { + "field": "icmpv4_type", + "mask": null, + "value": 100 + } + }, + { + "OXMTlv": { + "field": "icmpv4_code", + "mask": null, + "value": 101 + } + }, + { + "OXMTlv": { + "field": "arp_op", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "arp_spa", + "mask": null, + "value": "10.0.0.1" + } + }, + { + "OXMTlv": { + "field": "arp_tpa", + "mask": null, + "value": "10.0.0.3" + } + }, + { + "OXMTlv": { + "field": "arp_sha", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_tha", + "mask": null, + "value": "00:00:00:00:00:00" + } + }, + { + "OXMTlv": { + "field": "ipv6_src", + "mask": null, + "value": "fe80::f00b:a4ff:fe48:28a5" + } + }, + { + "OXMTlv": { + "field": "ipv6_dst", + "mask": null, + "value": "fe80::f00b:a4ff:fe05:b7dc" + } + }, + { + "OXMTlv": { + "field": "ipv6_flabel", + "mask": null, + "value": 541473 + } + }, + { + "OXMTlv": { + "field": "icmpv6_type", + "mask": null, + "value": 200 + } + }, + { + "OXMTlv": { + "field": "icmpv6_code", + "mask": null, + "value": 201 + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_target", + "mask": null, + "value": "fe80::a60:6eff:fe7f:74e7" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_sll", + "mask": null, + "value": "00:00:00:00:02:9a" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_tll", + "mask": null, + "value": "00:00:00:00:02:2b" + } + }, + { + "OXMTlv": { + "field": "mpls_label", + "mask": null, + "value": 624485 + } + }, + { + "OXMTlv": { + "field": "mpls_tc", + "mask": null, + "value": 5 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of12/3-61-ofp_group_stats_request.packet.json b/tests/unit/ofproto/json/of12/3-61-ofp_group_stats_request.packet.json new file mode 100644 index 00000000..2d1afdc0 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-61-ofp_group_stats_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGroupStatsRequest": { + "flags": 0, + "group_id": 4294967292 + } +} diff --git a/tests/unit/ofproto/json/of12/3-62-ofp_group_stats_reply.packet.json b/tests/unit/ofproto/json/of12/3-62-ofp_group_stats_reply.packet.json new file mode 100644 index 00000000..8cb8f8ce --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-62-ofp_group_stats_reply.packet.json @@ -0,0 +1,25 @@ +{ + "OFPStatsReply": { + "body": [ + { + "OFPGroupStats": { + "bucket_counters": [ + { + "OFPBucketCounter": { + "byte_count": 2345, + "packet_count": 234 + } + } + ], + "byte_count": 12345, + "group_id": 1, + "length": 48, + "packet_count": 123, + "ref_count": 2 + } + } + ], + "flags": 0, + "type": 6 + } +} diff --git a/tests/unit/ofproto/json/of12/3-7-ofp_set_config.packet.json b/tests/unit/ofproto/json/of12/3-7-ofp_set_config.packet.json new file mode 100644 index 00000000..cd5398b7 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-7-ofp_set_config.packet.json @@ -0,0 +1,6 @@ +{ + "OFPSetConfig": { + "flags": 0, + "miss_send_len": 128 + } +} diff --git a/tests/unit/ofproto/json/of12/3-8-ofp_get_config_request.packet.json b/tests/unit/ofproto/json/of12/3-8-ofp_get_config_request.packet.json new file mode 100644 index 00000000..06fe51f4 --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-8-ofp_get_config_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPGetConfigRequest": {} +} diff --git a/tests/unit/ofproto/json/of12/3-9-ofp_get_config_reply.packet.json b/tests/unit/ofproto/json/of12/3-9-ofp_get_config_reply.packet.json new file mode 100644 index 00000000..62b37b4d --- /dev/null +++ b/tests/unit/ofproto/json/of12/3-9-ofp_get_config_reply.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGetConfigReply": { + "flags": 0, + "miss_send_len": 128 + } +} diff --git a/tests/unit/ofproto/json/of12/lib-ofctl-ofp_group_stats_request.packet.json b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_group_stats_request.packet.json new file mode 100644 index 00000000..542ae726 --- /dev/null +++ b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_group_stats_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGroupStatsRequest": { + "flags": 0, + "group_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of12/lib-ofctl-ofp_port_stats_request.packet.json b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_port_stats_request.packet.json new file mode 100644 index 00000000..884c5fd2 --- /dev/null +++ b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_port_stats_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPPortStatsRequest": { + "flags": 0, + "port_no": 7 + } +} diff --git a/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json new file mode 100644 index 00000000..a50308c0 --- /dev/null +++ b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_get_config_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPQueueGetConfigRequest": { + "port": 4294967295 + } +} diff --git a/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json new file mode 100644 index 00000000..77535806 --- /dev/null +++ b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet1.json @@ -0,0 +1,7 @@ +{ + "OFPQueueStatsRequest": { + "flags": 0, + "port_no": 7, + "queue_id": 4294967295 + } +} diff --git a/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json new file mode 100644 index 00000000..66127d31 --- /dev/null +++ b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet2.json @@ -0,0 +1,7 @@ +{ + "OFPQueueStatsRequest": { + "flags": 0, + "port_no": 7, + "queue_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json new file mode 100644 index 00000000..1a798837 --- /dev/null +++ b/tests/unit/ofproto/json/of12/lib-ofctl-ofp_queue_stats_request.packet3.json @@ -0,0 +1,7 @@ +{ + "OFPQueueStatsRequest": { + "flags": 0, + "port_no": 4294967295, + "queue_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet.json b/tests/unit/ofproto/json/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet.json new file mode 100644 index 00000000..b859650d --- /dev/null +++ b/tests/unit/ofproto/json/of12/libofproto-OFP12-ofp_packet_out_packet_library.packet.json @@ -0,0 +1,61 @@ +{ + "OFPPacketOut": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 4294967292, + "type": 0 + } + } + ], + "actions_len": 16, + "buffer_id": 4294967295, + "data": { + "Packet": { + "protocols": [ + { + "ethernet": { + "dst": "f2:0b:a4:d0:3f:70", + "ethertype": 2048, + "src": "f2:0b:a4:7d:f8:ea" + } + }, + { + "ipv4": { + "csum": 44939, + "dst": "10.0.0.2", + "flags": 0, + "header_length": 5, + "identification": 63514, + "offset": 0, + "option": null, + "proto": 1, + "src": "10.0.0.1", + "tos": 0, + "total_length": 84, + "ttl": 255, + "version": 4 + } + }, + { + "icmp": { + "code": 0, + "csum": 520, + "data": { + "echo": { + "data": "MdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", + "id": 63328, + "seq": 0 + } + }, + "type": 8 + } + } + ] + } + }, + "in_port": 4294967293 + } +} diff --git a/tests/unit/ofproto/json/of13/4-0-ofp_desc_reply.packet.json b/tests/unit/ofproto/json/of13/4-0-ofp_desc_reply.packet.json new file mode 100644 index 00000000..26e5dc2d --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-0-ofp_desc_reply.packet.json @@ -0,0 +1,15 @@ +{ + "OFPDescStatsReply": { + "body": { + "OFPDescStats": { + "dp_desc": "dp", + "hw_desc": "hw", + "mfr_desc": "mfr", + "serial_num": "serial", + "sw_desc": "sw" + } + }, + "flags": 0, + "type": 0 + } +} diff --git a/tests/unit/ofproto/json/of13/4-1-ofp_packet_out.packet.json b/tests/unit/ofproto/json/of13/4-1-ofp_packet_out.packet.json new file mode 100644 index 00000000..efb39e2d --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-1-ofp_packet_out.packet.json @@ -0,0 +1,18 @@ +{ + "OFPPacketOut": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 4294967292, + "type": 0 + } + } + ], + "actions_len": 16, + "buffer_id": 4294967295, + "data": "8guk0D9w8gukffjqCABFAABU+BoAAP8Br4sKAAABCgAAAggAAgj3YAAAMdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", + "in_port": 4294967293 + } +} diff --git a/tests/unit/ofproto/json/of13/4-10-ofp_hello.packet.json b/tests/unit/ofproto/json/of13/4-10-ofp_hello.packet.json new file mode 100644 index 00000000..d03ff84b --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-10-ofp_hello.packet.json @@ -0,0 +1,20 @@ +{ + "OFPHello": { + "elements": [ + { + "OFPHelloElemVersionBitmap": { + "length": 8, + "type": 1, + "versions": [ + 1, + 2, + 3, + 9, + 10, + 30 + ] + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of13/4-11-ofp_flow_stats_request.packet.json b/tests/unit/ofproto/json/of13/4-11-ofp_flow_stats_request.packet.json new file mode 100644 index 00000000..2baccad4 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-11-ofp_flow_stats_request.packet.json @@ -0,0 +1,18 @@ +{ + "OFPFlowStatsRequest": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 0, + "type": 1 + } +} diff --git a/tests/unit/ofproto/json/of13/4-12-ofp_flow_stats_reply.packet.json b/tests/unit/ofproto/json/of13/4-12-ofp_flow_stats_reply.packet.json new file mode 100644 index 00000000..04339dc3 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-12-ofp_flow_stats_reply.packet.json @@ -0,0 +1,343 @@ +{ + "OFPFlowStatsReply": { + "body": [ + { + "OFPFlowStats": { + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115277000, + "duration_sec": 358, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [], + "length": 56, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "packet_count": 0, + "priority": 65535, + "table_id": 0 + } + }, + { + "OFPFlowStats": { + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115055000, + "duration_sec": 358, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 0, + "port": 4294967290, + "type": 0 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "length": 88, + "match": { + "OFPMatch": { + "length": 10, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + } + ], + "type": 1 + } + }, + "packet_count": 0, + "priority": 65534, + "table_id": 0 + } + }, + { + "OFPFlowStats": { + "byte_count": 238, + "cookie": 0, + "duration_nsec": 511582000, + "duration_sec": 316220, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 1, + "type": 1 + } + } + ], + "length": 80, + "match": { + "OFPMatch": { + "length": 22, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 6 + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "packet_count": 3, + "priority": 123, + "table_id": 0 + } + }, + { + "OFPFlowStats": { + "byte_count": 98, + "cookie": 0, + "duration_nsec": 980901000, + "duration_sec": 313499, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 258 + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionCopyTtlOut": { + "len": 8, + "type": 11 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionPopPbb": { + "len": 8, + "type": 27 + } + }, + { + "OFPActionPushPbb": { + "ethertype": 4660, + "len": 8, + "type": 26 + } + }, + { + "OFPActionPopMpls": { + "ethertype": 39030, + "len": 8, + "type": 20 + } + }, + { + "OFPActionPushMpls": { + "ethertype": 34887, + "len": 8, + "type": 19 + } + }, + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionPushVlan": { + "ethertype": 33024, + "len": 8, + "type": 17 + } + }, + { + "OFPActionDecMplsTtl": { + "len": 8, + "type": 16 + } + }, + { + "OFPActionSetMplsTtl": { + "len": 8, + "mpls_ttl": 10, + "type": 15 + } + }, + { + "OFPActionDecNwTtl": { + "len": 8, + "type": 24 + } + }, + { + "OFPActionSetNwTtl": { + "len": 8, + "nw_ttl": 10, + "type": 23 + } + }, + { + "OFPActionSetQueue": { + "len": 8, + "queue_id": 3, + "type": 21 + } + }, + { + "OFPActionGroup": { + "group_id": 99, + "len": 8, + "type": 22 + } + }, + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 6, + "type": 0 + } + }, + { + "OFPActionExperimenterUnknown": { + "len": 16, + "data": "ZXhwX2RhdGE=", + "experimenter": 98765432, + "type": 65535 + } + }, + { + "NXActionUnknown": { + "len": 16, + "data": "cF9kYXRh", + "experimenter": 8992, + "type": 65535, + "subtype": 25976 + } + } + ], + "len": 192, + "type": 3 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "01:02:03:04:05:06" + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "pbb_uca", + "mask": null, + "value": 1 + } + }, + "len": 16, + "type": 25 + } + } + ], + "len": 40, + "type": 4 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 4294967293, + "type": 0 + } + } + ], + "len": 24, + "type": 3 + } + } + ], + "length": 312, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "packet_count": 1, + "priority": 0, + "table_id": 0 + } + } + ], + "flags": 0, + "type": 1 + } +} diff --git a/tests/unit/ofproto/json/of13/4-13-ofp_echo_request.packet.json b/tests/unit/ofproto/json/of13/4-13-ofp_echo_request.packet.json new file mode 100644 index 00000000..e1f2af42 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-13-ofp_echo_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPEchoRequest": { + "data": "aG9nZQ==" + } +} diff --git a/tests/unit/ofproto/json/of13/4-14-ofp_echo_reply.packet.json b/tests/unit/ofproto/json/of13/4-14-ofp_echo_reply.packet.json new file mode 100644 index 00000000..2a573634 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-14-ofp_echo_reply.packet.json @@ -0,0 +1,5 @@ +{ + "OFPEchoReply": { + "data": "aG9nZQ==" + } +} diff --git a/tests/unit/ofproto/json/of13/4-15-ofp_error_msg.packet.json b/tests/unit/ofproto/json/of13/4-15-ofp_error_msg.packet.json new file mode 100644 index 00000000..e9ab2b5e --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-15-ofp_error_msg.packet.json @@ -0,0 +1,7 @@ +{ + "OFPErrorMsg": { + "code": 11, + "data": "ZnVnYWZ1Z2E=", + "type": 2 + } +} diff --git a/tests/unit/ofproto/json/of13/4-16-ofp_experimenter.packet.json b/tests/unit/ofproto/json/of13/4-16-ofp_experimenter.packet.json new file mode 100644 index 00000000..4ad13c73 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-16-ofp_experimenter.packet.json @@ -0,0 +1,7 @@ +{ + "OFPExperimenter": { + "data": "bmF6bw==", + "exp_type": 123456789, + "experimenter": 98765432 + } +} diff --git a/tests/unit/ofproto/json/of13/4-17-ofp_barrier_request.packet.json b/tests/unit/ofproto/json/of13/4-17-ofp_barrier_request.packet.json new file mode 100644 index 00000000..2aae9ec3 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-17-ofp_barrier_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPBarrierRequest": {} +} diff --git a/tests/unit/ofproto/json/of13/4-18-ofp_barrier_reply.packet.json b/tests/unit/ofproto/json/of13/4-18-ofp_barrier_reply.packet.json new file mode 100644 index 00000000..11f8cfcc --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-18-ofp_barrier_reply.packet.json @@ -0,0 +1,3 @@ +{ + "OFPBarrierReply": {} +} diff --git a/tests/unit/ofproto/json/of13/4-19-ofp_role_request.packet.json b/tests/unit/ofproto/json/of13/4-19-ofp_role_request.packet.json new file mode 100644 index 00000000..5cdbc2f1 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-19-ofp_role_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPRoleRequest": { + "generation_id": 17294086455919964160, + "role": 2 + } +} diff --git a/tests/unit/ofproto/json/of13/4-2-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of13/4-2-ofp_flow_mod.packet.json new file mode 100644 index 00000000..0e3a2cc3 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-2-ofp_flow_mod.packet.json @@ -0,0 +1,201 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 258 + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionCopyTtlOut": { + "len": 8, + "type": 11 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionPopPbb": { + "len": 8, + "type": 27 + } + }, + { + "OFPActionPushPbb": { + "ethertype": 4660, + "len": 8, + "type": 26 + } + }, + { + "OFPActionPopMpls": { + "ethertype": 39030, + "len": 8, + "type": 20 + } + }, + { + "OFPActionPushMpls": { + "ethertype": 34887, + "len": 8, + "type": 19 + } + }, + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionPushVlan": { + "ethertype": 33024, + "len": 8, + "type": 17 + } + }, + { + "OFPActionDecMplsTtl": { + "len": 8, + "type": 16 + } + }, + { + "OFPActionSetMplsTtl": { + "len": 8, + "mpls_ttl": 10, + "type": 15 + } + }, + { + "OFPActionDecNwTtl": { + "len": 8, + "type": 24 + } + }, + { + "OFPActionSetNwTtl": { + "len": 8, + "nw_ttl": 10, + "type": 23 + } + }, + { + "OFPActionExperimenterUnknown": { + "data": "AAECAwQFBgc=", + "experimenter": 101, + "len": 16, + "type": 65535 + } + }, + { + "OFPActionSetQueue": { + "len": 8, + "queue_id": 3, + "type": 21 + } + }, + { + "OFPActionGroup": { + "group_id": 99, + "len": 8, + "type": 22 + } + }, + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 6, + "type": 0 + } + } + ], + "len": 176, + "type": 3 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "01:02:03:04:05:06" + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "pbb_uca", + "mask": null, + "value": 1 + } + }, + "len": 16, + "type": 25 + } + } + ], + "len": 40, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of13/4-20-ofp_role_reply.packet.json b/tests/unit/ofproto/json/of13/4-20-ofp_role_reply.packet.json new file mode 100644 index 00000000..3fd9a13f --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-20-ofp_role_reply.packet.json @@ -0,0 +1,6 @@ +{ + "OFPRoleReply": { + "generation_id": 17294086455919964160, + "role": 3 + } +} diff --git a/tests/unit/ofproto/json/of13/4-21-ofp_group_mod.packet.json b/tests/unit/ofproto/json/of13/4-21-ofp_group_mod.packet.json new file mode 100644 index 00000000..1a3767da --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-21-ofp_group_mod.packet.json @@ -0,0 +1,27 @@ +{ + "OFPGroupMod": { + "buckets": [ + { + "OFPBucket": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 2, + "type": 0 + } + } + ], + "len": 32, + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + } + ], + "command": 0, + "group_id": 1, + "type": 0 + } +} diff --git a/tests/unit/ofproto/json/of13/4-22-ofp_port_mod.packet.json b/tests/unit/ofproto/json/of13/4-22-ofp_port_mod.packet.json new file mode 100644 index 00000000..ecb8d66f --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-22-ofp_port_mod.packet.json @@ -0,0 +1,9 @@ +{ + "OFPPortMod": { + "advertise": 4096, + "config": 0, + "hw_addr": "00:11:00:00:11:11", + "mask": 0, + "port_no": 1 + } +} diff --git a/tests/unit/ofproto/json/of13/4-23-ofp_table_mod.packet.json b/tests/unit/ofproto/json/of13/4-23-ofp_table_mod.packet.json new file mode 100644 index 00000000..5019c29b --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-23-ofp_table_mod.packet.json @@ -0,0 +1,6 @@ +{ + "OFPTableMod": { + "config": 0, + "table_id": 255 + } +} diff --git a/tests/unit/ofproto/json/of13/4-24-ofp_desc_request.packet.json b/tests/unit/ofproto/json/of13/4-24-ofp_desc_request.packet.json new file mode 100644 index 00000000..5b23f8bc --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-24-ofp_desc_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPDescStatsRequest": { + "flags": 0, + "type": 0 + } +} diff --git a/tests/unit/ofproto/json/of13/4-25-ofp_aggregate_stats_request.packet.json b/tests/unit/ofproto/json/of13/4-25-ofp_aggregate_stats_request.packet.json new file mode 100644 index 00000000..248131fd --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-25-ofp_aggregate_stats_request.packet.json @@ -0,0 +1,18 @@ +{ + "OFPAggregateStatsRequest": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 255, + "type": 2 + } +} diff --git a/tests/unit/ofproto/json/of13/4-26-ofp_aggregate_stats_reply.packet.json b/tests/unit/ofproto/json/of13/4-26-ofp_aggregate_stats_reply.packet.json new file mode 100644 index 00000000..153ad4f0 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-26-ofp_aggregate_stats_reply.packet.json @@ -0,0 +1,13 @@ +{ + "OFPAggregateStatsReply": { + "body": { + "OFPAggregateStats": { + "byte_count": 574, + "flow_count": 6, + "packet_count": 7 + } + }, + "flags": 0, + "type": 2 + } +} diff --git a/tests/unit/ofproto/json/of13/4-27-ofp_table_stats_request.packet.json b/tests/unit/ofproto/json/of13/4-27-ofp_table_stats_request.packet.json new file mode 100644 index 00000000..1f965d77 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-27-ofp_table_stats_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPTableStatsRequest": { + "flags": 0, + "type": 3 + } +} diff --git a/tests/unit/ofproto/json/of13/4-28-ofp_table_stats_reply.packet.json b/tests/unit/ofproto/json/of13/4-28-ofp_table_stats_reply.packet.json new file mode 100644 index 00000000..94801adb --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-28-ofp_table_stats_reply.packet.json @@ -0,0 +1,24 @@ +{ + "OFPTableStatsReply": { + "body": [ + { + "OFPTableStats": { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 0 + } + }, + { + "OFPTableStats": { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 1 + } + } + ], + "flags": 0, + "type": 3 + } +} diff --git a/tests/unit/ofproto/json/of13/4-29-ofp_port_stats_request.packet.json b/tests/unit/ofproto/json/of13/4-29-ofp_port_stats_request.packet.json new file mode 100644 index 00000000..5228710d --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-29-ofp_port_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPPortStatsRequest": { + "flags": 0, + "port_no": 4294967295, + "type": 4 + } +} diff --git a/tests/unit/ofproto/json/of13/4-3-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of13/4-3-ofp_flow_mod.packet.json new file mode 100644 index 00000000..cd68b51f --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-3-ofp_flow_mod.packet.json @@ -0,0 +1,46 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 1, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 22, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 6 + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 0 + } +} diff --git a/tests/unit/ofproto/json/of13/4-30-ofp_port_stats_reply.packet.json b/tests/unit/ofproto/json/of13/4-30-ofp_port_stats_reply.packet.json new file mode 100644 index 00000000..01157449 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-30-ofp_port_stats_reply.packet.json @@ -0,0 +1,46 @@ +{ + "OFPPortStatsReply": { + "body": [ + { + "OFPPortStats": { + "collisions": 0, + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 7, + "rx_bytes": 0, + "rx_crc_err": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "rx_packets": 0, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + }, + { + "OFPPortStats": { + "collisions": 0, + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 6, + "rx_bytes": 336, + "rx_crc_err": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "rx_packets": 4, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + } + ], + "flags": 0, + "type": 4 + } +} diff --git a/tests/unit/ofproto/json/of13/4-31-ofp_group_features_request.packet.json b/tests/unit/ofproto/json/of13/4-31-ofp_group_features_request.packet.json new file mode 100644 index 00000000..edba5dc5 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-31-ofp_group_features_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGroupFeaturesStatsRequest": { + "flags": 0, + "type": 8 + } +} diff --git a/tests/unit/ofproto/json/of13/4-32-ofp_group_features_reply.packet.json b/tests/unit/ofproto/json/of13/4-32-ofp_group_features_reply.packet.json new file mode 100644 index 00000000..f059f994 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-32-ofp_group_features_reply.packet.json @@ -0,0 +1,24 @@ +{ + "OFPGroupFeaturesStatsReply": { + "body": { + "OFPGroupFeaturesStats": { + "actions": [ + 67082241, + 67082241, + 67082241, + 67082241 + ], + "capabilities": 5, + "max_groups": [ + 16777216, + 16777216, + 16777216, + 16777216 + ], + "types": 15 + } + }, + "flags": 0, + "type": 8 + } +} diff --git a/tests/unit/ofproto/json/of13/4-33-ofp_group_desc_request.packet.json b/tests/unit/ofproto/json/of13/4-33-ofp_group_desc_request.packet.json new file mode 100644 index 00000000..bea140c2 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-33-ofp_group_desc_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGroupDescStatsRequest": { + "flags": 0, + "type": 7 + } +} diff --git a/tests/unit/ofproto/json/of13/4-34-ofp_group_desc_reply.packet.json b/tests/unit/ofproto/json/of13/4-34-ofp_group_desc_reply.packet.json new file mode 100644 index 00000000..c30d7da6 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-34-ofp_group_desc_reply.packet.json @@ -0,0 +1,35 @@ +{ + "OFPGroupDescStatsReply": { + "body": [ + { + "OFPGroupDescStats": { + "buckets": [ + { + "OFPBucket": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 2, + "type": 0 + } + } + ], + "len": 32, + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + } + ], + "group_id": 1, + "length": 40, + "type": 0 + } + } + ], + "flags": 0, + "type": 7 + } +} diff --git a/tests/unit/ofproto/json/of13/4-35-ofp_queue_get_config_request.packet.json b/tests/unit/ofproto/json/of13/4-35-ofp_queue_get_config_request.packet.json new file mode 100644 index 00000000..a50308c0 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-35-ofp_queue_get_config_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPQueueGetConfigRequest": { + "port": 4294967295 + } +} diff --git a/tests/unit/ofproto/json/of13/4-36-ofp_queue_get_config_reply.packet.json b/tests/unit/ofproto/json/of13/4-36-ofp_queue_get_config_reply.packet.json new file mode 100644 index 00000000..ce1f4123 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-36-ofp_queue_get_config_reply.packet.json @@ -0,0 +1,105 @@ +{ + "OFPQueueGetConfigReply": { + "port": 4294967295, + "queues": [ + { + "OFPPacketQueue": { + "len": 64, + "port": 77, + "properties": [ + { + "OFPQueuePropMinRate": { + "len": 16, + "property": 1, + "rate": 10 + } + }, + { + "OFPQueuePropMaxRate": { + "len": 16, + "property": 2, + "rate": 900 + } + }, + { + "OFPQueuePropExperimenter": { + "data": [], + "experimenter": 999, + "len": 16, + "property": 65535 + } + } + ], + "queue_id": 99 + } + }, + { + "OFPPacketQueue": { + "len": 65, + "port": 77, + "properties": [ + { + "OFPQueuePropMinRate": { + "len": 16, + "property": 1, + "rate": 100 + } + }, + { + "OFPQueuePropMaxRate": { + "len": 16, + "property": 2, + "rate": 200 + } + }, + { + "OFPQueuePropExperimenter": { + "experimenter": 999, + "data": [ + 1 + ], + "len": 17, + "property": 65535 + } + } + ], + "queue_id": 88 + } + }, + { + "OFPPacketQueue": { + "len": 66, + "port": 77, + "properties": [ + { + "OFPQueuePropMinRate": { + "len": 16, + "property": 1, + "rate": 200 + } + }, + { + "OFPQueuePropMaxRate": { + "len": 16, + "property": 2, + "rate": 400 + } + }, + { + "OFPQueuePropExperimenter": { + "experimenter": 999, + "data": [ + 1, + 2 + ], + "len": 18, + "property": 65535 + } + } + ], + "queue_id": 77 + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of13/4-37-ofp_queue_stats_request.packet.json b/tests/unit/ofproto/json/of13/4-37-ofp_queue_stats_request.packet.json new file mode 100644 index 00000000..7a12acc3 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-37-ofp_queue_stats_request.packet.json @@ -0,0 +1,8 @@ +{ + "OFPQueueStatsRequest": { + "flags": 0, + "port_no": 4294967295, + "queue_id": 4294967295, + "type": 5 + } +} diff --git a/tests/unit/ofproto/json/of13/4-38-ofp_queue_stats_reply.packet.json b/tests/unit/ofproto/json/of13/4-38-ofp_queue_stats_reply.packet.json new file mode 100644 index 00000000..80b59cf2 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-38-ofp_queue_stats_reply.packet.json @@ -0,0 +1,41 @@ +{ + "OFPQueueStatsReply": { + "body": [ + { + "OFPQueueStats": { + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 7, + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + }, + { + "OFPQueueStats": { + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 6, + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + }, + { + "OFPQueueStats": { + "duration_nsec": 0, + "duration_sec": 0, + "port_no": 7, + "queue_id": 2, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + } + ], + "flags": 0, + "type": 5 + } +} diff --git a/tests/unit/ofproto/json/of13/4-39-ofp_port_status.packet.json b/tests/unit/ofproto/json/of13/4-39-ofp_port_status.packet.json new file mode 100644 index 00000000..a842932e --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-39-ofp_port_status.packet.json @@ -0,0 +1,20 @@ +{ + "OFPPortStatus": { + "desc": { + "OFPPort": { + "advertised": 10240, + "config": 0, + "curr": 10248, + "curr_speed": 5000, + "hw_addr": "f2:0b:a4:d0:3f:70", + "max_speed": 5000, + "name": "\u79c1\u306e\u30dd\u30fc\u30c8", + "peer": 10248, + "port_no": 7, + "state": 4, + "supported": 10248 + } + }, + "reason": 0 + } +} diff --git a/tests/unit/ofproto/json/of13/4-4-ofp_packet_in.packet.json b/tests/unit/ofproto/json/of13/4-4-ofp_packet_in.packet.json new file mode 100644 index 00000000..b3051d1c --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-4-ofp_packet_in.packet.json @@ -0,0 +1,81 @@ +{ + "OFPPacketIn": { + "buffer_id": 2, + "cookie": 283686884868096, + "data": "////////8gukffjqCAYAAQgABgQAAfILpH346goAAAEAAAAAAAAKAAAD", + "match": { + "OFPMatch": { + "length": 80, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 6 + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "ff:ff:ff:ff:ff:ff" + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_op", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "arp_spa", + "mask": null, + "value": "10.0.0.1" + } + }, + { + "OXMTlv": { + "field": "arp_tpa", + "mask": null, + "value": "10.0.0.3" + } + }, + { + "OXMTlv": { + "field": "arp_sha", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_tha", + "mask": null, + "value": "00:00:00:00:00:00" + } + } + ], + "type": 1 + } + }, + "reason": 1, + "table_id": 1, + "total_len": 42 + } +} diff --git a/tests/unit/ofproto/json/of13/4-40-ofp_flow_removed.packet.json b/tests/unit/ofproto/json/of13/4-40-ofp_flow_removed.packet.json new file mode 100644 index 00000000..994953e6 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-40-ofp_flow_removed.packet.json @@ -0,0 +1,29 @@ +{ + "OFPFlowRemoved": { + "byte_count": 86, + "cookie": 0, + "duration_nsec": 48825000, + "duration_sec": 3, + "hard_timeout": 0, + "idle_timeout": 3, + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "packet_count": 1, + "priority": 65535, + "reason": 0, + "table_id": 0 + } +} diff --git a/tests/unit/ofproto/json/of13/4-41-ofp_error_msg_experimenter.packet.json b/tests/unit/ofproto/json/of13/4-41-ofp_error_msg_experimenter.packet.json new file mode 100644 index 00000000..37bfb6a9 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-41-ofp_error_msg_experimenter.packet.json @@ -0,0 +1,8 @@ +{ + "OFPErrorExperimenterMsg": { + "data": "amlra2VuIGRhdGE=", + "exp_type": 60000, + "experimenter": 999999, + "type": 65535 + } +} diff --git a/tests/unit/ofproto/json/of13/4-42-ofp_get_async_request.packet.json b/tests/unit/ofproto/json/of13/4-42-ofp_get_async_request.packet.json new file mode 100644 index 00000000..7daa5a0f --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-42-ofp_get_async_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPGetAsyncRequest": {} +} diff --git a/tests/unit/ofproto/json/of13/4-43-ofp_get_async_reply.packet.json b/tests/unit/ofproto/json/of13/4-43-ofp_get_async_reply.packet.json new file mode 100644 index 00000000..abccf043 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-43-ofp_get_async_reply.packet.json @@ -0,0 +1,16 @@ +{ + "OFPGetAsyncReply": { + "flow_removed_mask": [ + 15, + 3 + ], + "packet_in_mask": [ + 5, + 1 + ], + "port_status_mask": [ + 7, + 3 + ] + } +} diff --git a/tests/unit/ofproto/json/of13/4-44-ofp_set_async.packet.json b/tests/unit/ofproto/json/of13/4-44-ofp_set_async.packet.json new file mode 100644 index 00000000..da85b880 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-44-ofp_set_async.packet.json @@ -0,0 +1,16 @@ +{ + "OFPSetAsync": { + "flow_removed_mask": [ + 15, + 3 + ], + "packet_in_mask": [ + 5, + 1 + ], + "port_status_mask": [ + 7, + 3 + ] + } +} diff --git a/tests/unit/ofproto/json/of13/4-45-ofp_meter_mod.packet.json b/tests/unit/ofproto/json/of13/4-45-ofp_meter_mod.packet.json new file mode 100644 index 00000000..eba4540a --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-45-ofp_meter_mod.packet.json @@ -0,0 +1,35 @@ +{ + "OFPMeterMod": { + "bands": [ + { + "OFPMeterBandDrop": { + "burst_size": 10, + "len": 16, + "rate": 1000, + "type": 1 + } + }, + { + "OFPMeterBandDscpRemark": { + "burst_size": 10, + "len": 16, + "prec_level": 1, + "rate": 1000, + "type": 2 + } + }, + { + "OFPMeterBandExperimenter": { + "burst_size": 10, + "experimenter": 999, + "len": 16, + "rate": 1000, + "type": 65535 + } + } + ], + "command": 0, + "flags": 14, + "meter_id": 100 + } +} diff --git a/tests/unit/ofproto/json/of13/4-46-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of13/4-46-ofp_flow_mod.packet.json new file mode 100644 index 00000000..f4e59c76 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-46-ofp_flow_mod.packet.json @@ -0,0 +1,55 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionMeter": { + "len": 8, + "meter_id": 1, + "type": 6 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 6, + "type": 0 + } + } + ], + "len": 24, + "type": 3 + } + } + ], + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of13/4-47-ofp_meter_config_request.packet.json b/tests/unit/ofproto/json/of13/4-47-ofp_meter_config_request.packet.json new file mode 100644 index 00000000..4703588e --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-47-ofp_meter_config_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPMeterConfigStatsRequest": { + "flags": 0, + "meter_id": 4294967295, + "type": 10 + } +} diff --git a/tests/unit/ofproto/json/of13/4-48-ofp_meter_config_reply.packet.json b/tests/unit/ofproto/json/of13/4-48-ofp_meter_config_reply.packet.json new file mode 100644 index 00000000..08cc97e6 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-48-ofp_meter_config_reply.packet.json @@ -0,0 +1,25 @@ +{ + "OFPMeterConfigStatsReply": { + "body": [ + { + "OFPMeterConfigStats": { + "bands": [ + { + "OFPMeterBandDrop": { + "burst_size": 10, + "len": 16, + "rate": 1000, + "type": 1 + } + } + ], + "flags": 14, + "length": 24, + "meter_id": 100 + } + } + ], + "flags": 0, + "type": 10 + } +} diff --git a/tests/unit/ofproto/json/of13/4-49-ofp_meter_stats_request.packet.json b/tests/unit/ofproto/json/of13/4-49-ofp_meter_stats_request.packet.json new file mode 100644 index 00000000..8d45799b --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-49-ofp_meter_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPMeterStatsRequest": { + "flags": 0, + "meter_id": 4294967295, + "type": 9 + } +} diff --git a/tests/unit/ofproto/json/of13/4-5-ofp_features_request.packet.json b/tests/unit/ofproto/json/of13/4-5-ofp_features_request.packet.json new file mode 100644 index 00000000..8f48ad5a --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-5-ofp_features_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPFeaturesRequest": {} +} diff --git a/tests/unit/ofproto/json/of13/4-50-ofp_meter_stats_reply.packet.json b/tests/unit/ofproto/json/of13/4-50-ofp_meter_stats_reply.packet.json new file mode 100644 index 00000000..b4fd8226 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-50-ofp_meter_stats_reply.packet.json @@ -0,0 +1,27 @@ +{ + "OFPMeterStatsReply": { + "body": [ + { + "OFPMeterStats": { + "band_stats": [ + { + "OFPMeterBandStats": { + "byte_band_count": 0, + "packet_band_count": 0 + } + } + ], + "byte_in_count": 0, + "duration_nsec": 480000, + "duration_sec": 0, + "flow_count": 0, + "len": 56, + "meter_id": 100, + "packet_in_count": 0 + } + } + ], + "flags": 0, + "type": 9 + } +} diff --git a/tests/unit/ofproto/json/of13/4-51-ofp_meter_features_request.packet.json b/tests/unit/ofproto/json/of13/4-51-ofp_meter_features_request.packet.json new file mode 100644 index 00000000..7363a342 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-51-ofp_meter_features_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPMeterFeaturesStatsRequest": { + "flags": 0, + "type": 11 + } +} diff --git a/tests/unit/ofproto/json/of13/4-52-ofp_meter_features_reply.packet.json b/tests/unit/ofproto/json/of13/4-52-ofp_meter_features_reply.packet.json new file mode 100644 index 00000000..e3f6918f --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-52-ofp_meter_features_reply.packet.json @@ -0,0 +1,17 @@ +{ + "OFPMeterFeaturesStatsReply": { + "body": [ + { + "OFPMeterFeaturesStats": { + "band_types": 2147483654, + "capabilities": 15, + "max_bands": 255, + "max_color": 0, + "max_meter": 16777216 + } + } + ], + "flags": 0, + "type": 11 + } +} diff --git a/tests/unit/ofproto/json/of13/4-53-ofp_port_desc_request.packet.json b/tests/unit/ofproto/json/of13/4-53-ofp_port_desc_request.packet.json new file mode 100644 index 00000000..f166c34a --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-53-ofp_port_desc_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPPortDescStatsRequest": { + "flags": 0, + "type": 13 + } +} diff --git a/tests/unit/ofproto/json/of13/4-54-ofp_port_desc_reply.packet.json b/tests/unit/ofproto/json/of13/4-54-ofp_port_desc_reply.packet.json new file mode 100644 index 00000000..5da460a0 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-54-ofp_port_desc_reply.packet.json @@ -0,0 +1,38 @@ +{ + "OFPPortDescStatsReply": { + "body": [ + { + "OFPPort": { + "advertised": 10240, + "config": 0, + "curr": 10248, + "curr_speed": 5000, + "hw_addr": "f2:0b:a4:d0:3f:70", + "max_speed": 5000, + "name": "Port7", + "peer": 10248, + "port_no": 7, + "state": 4, + "supported": 10248 + } + }, + { + "OFPPort": { + "advertised": 10240, + "config": 0, + "curr": 10248, + "curr_speed": 5000, + "hw_addr": "f2:0b:a4:7d:f8:ea", + "max_speed": 5000, + "name": "Port6", + "peer": 10248, + "port_no": 6, + "state": 4, + "supported": 10248 + } + } + ], + "flags": 0, + "type": 13 + } +} diff --git a/tests/unit/ofproto/json/of13/4-55-ofp_table_features_request.packet.json b/tests/unit/ofproto/json/of13/4-55-ofp_table_features_request.packet.json new file mode 100644 index 00000000..2a1a4308 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-55-ofp_table_features_request.packet.json @@ -0,0 +1,15945 @@ +{ + "OFPTableFeaturesStatsRequest": { + "body": [ + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1168, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x00", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 258, + "table_ids": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65534 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65534 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65534 + } + } + ], + "table_id": 0 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1112, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x01", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 257, + "table_ids": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 1 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x02", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 256, + "table_ids": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 2 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x03", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 255, + "table_ids": [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 3 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x04", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 254, + "table_ids": [ + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 4 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x05", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 253, + "table_ids": [ + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 5 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x06", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 252, + "table_ids": [ + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 6 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x07", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 251, + "table_ids": [ + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 7 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x08", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 250, + "table_ids": [ + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 8 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x09", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 249, + "table_ids": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 9 + } + } + ], + "flags": 1, + "type": 12 + } +} diff --git a/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json b/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json new file mode 100644 index 00000000..ea056e8f --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-56-ofp_table_features_reply.packet.json @@ -0,0 +1,15945 @@ +{ + "OFPTableFeaturesStatsReply": { + "body": [ + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1168, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 258, + "table_ids": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65534 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65534 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65534 + } + } + ], + "table_id": 0 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1112, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x01", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 257, + "table_ids": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 1 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x02", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 256, + "table_ids": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 2 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x03", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 255, + "table_ids": [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 3 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x04", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 254, + "table_ids": [ + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 4 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x05", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 253, + "table_ids": [ + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 5 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x06", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 252, + "table_ids": [ + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 6 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x07", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 251, + "table_ids": [ + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 7 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x08", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 250, + "table_ids": [ + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 8 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x09", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 249, + "table_ids": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 9 + } + } + ], + "flags": 1, + "type": 12 + } +} diff --git a/tests/unit/ofproto/json/of13/4-57-ofp_group_stats_request.packet.json b/tests/unit/ofproto/json/of13/4-57-ofp_group_stats_request.packet.json new file mode 100644 index 00000000..b200a81c --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-57-ofp_group_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPGroupStatsRequest": { + "flags": 0, + "group_id": 4294967292, + "type": 6 + } +} diff --git a/tests/unit/ofproto/json/of13/4-58-ofp_group_stats_reply.packet.json b/tests/unit/ofproto/json/of13/4-58-ofp_group_stats_reply.packet.json new file mode 100644 index 00000000..cb979e54 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-58-ofp_group_stats_reply.packet.json @@ -0,0 +1,27 @@ +{ + "OFPGroupStatsReply": { + "body": [ + { + "OFPGroupStats": { + "bucket_stats": [ + { + "OFPBucketCounter": { + "byte_count": 2345, + "packet_count": 234 + } + } + ], + "byte_count": 12345, + "duration_nsec": 609036000, + "duration_sec": 9, + "group_id": 1, + "length": 56, + "packet_count": 123, + "ref_count": 2 + } + } + ], + "flags": 0, + "type": 6 + } +} diff --git a/tests/unit/ofproto/json/of13/4-59-ofp_packet_in.packet.json b/tests/unit/ofproto/json/of13/4-59-ofp_packet_in.packet.json new file mode 100644 index 00000000..c5837d26 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-59-ofp_packet_in.packet.json @@ -0,0 +1,312 @@ +{ + "OFPPacketIn": { + "buffer_id": 4026531840, + "cookie": 283686884868096, + "data": "", + "match": { + "OFPMatch": { + "length": 351, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 84281096 + } + }, + { + "OXMTlv": { + "field": "in_phy_port", + "mask": null, + "value": 16909060 + } + }, + { + "OXMTlv": { + "field": "metadata", + "mask": null, + "value": 283686952306183 + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "ff:ff:ff:ff:ff:ff" + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 999 + } + }, + { + "OXMTlv": { + "field": "ip_dscp", + "mask": null, + "value": 9 + } + }, + { + "OXMTlv": { + "field": "ip_ecn", + "mask": null, + "value": 3 + } + }, + { + "OXMTlv": { + "field": "ip_proto", + "mask": null, + "value": 99 + } + }, + { + "OXMTlv": { + "field": "ipv4_src", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "tcp_src", + "mask": null, + "value": 8080 + } + }, + { + "OXMTlv": { + "field": "tcp_dst", + "mask": null, + "value": 18080 + } + }, + { + "OXMTlv": { + "field": "udp_src", + "mask": null, + "value": 28080 + } + }, + { + "OXMTlv": { + "field": "udp_dst", + "mask": null, + "value": 55936 + } + }, + { + "OXMTlv": { + "field": "sctp_src", + "mask": null, + "value": 48080 + } + }, + { + "OXMTlv": { + "field": "sctp_dst", + "mask": null, + "value": 59328 + } + }, + { + "OXMTlv": { + "field": "icmpv4_type", + "mask": null, + "value": 100 + } + }, + { + "OXMTlv": { + "field": "icmpv4_code", + "mask": null, + "value": 101 + } + }, + { + "OXMTlv": { + "field": "arp_op", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "arp_spa", + "mask": null, + "value": "10.0.0.1" + } + }, + { + "OXMTlv": { + "field": "arp_tpa", + "mask": null, + "value": "10.0.0.3" + } + }, + { + "OXMTlv": { + "field": "arp_sha", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_tha", + "mask": null, + "value": "00:00:00:00:00:00" + } + }, + { + "OXMTlv": { + "field": "ipv6_src", + "mask": null, + "value": "fe80::f00b:a4ff:fe48:28a5" + } + }, + { + "OXMTlv": { + "field": "ipv6_dst", + "mask": null, + "value": "fe80::f00b:a4ff:fe05:b7dc" + } + }, + { + "OXMTlv": { + "field": "ipv6_flabel", + "mask": null, + "value": 541473 + } + }, + { + "OXMTlv": { + "field": "icmpv6_type", + "mask": null, + "value": 200 + } + }, + { + "OXMTlv": { + "field": "icmpv6_code", + "mask": null, + "value": 201 + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_target", + "mask": null, + "value": "fe80::a60:6eff:fe7f:74e7" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_sll", + "mask": null, + "value": "00:00:00:00:02:9a" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_tll", + "mask": null, + "value": "00:00:00:00:02:2b" + } + }, + { + "OXMTlv": { + "field": "mpls_label", + "mask": null, + "value": 624485 + } + }, + { + "OXMTlv": { + "field": "mpls_tc", + "mask": null, + "value": 5 + } + }, + { + "OXMTlv": { + "field": "mpls_bos", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "pbb_isid", + "mask": null, + "value": 11259375 + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 651061555542690057 + } + }, + { + "OXMTlv": { + "field": "ipv6_exthdr", + "mask": null, + "value": 500 + } + }, + { + "OXMTlv": { + "field": "pbb_uca", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "1.2.3.4" + } + } + ], + "type": 1 + } + }, + "reason": 0, + "table_id": 200, + "total_len": 0 + } +} diff --git a/tests/unit/ofproto/json/of13/4-6-ofp_features_reply.packet.json b/tests/unit/ofproto/json/of13/4-6-ofp_features_reply.packet.json new file mode 100644 index 00000000..12e8744a --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-6-ofp_features_reply.packet.json @@ -0,0 +1,9 @@ +{ + "OFPSwitchFeatures": { + "auxiliary_id": 99, + "capabilities": 79, + "datapath_id": 9210263729383, + "n_buffers": 0, + "n_tables": 255 + } +} diff --git a/tests/unit/ofproto/json/of13/4-60-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of13/4-60-ofp_flow_mod.packet.json new file mode 100644 index 00000000..1c594e8f --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-60-ofp_flow_mod.packet.json @@ -0,0 +1,318 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [], + "match": { + "OFPMatch": { + "length": 351, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 84281096 + } + }, + { + "OXMTlv": { + "field": "in_phy_port", + "mask": null, + "value": 16909060 + } + }, + { + "OXMTlv": { + "field": "metadata", + "mask": null, + "value": 283686952306183 + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "ff:ff:ff:ff:ff:ff" + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 999 + } + }, + { + "OXMTlv": { + "field": "ip_dscp", + "mask": null, + "value": 9 + } + }, + { + "OXMTlv": { + "field": "ip_ecn", + "mask": null, + "value": 3 + } + }, + { + "OXMTlv": { + "field": "ip_proto", + "mask": null, + "value": 99 + } + }, + { + "OXMTlv": { + "field": "ipv4_src", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "tcp_src", + "mask": null, + "value": 8080 + } + }, + { + "OXMTlv": { + "field": "tcp_dst", + "mask": null, + "value": 18080 + } + }, + { + "OXMTlv": { + "field": "udp_src", + "mask": null, + "value": 28080 + } + }, + { + "OXMTlv": { + "field": "udp_dst", + "mask": null, + "value": 55936 + } + }, + { + "OXMTlv": { + "field": "sctp_src", + "mask": null, + "value": 48080 + } + }, + { + "OXMTlv": { + "field": "sctp_dst", + "mask": null, + "value": 59328 + } + }, + { + "OXMTlv": { + "field": "icmpv4_type", + "mask": null, + "value": 100 + } + }, + { + "OXMTlv": { + "field": "icmpv4_code", + "mask": null, + "value": 101 + } + }, + { + "OXMTlv": { + "field": "arp_op", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "arp_spa", + "mask": null, + "value": "10.0.0.1" + } + }, + { + "OXMTlv": { + "field": "arp_tpa", + "mask": null, + "value": "10.0.0.3" + } + }, + { + "OXMTlv": { + "field": "arp_sha", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_tha", + "mask": null, + "value": "00:00:00:00:00:00" + } + }, + { + "OXMTlv": { + "field": "ipv6_src", + "mask": null, + "value": "fe80::f00b:a4ff:fe48:28a5" + } + }, + { + "OXMTlv": { + "field": "ipv6_dst", + "mask": null, + "value": "fe80::f00b:a4ff:fe05:b7dc" + } + }, + { + "OXMTlv": { + "field": "ipv6_flabel", + "mask": null, + "value": 541473 + } + }, + { + "OXMTlv": { + "field": "icmpv6_type", + "mask": null, + "value": 200 + } + }, + { + "OXMTlv": { + "field": "icmpv6_code", + "mask": null, + "value": 201 + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_target", + "mask": null, + "value": "fe80::a60:6eff:fe7f:74e7" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_sll", + "mask": null, + "value": "00:00:00:00:02:9a" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_tll", + "mask": null, + "value": "00:00:00:00:02:2b" + } + }, + { + "OXMTlv": { + "field": "mpls_label", + "mask": null, + "value": 624485 + } + }, + { + "OXMTlv": { + "field": "mpls_tc", + "mask": null, + "value": 5 + } + }, + { + "OXMTlv": { + "field": "mpls_bos", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "pbb_isid", + "mask": null, + "value": 11259375 + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 651061555542690057 + } + }, + { + "OXMTlv": { + "field": "ipv6_exthdr", + "mask": null, + "value": 500 + } + }, + { + "OXMTlv": { + "field": "pbb_uca", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "1.2.3.4" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of13/4-61-ofp_experimenter_request.packet.json b/tests/unit/ofproto/json/of13/4-61-ofp_experimenter_request.packet.json new file mode 100644 index 00000000..93af3039 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-61-ofp_experimenter_request.packet.json @@ -0,0 +1,9 @@ +{ + "OFPExperimenterStatsRequest": { + "data": "aG9nZWhvZ2U=", + "exp_type": 3405678728, + "experimenter": 3735928495, + "flags": 0, + "type": 65535 + } +} diff --git a/tests/unit/ofproto/json/of13/4-62-ofp_experimenter_reply.packet.json b/tests/unit/ofproto/json/of13/4-62-ofp_experimenter_reply.packet.json new file mode 100644 index 00000000..1eb06b84 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-62-ofp_experimenter_reply.packet.json @@ -0,0 +1,13 @@ +{ + "OFPExperimenterStatsReply": { + "body": { + "OFPExperimenterMultipart": { + "data": "dGVzdGRhdGE5OTk5OTk5OQ==", + "exp_type": 3405674359, + "experimenter": 3735928495 + } + }, + "flags": 0, + "type": 65535 + } +} diff --git a/tests/unit/ofproto/json/of13/4-63-onf_flow_monitor_request.packet.json b/tests/unit/ofproto/json/of13/4-63-onf_flow_monitor_request.packet.json new file mode 100644 index 00000000..c5e166d8 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-63-onf_flow_monitor_request.packet.json @@ -0,0 +1,337 @@ +{ + "ONFFlowMonitorStatsRequest": { + "body": [ + { + "ONFFlowMonitorRequest": { + "flags": 15, + "id": 100000000, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "match_len": 0, + "out_port": 22, + "table_id": 33 + } + }, + { + "ONFFlowMonitorRequest": { + "flags": 49, + "id": 999, + "match": { + "OFPMatch": { + "length": 351, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 84281096 + } + }, + { + "OXMTlv": { + "field": "in_phy_port", + "mask": null, + "value": 16909060 + } + }, + { + "OXMTlv": { + "field": "metadata", + "mask": null, + "value": 283686952306183 + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "ff:ff:ff:ff:ff:ff" + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 999 + } + }, + { + "OXMTlv": { + "field": "ip_dscp", + "mask": null, + "value": 9 + } + }, + { + "OXMTlv": { + "field": "ip_ecn", + "mask": null, + "value": 3 + } + }, + { + "OXMTlv": { + "field": "ip_proto", + "mask": null, + "value": 99 + } + }, + { + "OXMTlv": { + "field": "ipv4_src", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "tcp_src", + "mask": null, + "value": 8080 + } + }, + { + "OXMTlv": { + "field": "tcp_dst", + "mask": null, + "value": 18080 + } + }, + { + "OXMTlv": { + "field": "udp_src", + "mask": null, + "value": 28080 + } + }, + { + "OXMTlv": { + "field": "udp_dst", + "mask": null, + "value": 55936 + } + }, + { + "OXMTlv": { + "field": "sctp_src", + "mask": null, + "value": 48080 + } + }, + { + "OXMTlv": { + "field": "sctp_dst", + "mask": null, + "value": 59328 + } + }, + { + "OXMTlv": { + "field": "icmpv4_type", + "mask": null, + "value": 100 + } + }, + { + "OXMTlv": { + "field": "icmpv4_code", + "mask": null, + "value": 101 + } + }, + { + "OXMTlv": { + "field": "arp_op", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "arp_spa", + "mask": null, + "value": "10.0.0.1" + } + }, + { + "OXMTlv": { + "field": "arp_tpa", + "mask": null, + "value": "10.0.0.3" + } + }, + { + "OXMTlv": { + "field": "arp_sha", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_tha", + "mask": null, + "value": "00:00:00:00:00:00" + } + }, + { + "OXMTlv": { + "field": "ipv6_src", + "mask": null, + "value": "fe80::f00b:a4ff:fe48:28a5" + } + }, + { + "OXMTlv": { + "field": "ipv6_dst", + "mask": null, + "value": "fe80::f00b:a4ff:fe05:b7dc" + } + }, + { + "OXMTlv": { + "field": "ipv6_flabel", + "mask": null, + "value": 541473 + } + }, + { + "OXMTlv": { + "field": "icmpv6_type", + "mask": null, + "value": 200 + } + }, + { + "OXMTlv": { + "field": "icmpv6_code", + "mask": null, + "value": 201 + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_target", + "mask": null, + "value": "fe80::a60:6eff:fe7f:74e7" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_sll", + "mask": null, + "value": "00:00:00:00:02:9a" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_tll", + "mask": null, + "value": "00:00:00:00:02:2b" + } + }, + { + "OXMTlv": { + "field": "mpls_label", + "mask": null, + "value": 624485 + } + }, + { + "OXMTlv": { + "field": "mpls_tc", + "mask": null, + "value": 5 + } + }, + { + "OXMTlv": { + "field": "mpls_bos", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "pbb_isid", + "mask": null, + "value": 11259375 + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 651061555542690057 + } + }, + { + "OXMTlv": { + "field": "ipv6_exthdr", + "mask": null, + "value": 500 + } + }, + { + "OXMTlv": { + "field": "pbb_uca", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "1.2.3.4" + } + } + ], + "type": 1 + } + }, + "match_len": 347, + "out_port": 4294967295, + "table_id": 255 + } + } + ], + "exp_type": 1870, + "experimenter": 1330529792, + "flags": 0, + "type": 65535 + } +} diff --git a/tests/unit/ofproto/json/of13/4-7-ofp_set_config.packet.json b/tests/unit/ofproto/json/of13/4-7-ofp_set_config.packet.json new file mode 100644 index 00000000..cd5398b7 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-7-ofp_set_config.packet.json @@ -0,0 +1,6 @@ +{ + "OFPSetConfig": { + "flags": 0, + "miss_send_len": 128 + } +} diff --git a/tests/unit/ofproto/json/of13/4-8-ofp_get_config_request.packet.json b/tests/unit/ofproto/json/of13/4-8-ofp_get_config_request.packet.json new file mode 100644 index 00000000..06fe51f4 --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-8-ofp_get_config_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPGetConfigRequest": {} +} diff --git a/tests/unit/ofproto/json/of13/4-9-ofp_get_config_reply.packet.json b/tests/unit/ofproto/json/of13/4-9-ofp_get_config_reply.packet.json new file mode 100644 index 00000000..62b37b4d --- /dev/null +++ b/tests/unit/ofproto/json/of13/4-9-ofp_get_config_reply.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGetConfigReply": { + "flags": 0, + "miss_send_len": 128 + } +} diff --git a/tests/unit/ofproto/json/of13/lib-ofctl-ofp_group_stats_request.packet.json b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_group_stats_request.packet.json new file mode 100644 index 00000000..311b0381 --- /dev/null +++ b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_group_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPGroupStatsRequest": { + "flags": 0, + "group_id": 1, + "type": 6 + } +} diff --git a/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_config_request.packet.json b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_config_request.packet.json new file mode 100644 index 00000000..9967bd29 --- /dev/null +++ b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_config_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPMeterConfigStatsRequest": { + "flags": 0, + "meter_id": 1, + "type": 10 + } +} diff --git a/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_stats_request.packet.json b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_stats_request.packet.json new file mode 100644 index 00000000..570c2b6d --- /dev/null +++ b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_meter_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPMeterStatsRequest": { + "flags": 0, + "meter_id": 1, + "type": 9 + } +} diff --git a/tests/unit/ofproto/json/of13/lib-ofctl-ofp_port_stats_request.packet.json b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_port_stats_request.packet.json new file mode 100644 index 00000000..f1258076 --- /dev/null +++ b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_port_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPPortStatsRequest": { + "flags": 0, + "port_no": 7, + "type": 4 + } +} diff --git a/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json new file mode 100644 index 00000000..a50308c0 --- /dev/null +++ b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_get_config_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPQueueGetConfigRequest": { + "port": 4294967295 + } +} diff --git a/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json new file mode 100644 index 00000000..b216fe97 --- /dev/null +++ b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet1.json @@ -0,0 +1,8 @@ +{ + "OFPQueueStatsRequest": { + "flags": 0, + "port_no": 7, + "queue_id": 4294967295, + "type": 5 + } +} diff --git a/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json new file mode 100644 index 00000000..cc00e1ea --- /dev/null +++ b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet2.json @@ -0,0 +1,8 @@ +{ + "OFPQueueStatsRequest": { + "flags": 0, + "port_no": 7, + "queue_id": 1, + "type": 5 + } +} diff --git a/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json new file mode 100644 index 00000000..5f6579be --- /dev/null +++ b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_queue_stats_request.packet3.json @@ -0,0 +1,8 @@ +{ + "OFPQueueStatsRequest": { + "flags": 0, + "port_no": 4294967295, + "queue_id": 1, + "type": 5 + } +} diff --git a/tests/unit/ofproto/json/of13/lib-ofctl-ofp_table_features_request.packet.json b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_table_features_request.packet.json new file mode 100644 index 00000000..6501de15 --- /dev/null +++ b/tests/unit/ofproto/json/of13/lib-ofctl-ofp_table_features_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPTableFeaturesStatsRequest": { + "body": [], + "flags": 0, + "type": 12 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_reply.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_reply.packet.json new file mode 100644 index 00000000..011bd6de --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_reply.packet.json @@ -0,0 +1,5 @@ +{ + "OFPEchoReply": { + "data": "" + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_request.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_request.packet.json new file mode 100644 index 00000000..501a8479 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-echo_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPEchoRequest": { + "data": "" + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-error_msg.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-error_msg.packet.json new file mode 100644 index 00000000..b12d0d9a --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-error_msg.packet.json @@ -0,0 +1,7 @@ +{ + "OFPErrorMsg": { + "code": 6, + "data": "BA4ACAAAAAA=", + "type": 4 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-features_reply.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-features_reply.packet.json new file mode 100644 index 00000000..3d828093 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-features_reply.packet.json @@ -0,0 +1,9 @@ +{ + "OFPSwitchFeatures": { + "auxiliary_id": 0, + "capabilities": 79, + "datapath_id": 1, + "n_buffers": 255, + "n_tables": 255 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.json new file mode 100644 index 00000000..7de40ef3 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.json @@ -0,0 +1,192 @@ +{ + "OFPFlowMod": { + "buffer_id": 0, + "command": 0, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.9" + } + }, + "len": 16, + "type": 25 + } + }, + { + "NXActionLearn": { + "cookie": 0, + "experimenter": 8992, + "fin_hard_timeout": 0, + "fin_idle_timeout": 0, + "flags": 0, + "hard_timeout": 300, + "idle_timeout": 0, + "len": 96, + "priority": 1, + "specs": [ + { + "NXFlowSpecMatch": { + "dst": [ + "vlan_vid", + 0 + ], + "n_bits": 12, + "src": [ + "vlan_vid", + 0 + ] + } + }, + { + "NXFlowSpecMatch": { + "dst": [ + "eth_dst_nxm", + 0 + ], + "n_bits": 48, + "src": [ + "eth_src_nxm", + 0 + ] + } + }, + { + "NXFlowSpecLoad": { + "dst": [ + "vlan_vid", + 0 + ], + "n_bits": 12, + "src": 0 + } + }, + { + "NXFlowSpecLoad": { + "dst": [ + "tunnel_id_nxm", + 0 + ], + "n_bits": 64, + "src": [ + "tunnel_id_nxm", + 0 + ] + } + }, + { + "NXFlowSpecOutput": { + "dst": "", + "n_bits": 32, + "src": [ + "in_port", + 0 + ] + } + } + ], + "subtype": 16, + "table_id": 99, + "type": 65535 + } + } + ], + "len": 128, + "type": 4 + } + }, + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 100, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 70, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "aa:bb:cc:99:88:77" + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5095 + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.1" + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 50000 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "192.168.2.3" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "192.168.2.4" + } + } + ], + "type": 1 + } + }, + "out_group": 0, + "out_port": 0, + "priority": 0, + "table_id": 2 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.truncated64.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.truncated64.json new file mode 100644 index 00000000..707e3096 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod.packet.truncated64.json @@ -0,0 +1,33 @@ +{ + "OFPTruncatedMessage": { + "OFPFlowMod": { + "buffer_id": 0, + "command": 0, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [], + "match": { + "OFPMatch": { + "length": 70, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + } + ], + "type": 1 + } + }, + "out_group": 0, + "out_port": 0, + "priority": 0, + "table_id": 2 + } + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_conjunction.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_conjunction.packet.json new file mode 100644 index 00000000..209067e8 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_conjunction.packet.json @@ -0,0 +1,100 @@ +{ + "OFPFlowMod": { + "buffer_id": 0, + "command": 0, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionConjunction": { + "clause": 1, + "experimenter": 8992, + "id": 11259375, + "len": 16, + "n_clauses": 2, + "subtype": 34, + "type": 65535 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 70, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "aa:bb:cc:99:88:77" + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5095 + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.1" + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 50000 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "192.168.2.3" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "192.168.2.4" + } + } + ], + "type": 1 + } + }, + "out_group": 0, + "out_port": 0, + "priority": 0, + "table_id": 4 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_match_conj.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_match_conj.packet.json new file mode 100644 index 00000000..4fd8c4d4 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_mod_match_conj.packet.json @@ -0,0 +1,66 @@ +{ + "OFPFlowMod": { + "buffer_id": 0, + "command": 0, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.9" + } + }, + "len": 16, + "type": 25 + } + } + ], + "len": 32, + "type": 4 + } + }, + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 100, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 12, + "oxm_fields": [ + { + "OXMTlv": { + "field": "conj_id", + "mask": null, + "value": 11259375 + } + } + ], + "type": 1 + } + }, + "out_group": 0, + "out_port": 0, + "priority": 0, + "table_id": 3 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_removed.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_removed.packet.json new file mode 100644 index 00000000..63ec9424 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-flow_removed.packet.json @@ -0,0 +1,78 @@ +{ + "OFPFlowRemoved": { + "byte_count": 100, + "cookie": 1311768467463790320, + "duration_nsec": 500, + "duration_sec": 600, + "hard_timeout": 300, + "idle_timeout": 400, + "match": { + "OFPMatch": { + "length": 70, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "aa:bb:cc:99:88:77" + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5095 + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.1" + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 50000 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "192.168.2.3" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "192.168.2.4" + } + } + ], + "type": 1 + } + }, + "packet_count": 200, + "priority": 100, + "reason": 0, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-get_config_reply.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-get_config_reply.packet.json new file mode 100644 index 00000000..62b37b4d --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-get_config_reply.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGetConfigReply": { + "flags": 0, + "miss_send_len": 128 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-hello.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-hello.packet.json new file mode 100644 index 00000000..5a116313 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-hello.packet.json @@ -0,0 +1,15 @@ +{ + "OFPHello": { + "elements": [ + { + "OFPHelloElemVersionBitmap": { + "length": 8, + "type": 1, + "versions": [ + 4 + ] + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-meter_mod.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-meter_mod.packet.json new file mode 100644 index 00000000..5bb43719 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-meter_mod.packet.json @@ -0,0 +1,26 @@ +{ + "OFPMeterMod": { + "bands": [ + { + "OFPMeterBandDrop": { + "burst_size": 10, + "len": 16, + "rate": 1000, + "type": 1 + } + }, + { + "OFPMeterBandDscpRemark": { + "burst_size": 10, + "len": 16, + "prec_level": 1, + "rate": 1000, + "type": 2 + } + } + ], + "command": 0, + "flags": 14, + "meter_id": 100 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet.json new file mode 100644 index 00000000..4e8ad336 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-ofp_packet_out_packet_library.packet.json @@ -0,0 +1,61 @@ +{ + "OFPPacketOut": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 4294967292, + "type": 0 + } + } + ], + "actions_len": 16, + "buffer_id": 4294967295, + "data": { + "Packet": { + "protocols": [ + { + "ethernet": { + "dst": "f2:0b:a4:d0:3f:70", + "ethertype": 2048, + "src": "f2:0b:a4:7d:f8:ea" + } + }, + { + "ipv4": { + "csum": 44939, + "dst": "10.0.0.2", + "flags": 0, + "header_length": 5, + "identification": 63514, + "offset": 0, + "option": null, + "proto": 1, + "src": "10.0.0.1", + "tos": 0, + "total_length": 84, + "ttl": 255, + "version": 4 + } + }, + { + "icmp": { + "code": 0, + "csum": 520, + "data": { + "echo": { + "data": "MdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", + "id": 63328, + "seq": 0 + } + }, + "type": 8 + } + } + ] + } + }, + "in_port": 4294967293 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-packet_in.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-packet_in.packet.json new file mode 100644 index 00000000..e5fd0bd9 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-packet_in.packet.json @@ -0,0 +1,46 @@ +{ + "OFPPacketIn": { + "buffer_id": 200, + "cookie": 0, + "data": "aG9nZQ==", + "match": { + "OFPMatch": { + "length": 40, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 50000 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "192.168.2.3" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "192.168.2.4" + } + } + ], + "type": 1 + } + }, + "reason": 0, + "table_id": 100, + "total_len": 1000 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-port_mod.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-port_mod.packet.json new file mode 100644 index 00000000..5c6c29a0 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-port_mod.packet.json @@ -0,0 +1,9 @@ +{ + "OFPPortMod": { + "advertise": 10248, + "config": 1, + "hw_addr": "aa:bb:cc:99:88:77", + "mask": 1, + "port_no": 1 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-port_status.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-port_status.packet.json new file mode 100644 index 00000000..b82d10ee --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-port_status.packet.json @@ -0,0 +1,20 @@ +{ + "OFPPortStatus": { + "desc": { + "OFPPort": { + "advertised": 10248, + "config": 0, + "curr": 10248, + "curr_speed": 50000, + "hw_addr": "ff:ff:ff:ff:ff:ff", + "max_speed": 100000, + "name": "eth0", + "peer": 10248, + "port_no": 1, + "state": 4, + "supported": 10248 + } + }, + "reason": 2 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-set_config.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-set_config.packet.json new file mode 100644 index 00000000..cd5398b7 --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-set_config.packet.json @@ -0,0 +1,6 @@ +{ + "OFPSetConfig": { + "flags": 0, + "miss_send_len": 128 + } +} diff --git a/tests/unit/ofproto/json/of13/libofproto-OFP13-table_mod.packet.json b/tests/unit/ofproto/json/of13/libofproto-OFP13-table_mod.packet.json new file mode 100644 index 00000000..5019c29b --- /dev/null +++ b/tests/unit/ofproto/json/of13/libofproto-OFP13-table_mod.packet.json @@ -0,0 +1,6 @@ +{ + "OFPTableMod": { + "config": 0, + "table_id": 255 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_conjunction.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_conjunction.packet.json new file mode 100644 index 00000000..edc10939 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_conjunction.packet.json @@ -0,0 +1,100 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 1, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionConjunction": { + "clause": 0, + "experimenter": 8992, + "id": 11259375, + "len": 16, + "n_clauses": 2, + "subtype": 34, + "type": 65535 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 70, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "aa:bb:cc:99:88:77" + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5095 + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.1" + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 50000 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "192.168.2.3" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "192.168.2.4" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 2 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller.packet.json new file mode 100644 index 00000000..95bc3f51 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller.packet.json @@ -0,0 +1,43 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionController": { + "controller_id": 1, + "experimenter": 8992, + "len": 16, + "max_len": 1024, + "reason": 5, + "subtype": 20, + "type": 65535 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 100, + "table_id": 0 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller2.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller2.packet.json new file mode 100644 index 00000000..f5e57f3d --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_controller2.packet.json @@ -0,0 +1,51 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionController2": { + "controller_id": 10, + "experimenter": 8992, + "len": 64, + "max_len": 1024, + "pause": true, + "reason": 5, + "subtype": 37, + "type": 65535, + "userdata": [ + 1, + 2, + 3, + 4, + 5 + ] + } + } + ], + "len": 72, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 100, + "table_id": 0 + } +} \ No newline at end of file diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json new file mode 100644 index 00000000..b1157e9a --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct.packet.json @@ -0,0 +1,61 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionCT": { + "actions": [], + "alg": 0, + "experimenter": 8992, + "flags": 0, + "len": 24, + "recirc_table": 4, + "subtype": 35, + "type": 65535, + "zone_ofs_nbits": 283, + "zone_src": "reg0" + } + } + ], + "len": 32, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 22, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "ct_state", + "mask": 32, + "value": 0 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 3 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json new file mode 100644 index 00000000..e3fcd3bc --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_exec.packet.json @@ -0,0 +1,75 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionCT": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "ct_mark", + "mask": null, + "value": 6636321 + } + }, + "len": 16, + "type": 25 + } + } + ], + "alg": 0, + "experimenter": 8992, + "flags": 1, + "len": 40, + "recirc_table": 255, + "subtype": 35, + "type": 65535, + "zone_ofs_nbits": 0, + "zone_src": "" + } + } + ], + "len": 48, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 22, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "ct_state", + "mask": 34, + "value": 34 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 3 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json new file mode 100644 index 00000000..5a38d8f7 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat.packet.json @@ -0,0 +1,70 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionCT": { + "actions": [ + { + "NXActionNAT": { + "experimenter": 8992, + "flags": 1, + "len": 32, + "range_ipv4_max": "10.1.13.255", + "range_ipv4_min": "10.1.12.0", + "range_ipv6_max": "", + "range_ipv6_min": "", + "range_proto_max": 1023, + "range_proto_min": 1, + "subtype": 36, + "type": 65535 + } + } + ], + "alg": 0, + "experimenter": 8992, + "flags": 1, + "len": 56, + "recirc_table": 255, + "subtype": 35, + "type": 65535, + "zone_ofs_nbits": 0, + "zone_src": "" + } + } + ], + "len": 64, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 10, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 3 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json new file mode 100644 index 00000000..5c1c8c07 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_ct_nat_v6.packet.json @@ -0,0 +1,70 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionCT": { + "actions": [ + { + "NXActionNAT": { + "experimenter": 8992, + "flags": 2, + "len": 48, + "range_ipv4_max": "", + "range_ipv4_min": "", + "range_ipv6_max": "2001:1::ffff", + "range_ipv6_min": "2001:1::1", + "range_proto_max": null, + "range_proto_min": null, + "subtype": 36, + "type": 65535 + } + } + ], + "alg": 0, + "experimenter": 8992, + "flags": 1, + "len": 72, + "recirc_table": 255, + "subtype": 35, + "type": 65535, + "zone_ofs_nbits": 0, + "zone_src": "" + } + } + ], + "len": 80, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 10, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 34525 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 3 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet.json new file mode 100644 index 00000000..c5e44d07 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_dec_ttl_cnt_ids.packet.json @@ -0,0 +1,62 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionDecTtlCntIds": { + "cnt_ids": [ + 1, + 2, + 3, + 4, + 5 + ], + "experimenter": 8992, + "len": 32, + "subtype": 21, + "type": 65535 + } + } + ], + "len": 40, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 15, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "ip_proto", + "mask": null, + "value": 6 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 100, + "table_id": 0 + } +} \ No newline at end of file diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_fintimeout.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_fintimeout.packet.json new file mode 100644 index 00000000..c0e02de9 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_fintimeout.packet.json @@ -0,0 +1,57 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionFinTimeout": { + "experimenter": 8992, + "fin_hard_timeout": 60, + "fin_idle_timeout": 30, + "len": 16, + "subtype": 19, + "type": 65535 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 15, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "ip_proto", + "mask": null, + "value": 6 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 100, + "table_id": 0 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_learn.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_learn.packet.json new file mode 100644 index 00000000..c874c2e9 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_learn.packet.json @@ -0,0 +1,192 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.9" + } + }, + "len": 16, + "type": 25 + } + }, + { + "NXActionLearn": { + "cookie": 0, + "experimenter": 8992, + "fin_hard_timeout": 0, + "fin_idle_timeout": 0, + "flags": 0, + "hard_timeout": 300, + "idle_timeout": 0, + "len": 96, + "priority": 1, + "specs": [ + { + "NXFlowSpecMatch": { + "dst": [ + "vlan_vid", + 0 + ], + "n_bits": 12, + "src": [ + "vlan_vid", + 0 + ] + } + }, + { + "NXFlowSpecMatch": { + "dst": [ + "eth_dst_nxm", + 0 + ], + "n_bits": 48, + "src": [ + "eth_src_nxm", + 0 + ] + } + }, + { + "NXFlowSpecLoad": { + "dst": [ + "vlan_vid", + 0 + ], + "n_bits": 12, + "src": 0 + } + }, + { + "NXFlowSpecLoad": { + "dst": [ + "tunnel_id_nxm", + 0 + ], + "n_bits": 64, + "src": [ + "tunnel_id_nxm", + 0 + ] + } + }, + { + "NXFlowSpecOutput": { + "dst": "", + "n_bits": 32, + "src": [ + "in_port", + 0 + ] + } + } + ], + "subtype": 16, + "table_id": 99, + "type": 65535 + } + } + ], + "len": 128, + "type": 4 + } + }, + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 100, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 70, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "aa:bb:cc:99:88:77" + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5095 + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.1" + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 50000 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "192.168.2.3" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "192.168.2.4" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 2 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_note.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_note.packet.json new file mode 100644 index 00000000..330000da --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_note.packet.json @@ -0,0 +1,48 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionNote": { + "experimenter": 8992, + "len": 16, + "note": [ + 4, + 5, + 6, + 7, + 0, + 0 + ], + "subtype": 8, + "type": 65535 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 100, + "table_id": 0 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_output_trunc.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_output_trunc.packet.json new file mode 100644 index 00000000..84657335 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_output_trunc.packet.json @@ -0,0 +1,42 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionOutputTrunc": { + "experimenter": 8992, + "len": 16, + "max_len": 1024, + "port": 8080, + "subtype": 39, + "type": 65535 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 100, + "table_id": 0 + } +} \ No newline at end of file diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_resubmit.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_resubmit.packet.json new file mode 100644 index 00000000..1fdedc55 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_resubmit.packet.json @@ -0,0 +1,99 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionResubmitTable": { + "experimenter": 8992, + "in_port": 1234, + "len": 16, + "subtype": 14, + "table_id": 99, + "type": 65535 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 70, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "aa:bb:cc:99:88:77" + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5095 + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.1" + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 50000 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "192.168.2.3" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "192.168.2.4" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 3 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample.packet.json new file mode 100644 index 00000000..a5a374ad --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample.packet.json @@ -0,0 +1,44 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionSample": { + "collector_set_id": 1, + "experimenter": 8992, + "len": 24, + "obs_domain_id": 2, + "obs_point_id": 3, + "probability": 3, + "subtype": 29, + "type": 65535 + } + } + ], + "len": 32, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 100, + "table_id": 0 + } +} \ No newline at end of file diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample2.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample2.packet.json new file mode 100644 index 00000000..c767bff3 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_sample2.packet.json @@ -0,0 +1,45 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionSample2": { + "collector_set_id": 1, + "experimenter": 8992, + "len": 32, + "obs_domain_id": 2, + "obs_point_id": 3, + "probability": 3, + "sampling_port": 8080, + "subtype": 38, + "type": 65535 + } + } + ], + "len": 40, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 100, + "table_id": 0 + } +} \ No newline at end of file diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_pop.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_pop.packet.json new file mode 100644 index 00000000..0322a36a --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_pop.packet.json @@ -0,0 +1,43 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionStackPop": { + "end": 5, + "experimenter": 8992, + "field": "reg2", + "len": 24, + "start": 1, + "subtype": 28, + "type": 65535 + } + } + ], + "len": 32, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 100, + "table_id": 0 + } +} \ No newline at end of file diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_push.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_push.packet.json new file mode 100644 index 00000000..86d29e74 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-action_stack_push.packet.json @@ -0,0 +1,43 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionStackPush": { + "end": 5, + "experimenter": 8992, + "field": "reg2", + "len": 24, + "start": 1, + "subtype": 27, + "type": 65535 + } + } + ], + "len": 32, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 100, + "table_id": 0 + } +} \ No newline at end of file diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_conj.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_conj.packet.json new file mode 100644 index 00000000..6b1c2864 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_conj.packet.json @@ -0,0 +1,60 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 1, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + } + ], + "len": 16, + "type": 4 + } + }, + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 100, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 18, + "oxm_fields": [ + { + "OXMTlv": { + "field": "conj_id", + "mask": null, + "value": 11259375 + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5330 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 3 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json new file mode 100644 index 00000000..c60851a0 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_load_nx_register.packet.json @@ -0,0 +1,58 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 1, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionRegLoad": { + "dst": "reg0", + "experimenter": 8992, + "len": 24, + "ofs_nbits": 283, + "subtype": 7, + "type": 65535, + "value": 233495534 + } + } + ], + "len": 32, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 24, + "oxm_fields": [ + { + "OXMTlv": { + "field": "reg0", + "mask": null, + "value": 4660 + } + }, + { + "OXMTlv": { + "field": "reg5", + "mask": 65535, + "value": 43981 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 3 + } +} \ No newline at end of file diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_move_nx_register.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_move_nx_register.packet.json new file mode 100644 index 00000000..7457278b --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_move_nx_register.packet.json @@ -0,0 +1,60 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 1, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionRegMove": { + "dst_field": "reg1", + "dst_ofs": 0, + "experimenter": 8992, + "len": 24, + "n_bits": 6, + "src_field": "reg0", + "src_ofs": 10, + "subtype": 6, + "type": 65535 + } + } + ], + "len": 32, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 24, + "oxm_fields": [ + { + "OXMTlv": { + "field": "reg0", + "mask": null, + "value": 4660 + } + }, + { + "OXMTlv": { + "field": "reg5", + "mask": 65535, + "value": 43981 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 3 + } +} \ No newline at end of file diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark.packet.json new file mode 100644 index 00000000..61aee954 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark.packet.json @@ -0,0 +1,60 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 1, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + } + ], + "len": 16, + "type": 4 + } + }, + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 100, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 18, + "oxm_fields": [ + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5330 + } + }, + { + "OXMTlv": { + "field": "pkt_mark", + "mask": null, + "value": 54321 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 3 + } +} diff --git a/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet.json b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet.json new file mode 100644 index 00000000..a7bd2367 --- /dev/null +++ b/tests/unit/ofproto/json/of13/ovs-ofctl-of13-match_pkt_mark_masked.packet.json @@ -0,0 +1,60 @@ +{ + "OFPFlowMod": { + "buffer_id": 4294967295, + "command": 1, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + } + ], + "len": 16, + "type": 4 + } + }, + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 100, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 22, + "oxm_fields": [ + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5330 + } + }, + { + "OXMTlv": { + "field": "pkt_mark", + "mask": 65535, + "value": 54321 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 32768, + "table_id": 3 + } +} diff --git a/tests/unit/ofproto/json/of14/5-0-ofp_desc_reply.packet.json b/tests/unit/ofproto/json/of14/5-0-ofp_desc_reply.packet.json new file mode 100644 index 00000000..26e5dc2d --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-0-ofp_desc_reply.packet.json @@ -0,0 +1,15 @@ +{ + "OFPDescStatsReply": { + "body": { + "OFPDescStats": { + "dp_desc": "dp", + "hw_desc": "hw", + "mfr_desc": "mfr", + "serial_num": "serial", + "sw_desc": "sw" + } + }, + "flags": 0, + "type": 0 + } +} diff --git a/tests/unit/ofproto/json/of14/5-1-ofp_packet_out.packet.json b/tests/unit/ofproto/json/of14/5-1-ofp_packet_out.packet.json new file mode 100644 index 00000000..efb39e2d --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-1-ofp_packet_out.packet.json @@ -0,0 +1,18 @@ +{ + "OFPPacketOut": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 4294967292, + "type": 0 + } + } + ], + "actions_len": 16, + "buffer_id": 4294967295, + "data": "8guk0D9w8gukffjqCABFAABU+BoAAP8Br4sKAAABCgAAAggAAgj3YAAAMdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", + "in_port": 4294967293 + } +} diff --git a/tests/unit/ofproto/json/of14/5-10-ofp_hello.packet.json b/tests/unit/ofproto/json/of14/5-10-ofp_hello.packet.json new file mode 100644 index 00000000..d03ff84b --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-10-ofp_hello.packet.json @@ -0,0 +1,20 @@ +{ + "OFPHello": { + "elements": [ + { + "OFPHelloElemVersionBitmap": { + "length": 8, + "type": 1, + "versions": [ + 1, + 2, + 3, + 9, + 10, + 30 + ] + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of14/5-11-ofp_flow_stats_request.packet.json b/tests/unit/ofproto/json/of14/5-11-ofp_flow_stats_request.packet.json new file mode 100644 index 00000000..2baccad4 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-11-ofp_flow_stats_request.packet.json @@ -0,0 +1,18 @@ +{ + "OFPFlowStatsRequest": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 0, + "type": 1 + } +} diff --git a/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json b/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json new file mode 100644 index 00000000..42eacf37 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-12-ofp_flow_stats_reply.packet.json @@ -0,0 +1,347 @@ +{ + "OFPFlowStatsReply": { + "body": [ + { + "OFPFlowStats": { + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115277000, + "duration_sec": 358, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [], + "length": 56, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "packet_count": 0, + "priority": 65535, + "table_id": 0 + } + }, + { + "OFPFlowStats": { + "byte_count": 0, + "cookie": 0, + "duration_nsec": 115055000, + "duration_sec": 358, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 0, + "port": 4294967290, + "type": 0 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "length": 88, + "match": { + "OFPMatch": { + "length": 10, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + } + ], + "type": 1 + } + }, + "packet_count": 0, + "priority": 65534, + "table_id": 0 + } + }, + { + "OFPFlowStats": { + "byte_count": 238, + "cookie": 0, + "duration_nsec": 511582000, + "duration_sec": 316220, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [ + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 1, + "type": 1 + } + } + ], + "length": 80, + "match": { + "OFPMatch": { + "length": 22, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 6 + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "packet_count": 3, + "priority": 123, + "table_id": 0 + } + }, + { + "OFPFlowStats": { + "byte_count": 98, + "cookie": 0, + "duration_nsec": 980901000, + "duration_sec": 313499, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 258 + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionCopyTtlOut": { + "len": 8, + "type": 11 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionPopPbb": { + "len": 8, + "type": 27 + } + }, + { + "OFPActionPushPbb": { + "ethertype": 4660, + "len": 8, + "type": 26 + } + }, + { + "OFPActionPopMpls": { + "ethertype": 39030, + "len": 8, + "type": 20 + } + }, + { + "OFPActionPushMpls": { + "ethertype": 34887, + "len": 8, + "type": 19 + } + }, + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionPushVlan": { + "ethertype": 33024, + "len": 8, + "type": 17 + } + }, + { + "OFPActionDecMplsTtl": { + "len": 8, + "type": 16 + } + }, + { + "OFPActionSetMplsTtl": { + "len": 8, + "mpls_ttl": 10, + "type": 15 + } + }, + { + "OFPActionDecNwTtl": { + "len": 8, + "type": 24 + } + }, + { + "OFPActionSetNwTtl": { + "len": 8, + "nw_ttl": 10, + "type": 23 + } + }, + { + "OFPActionSetQueue": { + "len": 8, + "queue_id": 3, + "type": 21 + } + }, + { + "OFPActionGroup": { + "group_id": 99, + "len": 8, + "type": 22 + } + }, + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 6, + "type": 0 + } + }, + { + "OFPActionExperimenterUnknown": { + "len": 16, + "data": "ZXhwX2RhdGE=", + "experimenter": 98765432, + "type": 65535 + } + }, + { + "NXActionUnknown": { + "len": 16, + "data": "cF9kYXRh", + "experimenter": 8992, + "type": 65535, + "subtype": 25976 + } + } + ], + "len": 192, + "type": 3 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "01:02:03:04:05:06" + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "pbb_uca", + "mask": null, + "value": 1 + } + }, + "len": 16, + "type": 25 + } + } + ], + "len": 40, + "type": 4 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 4294967293, + "type": 0 + } + } + ], + "len": 24, + "type": 3 + } + } + ], + "length": 312, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "packet_count": 1, + "priority": 0, + "table_id": 0 + } + } + ], + "flags": 0, + "type": 1 + } +} diff --git a/tests/unit/ofproto/json/of14/5-13-ofp_echo_request.packet.json b/tests/unit/ofproto/json/of14/5-13-ofp_echo_request.packet.json new file mode 100644 index 00000000..e1f2af42 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-13-ofp_echo_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPEchoRequest": { + "data": "aG9nZQ==" + } +} diff --git a/tests/unit/ofproto/json/of14/5-14-ofp_echo_reply.packet.json b/tests/unit/ofproto/json/of14/5-14-ofp_echo_reply.packet.json new file mode 100644 index 00000000..2a573634 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-14-ofp_echo_reply.packet.json @@ -0,0 +1,5 @@ +{ + "OFPEchoReply": { + "data": "aG9nZQ==" + } +} diff --git a/tests/unit/ofproto/json/of14/5-15-ofp_error_msg.packet.json b/tests/unit/ofproto/json/of14/5-15-ofp_error_msg.packet.json new file mode 100644 index 00000000..e9ab2b5e --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-15-ofp_error_msg.packet.json @@ -0,0 +1,7 @@ +{ + "OFPErrorMsg": { + "code": 11, + "data": "ZnVnYWZ1Z2E=", + "type": 2 + } +} diff --git a/tests/unit/ofproto/json/of14/5-16-ofp_experimenter.packet.json b/tests/unit/ofproto/json/of14/5-16-ofp_experimenter.packet.json new file mode 100644 index 00000000..4ad13c73 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-16-ofp_experimenter.packet.json @@ -0,0 +1,7 @@ +{ + "OFPExperimenter": { + "data": "bmF6bw==", + "exp_type": 123456789, + "experimenter": 98765432 + } +} diff --git a/tests/unit/ofproto/json/of14/5-17-ofp_barrier_request.packet.json b/tests/unit/ofproto/json/of14/5-17-ofp_barrier_request.packet.json new file mode 100644 index 00000000..2aae9ec3 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-17-ofp_barrier_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPBarrierRequest": {} +} diff --git a/tests/unit/ofproto/json/of14/5-18-ofp_barrier_reply.packet.json b/tests/unit/ofproto/json/of14/5-18-ofp_barrier_reply.packet.json new file mode 100644 index 00000000..11f8cfcc --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-18-ofp_barrier_reply.packet.json @@ -0,0 +1,3 @@ +{ + "OFPBarrierReply": {} +} diff --git a/tests/unit/ofproto/json/of14/5-19-ofp_role_request.packet.json b/tests/unit/ofproto/json/of14/5-19-ofp_role_request.packet.json new file mode 100644 index 00000000..5cdbc2f1 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-19-ofp_role_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPRoleRequest": { + "generation_id": 17294086455919964160, + "role": 2 + } +} diff --git a/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json new file mode 100644 index 00000000..5f789d52 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-2-ofp_flow_mod.packet.json @@ -0,0 +1,202 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 258 + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionCopyTtlOut": { + "len": 8, + "type": 11 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionPopPbb": { + "len": 8, + "type": 27 + } + }, + { + "OFPActionPushPbb": { + "ethertype": 4660, + "len": 8, + "type": 26 + } + }, + { + "OFPActionPopMpls": { + "ethertype": 39030, + "len": 8, + "type": 20 + } + }, + { + "OFPActionPushMpls": { + "ethertype": 34887, + "len": 8, + "type": 19 + } + }, + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionPushVlan": { + "ethertype": 33024, + "len": 8, + "type": 17 + } + }, + { + "OFPActionDecMplsTtl": { + "len": 8, + "type": 16 + } + }, + { + "OFPActionSetMplsTtl": { + "len": 8, + "mpls_ttl": 10, + "type": 15 + } + }, + { + "OFPActionDecNwTtl": { + "len": 8, + "type": 24 + } + }, + { + "OFPActionSetNwTtl": { + "len": 8, + "nw_ttl": 10, + "type": 23 + } + }, + { + "OFPActionExperimenterUnknown": { + "data": "AAECAwQFBgc=", + "experimenter": 101, + "len": 16, + "type": 65535 + } + }, + { + "OFPActionSetQueue": { + "len": 8, + "queue_id": 3, + "type": 21 + } + }, + { + "OFPActionGroup": { + "group_id": 99, + "len": 8, + "type": 22 + } + }, + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 6, + "type": 0 + } + } + ], + "len": 176, + "type": 3 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "01:02:03:04:05:06" + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "pbb_uca", + "mask": null, + "value": 1 + } + }, + "len": 16, + "type": 25 + } + } + ], + "len": 40, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of14/5-20-ofp_role_reply.packet.json b/tests/unit/ofproto/json/of14/5-20-ofp_role_reply.packet.json new file mode 100644 index 00000000..3fd9a13f --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-20-ofp_role_reply.packet.json @@ -0,0 +1,6 @@ +{ + "OFPRoleReply": { + "generation_id": 17294086455919964160, + "role": 3 + } +} diff --git a/tests/unit/ofproto/json/of14/5-21-ofp_group_mod.packet.json b/tests/unit/ofproto/json/of14/5-21-ofp_group_mod.packet.json new file mode 100644 index 00000000..1a3767da --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-21-ofp_group_mod.packet.json @@ -0,0 +1,27 @@ +{ + "OFPGroupMod": { + "buckets": [ + { + "OFPBucket": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 2, + "type": 0 + } + } + ], + "len": 32, + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + } + ], + "command": 0, + "group_id": 1, + "type": 0 + } +} diff --git a/tests/unit/ofproto/json/of14/5-22-ofp_port_mod.packet.json b/tests/unit/ofproto/json/of14/5-22-ofp_port_mod.packet.json new file mode 100644 index 00000000..a255b9dd --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-22-ofp_port_mod.packet.json @@ -0,0 +1,60 @@ +{ + "OFPPortMod": { + "config": 0, + "hw_addr": "00:11:00:00:11:11", + "mask": 0, + "port_no": 1, + "properties": [ + { + "OFPPortModPropEthernet": { + "advertise": 4096, + "length": 8, + "type": 0 + } + }, + { + "OFPPortModPropOptical": { + "configure": 3, + "fl_offset": 2000, + "freq_lmda": 1500, + "grid_span": 3000, + "length": 24, + "tx_pwr": 300, + "type": 1 + } + }, + { + "OFPPortModPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPPortModPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPPortModPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of14/5-23-ofp_table_mod.packet.json b/tests/unit/ofproto/json/of14/5-23-ofp_table_mod.packet.json new file mode 100644 index 00000000..97acd144 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-23-ofp_table_mod.packet.json @@ -0,0 +1,56 @@ +{ + "OFPTableMod": { + "config": 0, + "properties": [ + { + "OFPTableModPropEviction": { + "flags": 0, + "length": 8, + "type": 2 + } + }, + { + "OFPTableModPropVacancy": { + "length": 8, + "type": 3, + "vacancy": 0, + "vacancy_down": 0, + "vacancy_up": 0 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "table_id": 255 + } +} diff --git a/tests/unit/ofproto/json/of14/5-24-ofp_desc_request.packet.json b/tests/unit/ofproto/json/of14/5-24-ofp_desc_request.packet.json new file mode 100644 index 00000000..5b23f8bc --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-24-ofp_desc_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPDescStatsRequest": { + "flags": 0, + "type": 0 + } +} diff --git a/tests/unit/ofproto/json/of14/5-25-ofp_aggregate_stats_request.packet.json b/tests/unit/ofproto/json/of14/5-25-ofp_aggregate_stats_request.packet.json new file mode 100644 index 00000000..248131fd --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-25-ofp_aggregate_stats_request.packet.json @@ -0,0 +1,18 @@ +{ + "OFPAggregateStatsRequest": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 255, + "type": 2 + } +} diff --git a/tests/unit/ofproto/json/of14/5-26-ofp_aggregate_stats_reply.packet.json b/tests/unit/ofproto/json/of14/5-26-ofp_aggregate_stats_reply.packet.json new file mode 100644 index 00000000..153ad4f0 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-26-ofp_aggregate_stats_reply.packet.json @@ -0,0 +1,13 @@ +{ + "OFPAggregateStatsReply": { + "body": { + "OFPAggregateStats": { + "byte_count": 574, + "flow_count": 6, + "packet_count": 7 + } + }, + "flags": 0, + "type": 2 + } +} diff --git a/tests/unit/ofproto/json/of14/5-27-ofp_table_stats_request.packet.json b/tests/unit/ofproto/json/of14/5-27-ofp_table_stats_request.packet.json new file mode 100644 index 00000000..1f965d77 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-27-ofp_table_stats_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPTableStatsRequest": { + "flags": 0, + "type": 3 + } +} diff --git a/tests/unit/ofproto/json/of14/5-28-ofp_table_stats_reply.packet.json b/tests/unit/ofproto/json/of14/5-28-ofp_table_stats_reply.packet.json new file mode 100644 index 00000000..94801adb --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-28-ofp_table_stats_reply.packet.json @@ -0,0 +1,24 @@ +{ + "OFPTableStatsReply": { + "body": [ + { + "OFPTableStats": { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 0 + } + }, + { + "OFPTableStats": { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 1 + } + } + ], + "flags": 0, + "type": 3 + } +} diff --git a/tests/unit/ofproto/json/of14/5-29-ofp_port_stats_request.packet.json b/tests/unit/ofproto/json/of14/5-29-ofp_port_stats_request.packet.json new file mode 100644 index 00000000..5228710d --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-29-ofp_port_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPPortStatsRequest": { + "flags": 0, + "port_no": 4294967295, + "type": 4 + } +} diff --git a/tests/unit/ofproto/json/of14/5-3-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of14/5-3-ofp_flow_mod.packet.json new file mode 100644 index 00000000..061e3cd0 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-3-ofp_flow_mod.packet.json @@ -0,0 +1,47 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [ + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 1, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 22, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 6 + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 0 + } +} diff --git a/tests/unit/ofproto/json/of14/5-30-ofp_port_stats_reply.packet.json b/tests/unit/ofproto/json/of14/5-30-ofp_port_stats_reply.packet.json new file mode 100644 index 00000000..4ea41742 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-30-ofp_port_stats_reply.packet.json @@ -0,0 +1,113 @@ +{ + "OFPPortStatsReply": { + "body": [ + { + "OFPPortStats": { + "duration_nsec": 0, + "duration_sec": 0, + "length": 224, + "port_no": 7, + "properties": [ + { + "OFPPortStatsPropEthernet": { + "collisions": 0, + "length": 40, + "rx_crc_err": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "type": 0 + } + }, + { + "OFPPortStatsPropOptical": { + "bias_current": 300, + "flags": 3, + "length": 44, + "rx_freq_lmda": 1500, + "rx_grid_span": 500, + "rx_offset": 700, + "rx_pwr": 2000, + "temperature": 273, + "tx_freq_lmda": 1500, + "tx_grid_span": 500, + "tx_offset": 700, + "tx_pwr": 2000, + "type": 1 + } + }, + { + "OFPPortStatsPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPPortStatsPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPPortStatsPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "rx_bytes": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 0, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + }, + { + "OFPPortStats": { + "duration_nsec": 0, + "duration_sec": 0, + "length": 120, + "port_no": 6, + "properties": [ + { + "OFPPortStatsPropEthernet": { + "collisions": 0, + "length": 40, + "rx_crc_err": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "type": 0 + } + } + ], + "rx_bytes": 336, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 4, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + } + ], + "flags": 0, + "type": 4 + } +} diff --git a/tests/unit/ofproto/json/of14/5-31-ofp_group_features_request.packet.json b/tests/unit/ofproto/json/of14/5-31-ofp_group_features_request.packet.json new file mode 100644 index 00000000..edba5dc5 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-31-ofp_group_features_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGroupFeaturesStatsRequest": { + "flags": 0, + "type": 8 + } +} diff --git a/tests/unit/ofproto/json/of14/5-32-ofp_group_features_reply.packet.json b/tests/unit/ofproto/json/of14/5-32-ofp_group_features_reply.packet.json new file mode 100644 index 00000000..f059f994 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-32-ofp_group_features_reply.packet.json @@ -0,0 +1,24 @@ +{ + "OFPGroupFeaturesStatsReply": { + "body": { + "OFPGroupFeaturesStats": { + "actions": [ + 67082241, + 67082241, + 67082241, + 67082241 + ], + "capabilities": 5, + "max_groups": [ + 16777216, + 16777216, + 16777216, + 16777216 + ], + "types": 15 + } + }, + "flags": 0, + "type": 8 + } +} diff --git a/tests/unit/ofproto/json/of14/5-33-ofp_group_desc_request.packet.json b/tests/unit/ofproto/json/of14/5-33-ofp_group_desc_request.packet.json new file mode 100644 index 00000000..bea140c2 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-33-ofp_group_desc_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGroupDescStatsRequest": { + "flags": 0, + "type": 7 + } +} diff --git a/tests/unit/ofproto/json/of14/5-34-ofp_group_desc_reply.packet.json b/tests/unit/ofproto/json/of14/5-34-ofp_group_desc_reply.packet.json new file mode 100644 index 00000000..c30d7da6 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-34-ofp_group_desc_reply.packet.json @@ -0,0 +1,35 @@ +{ + "OFPGroupDescStatsReply": { + "body": [ + { + "OFPGroupDescStats": { + "buckets": [ + { + "OFPBucket": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 2, + "type": 0 + } + } + ], + "len": 32, + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + } + ], + "group_id": 1, + "length": 40, + "type": 0 + } + } + ], + "flags": 0, + "type": 7 + } +} diff --git a/tests/unit/ofproto/json/of14/5-35-ofp_queue_stats_request.packet.json b/tests/unit/ofproto/json/of14/5-35-ofp_queue_stats_request.packet.json new file mode 100644 index 00000000..7a12acc3 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-35-ofp_queue_stats_request.packet.json @@ -0,0 +1,8 @@ +{ + "OFPQueueStatsRequest": { + "flags": 0, + "port_no": 4294967295, + "queue_id": 4294967295, + "type": 5 + } +} diff --git a/tests/unit/ofproto/json/of14/5-36-ofp_queue_stats_reply.packet.json b/tests/unit/ofproto/json/of14/5-36-ofp_queue_stats_reply.packet.json new file mode 100644 index 00000000..2c190977 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-36-ofp_queue_stats_reply.packet.json @@ -0,0 +1,80 @@ +{ + "OFPQueueStatsReply": { + "body": [ + { + "OFPQueueStats": { + "duration_nsec": 0, + "duration_sec": 0, + "length": 104, + "port_no": 7, + "properties": [ + { + "OFPQueueStatsPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPQueueStatsPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPQueueStatsPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + }, + { + "OFPQueueStats": { + "duration_nsec": 0, + "duration_sec": 0, + "length": 48, + "port_no": 6, + "properties": [], + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + }, + { + "OFPQueueStats": { + "duration_nsec": 0, + "duration_sec": 0, + "length": 48, + "port_no": 7, + "properties": [], + "queue_id": 2, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + } + ], + "flags": 0, + "type": 5 + } +} diff --git a/tests/unit/ofproto/json/of14/5-37-ofp_port_status.packet.json b/tests/unit/ofproto/json/of14/5-37-ofp_port_status.packet.json new file mode 100644 index 00000000..b273ac22 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-37-ofp_port_status.packet.json @@ -0,0 +1,76 @@ +{ + "OFPPortStatus": { + "desc": { + "OFPPort": { + "config": 0, + "hw_addr": "f2:0b:a4:d0:3f:70", + "length": 168, + "name": "\u79c1\u306e\u30dd\u30fc\u30c8", + "port_no": 7, + "properties": [ + { + "OFPPortDescPropEthernet": { + "advertised": 10240, + "curr": 10248, + "curr_speed": 5000, + "length": 32, + "max_speed": 5000, + "peer": 10248, + "supported": 10248, + "type": 0 + } + }, + { + "OFPPortDescPropOptical": { + "length": 40, + "rx_grid_freq_lmda": 1500, + "rx_max_freq_lmda": 2000, + "rx_min_freq_lmda": 1000, + "supported": 1, + "tx_grid_freq_lmda": 1500, + "tx_max_freq_lmda": 2000, + "tx_min_freq_lmda": 1000, + "tx_pwr_max": 2000, + "tx_pwr_min": 1000, + "type": 1 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "state": 4 + } + }, + "reason": 0 + } +} diff --git a/tests/unit/ofproto/json/of14/5-38-ofp_flow_removed.packet.json b/tests/unit/ofproto/json/of14/5-38-ofp_flow_removed.packet.json new file mode 100644 index 00000000..994953e6 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-38-ofp_flow_removed.packet.json @@ -0,0 +1,29 @@ +{ + "OFPFlowRemoved": { + "byte_count": 86, + "cookie": 0, + "duration_nsec": 48825000, + "duration_sec": 3, + "hard_timeout": 0, + "idle_timeout": 3, + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "packet_count": 1, + "priority": 65535, + "reason": 0, + "table_id": 0 + } +} diff --git a/tests/unit/ofproto/json/of14/5-39-ofp_error_msg_experimenter.packet.json b/tests/unit/ofproto/json/of14/5-39-ofp_error_msg_experimenter.packet.json new file mode 100644 index 00000000..37bfb6a9 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-39-ofp_error_msg_experimenter.packet.json @@ -0,0 +1,8 @@ +{ + "OFPErrorExperimenterMsg": { + "data": "amlra2VuIGRhdGE=", + "exp_type": 60000, + "experimenter": 999999, + "type": 65535 + } +} diff --git a/tests/unit/ofproto/json/of14/5-4-ofp_packet_in.packet.json b/tests/unit/ofproto/json/of14/5-4-ofp_packet_in.packet.json new file mode 100644 index 00000000..b281edd7 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-4-ofp_packet_in.packet.json @@ -0,0 +1,81 @@ +{ + "OFPPacketIn": { + "buffer_id": 2, + "cookie": 283686884868096, + "data": "////////8gukffjqCAYAAQgABgQAAfILpH346goAAAEAAAAAAAAKAAAD", + "match": { + "OFPMatch": { + "length": 80, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 6 + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "ff:ff:ff:ff:ff:ff" + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_op", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "arp_spa", + "mask": null, + "value": "10.0.0.1" + } + }, + { + "OXMTlv": { + "field": "arp_tpa", + "mask": null, + "value": "10.0.0.3" + } + }, + { + "OXMTlv": { + "field": "arp_sha", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_tha", + "mask": null, + "value": "00:00:00:00:00:00" + } + } + ], + "type": 1 + } + }, + "reason": 3, + "table_id": 1, + "total_len": 42 + } +} diff --git a/tests/unit/ofproto/json/of14/5-40-ofp_get_async_request.packet.json b/tests/unit/ofproto/json/of14/5-40-ofp_get_async_request.packet.json new file mode 100644 index 00000000..7daa5a0f --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-40-ofp_get_async_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPGetAsyncRequest": {} +} diff --git a/tests/unit/ofproto/json/of14/5-41-ofp_get_async_reply.packet.json b/tests/unit/ofproto/json/of14/5-41-ofp_get_async_reply.packet.json new file mode 100644 index 00000000..82c9e794 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-41-ofp_get_async_reply.packet.json @@ -0,0 +1,122 @@ +{ + "OFPGetAsyncReply": { + "properties": [ + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 0 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 1 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 2 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 3 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 4 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 5 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 6 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 7 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 24, + "type": 8 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 24, + "type": 9 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 10 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 11 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65534 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of14/5-42-ofp_set_async.packet.json b/tests/unit/ofproto/json/of14/5-42-ofp_set_async.packet.json new file mode 100644 index 00000000..0802c14e --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-42-ofp_set_async.packet.json @@ -0,0 +1,122 @@ +{ + "OFPSetAsync": { + "properties": [ + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 0 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 1 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 2 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 3 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 4 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 5 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 6 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 7 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 24, + "type": 8 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 24, + "type": 9 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 10 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 11 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65534 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of14/5-43-ofp_meter_mod.packet.json b/tests/unit/ofproto/json/of14/5-43-ofp_meter_mod.packet.json new file mode 100644 index 00000000..eba4540a --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-43-ofp_meter_mod.packet.json @@ -0,0 +1,35 @@ +{ + "OFPMeterMod": { + "bands": [ + { + "OFPMeterBandDrop": { + "burst_size": 10, + "len": 16, + "rate": 1000, + "type": 1 + } + }, + { + "OFPMeterBandDscpRemark": { + "burst_size": 10, + "len": 16, + "prec_level": 1, + "rate": 1000, + "type": 2 + } + }, + { + "OFPMeterBandExperimenter": { + "burst_size": 10, + "experimenter": 999, + "len": 16, + "rate": 1000, + "type": 65535 + } + } + ], + "command": 0, + "flags": 14, + "meter_id": 100 + } +} diff --git a/tests/unit/ofproto/json/of14/5-44-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of14/5-44-ofp_flow_mod.packet.json new file mode 100644 index 00000000..b8c28362 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-44-ofp_flow_mod.packet.json @@ -0,0 +1,56 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [ + { + "OFPInstructionMeter": { + "len": 8, + "meter_id": 1, + "type": 6 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 6, + "type": 0 + } + } + ], + "len": 24, + "type": 3 + } + } + ], + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of14/5-45-ofp_meter_config_request.packet.json b/tests/unit/ofproto/json/of14/5-45-ofp_meter_config_request.packet.json new file mode 100644 index 00000000..4703588e --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-45-ofp_meter_config_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPMeterConfigStatsRequest": { + "flags": 0, + "meter_id": 4294967295, + "type": 10 + } +} diff --git a/tests/unit/ofproto/json/of14/5-46-ofp_meter_config_reply.packet.json b/tests/unit/ofproto/json/of14/5-46-ofp_meter_config_reply.packet.json new file mode 100644 index 00000000..08cc97e6 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-46-ofp_meter_config_reply.packet.json @@ -0,0 +1,25 @@ +{ + "OFPMeterConfigStatsReply": { + "body": [ + { + "OFPMeterConfigStats": { + "bands": [ + { + "OFPMeterBandDrop": { + "burst_size": 10, + "len": 16, + "rate": 1000, + "type": 1 + } + } + ], + "flags": 14, + "length": 24, + "meter_id": 100 + } + } + ], + "flags": 0, + "type": 10 + } +} diff --git a/tests/unit/ofproto/json/of14/5-47-ofp_meter_stats_request.packet.json b/tests/unit/ofproto/json/of14/5-47-ofp_meter_stats_request.packet.json new file mode 100644 index 00000000..8d45799b --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-47-ofp_meter_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPMeterStatsRequest": { + "flags": 0, + "meter_id": 4294967295, + "type": 9 + } +} diff --git a/tests/unit/ofproto/json/of14/5-48-ofp_meter_stats_reply.packet.json b/tests/unit/ofproto/json/of14/5-48-ofp_meter_stats_reply.packet.json new file mode 100644 index 00000000..b4fd8226 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-48-ofp_meter_stats_reply.packet.json @@ -0,0 +1,27 @@ +{ + "OFPMeterStatsReply": { + "body": [ + { + "OFPMeterStats": { + "band_stats": [ + { + "OFPMeterBandStats": { + "byte_band_count": 0, + "packet_band_count": 0 + } + } + ], + "byte_in_count": 0, + "duration_nsec": 480000, + "duration_sec": 0, + "flow_count": 0, + "len": 56, + "meter_id": 100, + "packet_in_count": 0 + } + } + ], + "flags": 0, + "type": 9 + } +} diff --git a/tests/unit/ofproto/json/of14/5-49-ofp_meter_features_request.packet.json b/tests/unit/ofproto/json/of14/5-49-ofp_meter_features_request.packet.json new file mode 100644 index 00000000..7363a342 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-49-ofp_meter_features_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPMeterFeaturesStatsRequest": { + "flags": 0, + "type": 11 + } +} diff --git a/tests/unit/ofproto/json/of14/5-5-ofp_features_request.packet.json b/tests/unit/ofproto/json/of14/5-5-ofp_features_request.packet.json new file mode 100644 index 00000000..8f48ad5a --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-5-ofp_features_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPFeaturesRequest": {} +} diff --git a/tests/unit/ofproto/json/of14/5-50-ofp_meter_features_reply.packet.json b/tests/unit/ofproto/json/of14/5-50-ofp_meter_features_reply.packet.json new file mode 100644 index 00000000..e3f6918f --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-50-ofp_meter_features_reply.packet.json @@ -0,0 +1,17 @@ +{ + "OFPMeterFeaturesStatsReply": { + "body": [ + { + "OFPMeterFeaturesStats": { + "band_types": 2147483654, + "capabilities": 15, + "max_bands": 255, + "max_color": 0, + "max_meter": 16777216 + } + } + ], + "flags": 0, + "type": 11 + } +} diff --git a/tests/unit/ofproto/json/of14/5-51-ofp_port_desc_request.packet.json b/tests/unit/ofproto/json/of14/5-51-ofp_port_desc_request.packet.json new file mode 100644 index 00000000..f166c34a --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-51-ofp_port_desc_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPPortDescStatsRequest": { + "flags": 0, + "type": 13 + } +} diff --git a/tests/unit/ofproto/json/of14/5-52-ofp_port_desc_reply.packet.json b/tests/unit/ofproto/json/of14/5-52-ofp_port_desc_reply.packet.json new file mode 100644 index 00000000..c281c0f8 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-52-ofp_port_desc_reply.packet.json @@ -0,0 +1,103 @@ +{ + "OFPPortDescStatsReply": { + "body": [ + { + "OFPPort": { + "config": 0, + "hw_addr": "f2:0b:a4:d0:3f:70", + "length": 168, + "name": "Port7", + "port_no": 7, + "properties": [ + { + "OFPPortDescPropEthernet": { + "advertised": 10240, + "curr": 10248, + "curr_speed": 5000, + "length": 32, + "max_speed": 5000, + "peer": 10248, + "supported": 10248, + "type": 0 + } + }, + { + "OFPPortDescPropOptical": { + "length": 40, + "rx_grid_freq_lmda": 1500, + "rx_max_freq_lmda": 2000, + "rx_min_freq_lmda": 1000, + "supported": 1, + "tx_grid_freq_lmda": 1500, + "tx_max_freq_lmda": 2000, + "tx_min_freq_lmda": 1000, + "tx_pwr_max": 2000, + "tx_pwr_min": 1000, + "type": 1 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "state": 4 + } + }, + { + "OFPPort": { + "config": 0, + "hw_addr": "f2:0b:a4:7d:f8:ea", + "length": 72, + "name": "Port6", + "port_no": 6, + "properties": [ + { + "OFPPortDescPropEthernet": { + "advertised": 10240, + "curr": 10248, + "curr_speed": 5000, + "length": 32, + "max_speed": 5000, + "peer": 10248, + "supported": 10248, + "type": 0 + } + } + ], + "state": 4 + } + } + ], + "flags": 0, + "type": 13 + } +} diff --git a/tests/unit/ofproto/json/of14/5-53-ofp_table_features_request.packet.json b/tests/unit/ofproto/json/of14/5-53-ofp_table_features_request.packet.json new file mode 100644 index 00000000..2a1a4308 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-53-ofp_table_features_request.packet.json @@ -0,0 +1,15945 @@ +{ + "OFPTableFeaturesStatsRequest": { + "body": [ + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1168, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x00", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 258, + "table_ids": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65534 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65534 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65534 + } + } + ], + "table_id": 0 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1112, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x01", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 257, + "table_ids": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 1 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x02", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 256, + "table_ids": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 2 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x03", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 255, + "table_ids": [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 3 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x04", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 254, + "table_ids": [ + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 4 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x05", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 253, + "table_ids": [ + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 5 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x06", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 252, + "table_ids": [ + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 6 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x07", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 251, + "table_ids": [ + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 7 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x08", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 250, + "table_ids": [ + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 8 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x09", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 249, + "table_ids": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 9 + } + } + ], + "flags": 1, + "type": 12 + } +} diff --git a/tests/unit/ofproto/json/of14/5-54-ofp_table_features_reply.packet.json b/tests/unit/ofproto/json/of14/5-54-ofp_table_features_reply.packet.json new file mode 100644 index 00000000..ea056e8f --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-54-ofp_table_features_reply.packet.json @@ -0,0 +1,15945 @@ +{ + "OFPTableFeaturesStatsReply": { + "body": [ + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1168, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "\u79c1\u306e\u30c6\u30fc\u30d6\u30eb", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 258, + "table_ids": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65534 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65534 + } + }, + { + "OFPTableFeaturePropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65534 + } + } + ], + "table_id": 0 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1112, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x01", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 257, + "table_ids": [ + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 1 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x02", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 256, + "table_ids": [ + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 2 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x03", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 255, + "table_ids": [ + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 3 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x04", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 254, + "table_ids": [ + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 4 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x05", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 253, + "table_ids": [ + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 5 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x06", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 252, + "table_ids": [ + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 6 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x07", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 251, + "table_ids": [ + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 7 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x08", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 250, + "table_ids": [ + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 8 + } + }, + { + "OFPTableFeaturesStats": { + "config": 0, + "length": 1104, + "max_entries": 16777216, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "Flow Table 0x09", + "properties": [ + { + "OFPTableFeaturePropInstructions": { + "instruction_ids": [ + { + "OFPInstructionId": { + "len": 4, + "type": 1 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 2 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 3 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 4 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 5 + } + }, + { + "OFPInstructionId": { + "len": 4, + "type": 6 + } + } + ], + "length": 28, + "type": 0 + } + }, + { + "OFPTableFeaturePropNextTables": { + "length": 249, + "table_ids": [ + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23, + 24, + 25, + 26, + 27, + 28, + 29, + 30, + 31, + 32, + 33, + 34, + 35, + 36, + 37, + 38, + 39, + 40, + 41, + 42, + 43, + 44, + 45, + 46, + 47, + 48, + 49, + 50, + 51, + 52, + 53, + 54, + 55, + 56, + 57, + 58, + 59, + 60, + 61, + 62, + 63, + 64, + 65, + 66, + 67, + 68, + 69, + 70, + 71, + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101, + 102, + 103, + 104, + 105, + 106, + 107, + 108, + 109, + 110, + 111, + 112, + 113, + 114, + 115, + 116, + 117, + 118, + 119, + 120, + 121, + 122, + 123, + 124, + 125, + 126, + 127, + 128, + 129, + 130, + 131, + 132, + 133, + 134, + 135, + 136, + 137, + 138, + 139, + 140, + 141, + 142, + 143, + 144, + 145, + 146, + 147, + 148, + 149, + 150, + 151, + 152, + 153, + 154, + 155, + 156, + 157, + 158, + 159, + 160, + 161, + 162, + 163, + 164, + 165, + 166, + 167, + 168, + 169, + 170, + 171, + 172, + 173, + 174, + 175, + 176, + 177, + 178, + 179, + 180, + 181, + 182, + 183, + 184, + 185, + 186, + 187, + 188, + 189, + 190, + 191, + 192, + 193, + 194, + 195, + 196, + 197, + 198, + 199, + 200, + 201, + 202, + 203, + 204, + 205, + 206, + 207, + 208, + 209, + 210, + 211, + 212, + 213, + 214, + 215, + 216, + 217, + 218, + 219, + 220, + 221, + 222, + 223, + 224, + 225, + 226, + 227, + 228, + 229, + 230, + 231, + 232, + 233, + 234, + 235, + 236, + 237, + 238, + 239, + 240, + 241, + 242, + 243, + 244, + 245, + 246, + 247, + 248, + 249, + 250, + 251, + 252, + 253, + 254 + ], + "type": 2 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 4 + } + }, + { + "OFPTableFeaturePropActions": { + "action_ids": [ + { + "OFPActionId": { + "len": 4, + "type": 0 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 22 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 21 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 15 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 16 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 23 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 24 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 11 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 12 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 17 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 18 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 19 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 20 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 26 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 27 + } + }, + { + "OFPActionId": { + "len": 4, + "type": 25 + } + } + ], + "length": 68, + "type": 6 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 8 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 10 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 12 + } + }, + { + "OFPTableFeaturePropOxm": { + "length": 152, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "in_port" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "metadata" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "eth_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_vid" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "vlan_pcp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_dscp" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_ecn" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ip_proto" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv4_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "tcp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "udp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "sctp_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv4_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_op" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_spa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tpa" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_sha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "arp_tha" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_src" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_dst" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_flabel" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_type" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "icmpv6_code" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_target" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_sll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "ipv6_nd_tll" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_label" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_tc" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "mpls_bos" + } + }, + { + "OFPOxmId": { + "hasmask": 0, + "length": 0, + "type": "pbb_isid" + } + } + ], + "type": 14 + } + } + ], + "table_id": 9 + } + } + ], + "flags": 1, + "type": 12 + } +} diff --git a/tests/unit/ofproto/json/of14/5-55-ofp_group_stats_request.packet.json b/tests/unit/ofproto/json/of14/5-55-ofp_group_stats_request.packet.json new file mode 100644 index 00000000..b200a81c --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-55-ofp_group_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPGroupStatsRequest": { + "flags": 0, + "group_id": 4294967292, + "type": 6 + } +} diff --git a/tests/unit/ofproto/json/of14/5-56-ofp_group_stats_reply.packet.json b/tests/unit/ofproto/json/of14/5-56-ofp_group_stats_reply.packet.json new file mode 100644 index 00000000..cb979e54 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-56-ofp_group_stats_reply.packet.json @@ -0,0 +1,27 @@ +{ + "OFPGroupStatsReply": { + "body": [ + { + "OFPGroupStats": { + "bucket_stats": [ + { + "OFPBucketCounter": { + "byte_count": 2345, + "packet_count": 234 + } + } + ], + "byte_count": 12345, + "duration_nsec": 609036000, + "duration_sec": 9, + "group_id": 1, + "length": 56, + "packet_count": 123, + "ref_count": 2 + } + } + ], + "flags": 0, + "type": 6 + } +} diff --git a/tests/unit/ofproto/json/of14/5-57-ofp_packet_in.packet.json b/tests/unit/ofproto/json/of14/5-57-ofp_packet_in.packet.json new file mode 100644 index 00000000..d326b907 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-57-ofp_packet_in.packet.json @@ -0,0 +1,298 @@ +{ + "OFPPacketIn": { + "buffer_id": 4026531840, + "cookie": 283686884868096, + "data": "", + "match": { + "OFPMatch": { + "length": 329, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 84281096 + } + }, + { + "OXMTlv": { + "field": "in_phy_port", + "mask": null, + "value": 16909060 + } + }, + { + "OXMTlv": { + "field": "metadata", + "mask": null, + "value": 283686952306183 + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "ff:ff:ff:ff:ff:ff" + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 999 + } + }, + { + "OXMTlv": { + "field": "ip_dscp", + "mask": null, + "value": 9 + } + }, + { + "OXMTlv": { + "field": "ip_ecn", + "mask": null, + "value": 3 + } + }, + { + "OXMTlv": { + "field": "ip_proto", + "mask": null, + "value": 99 + } + }, + { + "OXMTlv": { + "field": "ipv4_src", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "tcp_src", + "mask": null, + "value": 8080 + } + }, + { + "OXMTlv": { + "field": "tcp_dst", + "mask": null, + "value": 18080 + } + }, + { + "OXMTlv": { + "field": "udp_src", + "mask": null, + "value": 28080 + } + }, + { + "OXMTlv": { + "field": "udp_dst", + "mask": null, + "value": 55936 + } + }, + { + "OXMTlv": { + "field": "sctp_src", + "mask": null, + "value": 48080 + } + }, + { + "OXMTlv": { + "field": "sctp_dst", + "mask": null, + "value": 59328 + } + }, + { + "OXMTlv": { + "field": "icmpv4_type", + "mask": null, + "value": 100 + } + }, + { + "OXMTlv": { + "field": "icmpv4_code", + "mask": null, + "value": 101 + } + }, + { + "OXMTlv": { + "field": "arp_op", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "arp_spa", + "mask": null, + "value": "10.0.0.1" + } + }, + { + "OXMTlv": { + "field": "arp_tpa", + "mask": null, + "value": "10.0.0.3" + } + }, + { + "OXMTlv": { + "field": "arp_sha", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_tha", + "mask": null, + "value": "00:00:00:00:00:00" + } + }, + { + "OXMTlv": { + "field": "ipv6_src", + "mask": null, + "value": "fe80::f00b:a4ff:fe48:28a5" + } + }, + { + "OXMTlv": { + "field": "ipv6_dst", + "mask": null, + "value": "fe80::f00b:a4ff:fe05:b7dc" + } + }, + { + "OXMTlv": { + "field": "ipv6_flabel", + "mask": null, + "value": 541473 + } + }, + { + "OXMTlv": { + "field": "icmpv6_type", + "mask": null, + "value": 200 + } + }, + { + "OXMTlv": { + "field": "icmpv6_code", + "mask": null, + "value": 201 + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_target", + "mask": null, + "value": "fe80::a60:6eff:fe7f:74e7" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_sll", + "mask": null, + "value": "00:00:00:00:02:9a" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_tll", + "mask": null, + "value": "00:00:00:00:02:2b" + } + }, + { + "OXMTlv": { + "field": "mpls_label", + "mask": null, + "value": 624485 + } + }, + { + "OXMTlv": { + "field": "mpls_tc", + "mask": null, + "value": 5 + } + }, + { + "OXMTlv": { + "field": "mpls_bos", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "pbb_isid", + "mask": null, + "value": 11259375 + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 651061555542690057 + } + }, + { + "OXMTlv": { + "field": "ipv6_exthdr", + "mask": null, + "value": 500 + } + }, + { + "OXMTlv": { + "field": "pbb_uca", + "mask": null, + "value": 1 + } + } + ], + "type": 1 + } + }, + "reason": 0, + "table_id": 200, + "total_len": 0 + } +} diff --git a/tests/unit/ofproto/json/of14/5-58-ofp_flow_mod.packet.json b/tests/unit/ofproto/json/of14/5-58-ofp_flow_mod.packet.json new file mode 100644 index 00000000..7095f751 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-58-ofp_flow_mod.packet.json @@ -0,0 +1,305 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [], + "match": { + "OFPMatch": { + "length": 329, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 84281096 + } + }, + { + "OXMTlv": { + "field": "in_phy_port", + "mask": null, + "value": 16909060 + } + }, + { + "OXMTlv": { + "field": "metadata", + "mask": null, + "value": 283686952306183 + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "ff:ff:ff:ff:ff:ff" + } + }, + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 999 + } + }, + { + "OXMTlv": { + "field": "ip_dscp", + "mask": null, + "value": 9 + } + }, + { + "OXMTlv": { + "field": "ip_ecn", + "mask": null, + "value": 3 + } + }, + { + "OXMTlv": { + "field": "ip_proto", + "mask": null, + "value": 99 + } + }, + { + "OXMTlv": { + "field": "ipv4_src", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "1.2.3.4" + } + }, + { + "OXMTlv": { + "field": "tcp_src", + "mask": null, + "value": 8080 + } + }, + { + "OXMTlv": { + "field": "tcp_dst", + "mask": null, + "value": 18080 + } + }, + { + "OXMTlv": { + "field": "udp_src", + "mask": null, + "value": 28080 + } + }, + { + "OXMTlv": { + "field": "udp_dst", + "mask": null, + "value": 55936 + } + }, + { + "OXMTlv": { + "field": "sctp_src", + "mask": null, + "value": 48080 + } + }, + { + "OXMTlv": { + "field": "sctp_dst", + "mask": null, + "value": 59328 + } + }, + { + "OXMTlv": { + "field": "icmpv4_type", + "mask": null, + "value": 100 + } + }, + { + "OXMTlv": { + "field": "icmpv4_code", + "mask": null, + "value": 101 + } + }, + { + "OXMTlv": { + "field": "arp_op", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "arp_spa", + "mask": null, + "value": "10.0.0.1" + } + }, + { + "OXMTlv": { + "field": "arp_tpa", + "mask": null, + "value": "10.0.0.3" + } + }, + { + "OXMTlv": { + "field": "arp_sha", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + }, + { + "OXMTlv": { + "field": "arp_tha", + "mask": null, + "value": "00:00:00:00:00:00" + } + }, + { + "OXMTlv": { + "field": "ipv6_src", + "mask": null, + "value": "fe80::f00b:a4ff:fe48:28a5" + } + }, + { + "OXMTlv": { + "field": "ipv6_dst", + "mask": null, + "value": "fe80::f00b:a4ff:fe05:b7dc" + } + }, + { + "OXMTlv": { + "field": "ipv6_flabel", + "mask": null, + "value": 541473 + } + }, + { + "OXMTlv": { + "field": "icmpv6_type", + "mask": null, + "value": 200 + } + }, + { + "OXMTlv": { + "field": "icmpv6_code", + "mask": null, + "value": 201 + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_target", + "mask": null, + "value": "fe80::a60:6eff:fe7f:74e7" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_sll", + "mask": null, + "value": "00:00:00:00:02:9a" + } + }, + { + "OXMTlv": { + "field": "ipv6_nd_tll", + "mask": null, + "value": "00:00:00:00:02:2b" + } + }, + { + "OXMTlv": { + "field": "mpls_label", + "mask": null, + "value": 624485 + } + }, + { + "OXMTlv": { + "field": "mpls_tc", + "mask": null, + "value": 5 + } + }, + { + "OXMTlv": { + "field": "mpls_bos", + "mask": null, + "value": 1 + } + }, + { + "OXMTlv": { + "field": "pbb_isid", + "mask": null, + "value": 11259375 + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 651061555542690057 + } + }, + { + "OXMTlv": { + "field": "ipv6_exthdr", + "mask": null, + "value": 500 + } + }, + { + "OXMTlv": { + "field": "pbb_uca", + "mask": null, + "value": 1 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of14/5-59-ofp_experimenter_request.packet.json b/tests/unit/ofproto/json/of14/5-59-ofp_experimenter_request.packet.json new file mode 100644 index 00000000..93af3039 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-59-ofp_experimenter_request.packet.json @@ -0,0 +1,9 @@ +{ + "OFPExperimenterStatsRequest": { + "data": "aG9nZWhvZ2U=", + "exp_type": 3405678728, + "experimenter": 3735928495, + "flags": 0, + "type": 65535 + } +} diff --git a/tests/unit/ofproto/json/of14/5-6-ofp_features_reply.packet.json b/tests/unit/ofproto/json/of14/5-6-ofp_features_reply.packet.json new file mode 100644 index 00000000..12e8744a --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-6-ofp_features_reply.packet.json @@ -0,0 +1,9 @@ +{ + "OFPSwitchFeatures": { + "auxiliary_id": 99, + "capabilities": 79, + "datapath_id": 9210263729383, + "n_buffers": 0, + "n_tables": 255 + } +} diff --git a/tests/unit/ofproto/json/of14/5-60-ofp_experimenter_reply.packet.json b/tests/unit/ofproto/json/of14/5-60-ofp_experimenter_reply.packet.json new file mode 100644 index 00000000..1eb06b84 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-60-ofp_experimenter_reply.packet.json @@ -0,0 +1,13 @@ +{ + "OFPExperimenterStatsReply": { + "body": { + "OFPExperimenterMultipart": { + "data": "dGVzdGRhdGE5OTk5OTk5OQ==", + "exp_type": 3405674359, + "experimenter": 3735928495 + } + }, + "flags": 0, + "type": 65535 + } +} diff --git a/tests/unit/ofproto/json/of14/5-61-ofp_table_desc_request.packet.json b/tests/unit/ofproto/json/of14/5-61-ofp_table_desc_request.packet.json new file mode 100644 index 00000000..f5a4cde0 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-61-ofp_table_desc_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPTableDescStatsRequest": { + "flags": 0, + "type": 14 + } +} diff --git a/tests/unit/ofproto/json/of14/5-62-ofp_table_desc_reply.packet.json b/tests/unit/ofproto/json/of14/5-62-ofp_table_desc_reply.packet.json new file mode 100644 index 00000000..1f3d7142 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-62-ofp_table_desc_reply.packet.json @@ -0,0 +1,83 @@ +{ + "OFPTableDescStatsReply": { + "body": [ + { + "OFPTableDesc": { + "config": 0, + "length": 24, + "properties": [ + { + "OFPTableModPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + } + ], + "table_id": 7 + } + }, + { + "OFPTableDesc": { + "config": 0, + "length": 80, + "properties": [ + { + "OFPTableModPropEviction": { + "flags": 0, + "length": 8, + "type": 2 + } + }, + { + "OFPTableModPropVacancy": { + "length": 8, + "type": 3, + "vacancy": 0, + "vacancy_down": 0, + "vacancy_up": 0 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "table_id": 8 + } + } + ], + "flags": 0, + "type": 14 + } +} diff --git a/tests/unit/ofproto/json/of14/5-63-ofp_queue_desc_request.packet.json b/tests/unit/ofproto/json/of14/5-63-ofp_queue_desc_request.packet.json new file mode 100644 index 00000000..d58a2b05 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-63-ofp_queue_desc_request.packet.json @@ -0,0 +1,8 @@ +{ + "OFPQueueDescStatsRequest": { + "flags": 0, + "port_no": 7, + "queue_id": 4294967295, + "type": 15 + } +} diff --git a/tests/unit/ofproto/json/of14/5-64-ofp_queue_desc_reply.packet.json b/tests/unit/ofproto/json/of14/5-64-ofp_queue_desc_reply.packet.json new file mode 100644 index 00000000..26c8f7d5 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-64-ofp_queue_desc_reply.packet.json @@ -0,0 +1,81 @@ +{ + "OFPQueueDescStatsReply": { + "body": [ + { + "OFPQueueDesc": { + "len": 32, + "port_no": 7, + "properties": [ + { + "OFPQueueDescPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + } + ], + "queue_id": 0 + } + }, + { + "OFPQueueDesc": { + "len": 88, + "port_no": 8, + "properties": [ + { + "OFPQueueDescPropMinRate": { + "length": 8, + "rate": 300, + "type": 1 + } + }, + { + "OFPQueueDescPropMaxRate": { + "length": 8, + "rate": 900, + "type": 2 + } + }, + { + "OFPQueueDescPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPQueueDescPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPQueueDescPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "queue_id": 1 + } + } + ], + "flags": 0, + "type": 15 + } +} diff --git a/tests/unit/ofproto/json/of14/5-65-ofp_role_status.packet.json b/tests/unit/ofproto/json/of14/5-65-ofp_role_status.packet.json new file mode 100644 index 00000000..08e46df3 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-65-ofp_role_status.packet.json @@ -0,0 +1,41 @@ +{ + "OFPRoleStatus": { + "generation_id": 7, + "properties": [ + { + "OFPRolePropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPRolePropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPRolePropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "reason": 0, + "role": 2 + } +} diff --git a/tests/unit/ofproto/json/of14/5-66-ofp_flow_monitor_request.packet.json b/tests/unit/ofproto/json/of14/5-66-ofp_flow_monitor_request.packet.json new file mode 100644 index 00000000..aed7ddaa --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-66-ofp_flow_monitor_request.packet.json @@ -0,0 +1,27 @@ +{ + "OFPFlowMonitorRequest": { + "command": 0, + "flags": 0, + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "monitor_flags": 15, + "monitor_id": 100000000, + "out_group": 4294967295, + "out_port": 22, + "table_id": 33, + "type": 16 + } +} diff --git a/tests/unit/ofproto/json/of14/5-67-ofp_flow_monitor_reply.packet.json b/tests/unit/ofproto/json/of14/5-67-ofp_flow_monitor_reply.packet.json new file mode 100644 index 00000000..8c028877 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-67-ofp_flow_monitor_reply.packet.json @@ -0,0 +1,66 @@ +{ + "OFPFlowMonitorReply": { + "body": [ + { + "OFPFlowUpdateFull": { + "cookie": 0, + "event": 0, + "hard_timeout": 700, + "idle_timeout": 600, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 0, + "port": 4294967290, + "type": 0 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "length": 64, + "match": { + "OFPMatch": { + "length": 10, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + } + ], + "type": 1 + } + }, + "priority": 3, + "reason": 0, + "table_id": 0 + } + }, + { + "OFPFlowUpdateAbbrev": { + "event": 4, + "length": 8, + "xid": 1234 + } + }, + { + "OFPFlowUpdatePaused": { + "event": 5, + "length": 8 + } + } + ], + "flags": 0, + "type": 16 + } +} diff --git a/tests/unit/ofproto/json/of14/5-68-ofp_table_status.packet.json b/tests/unit/ofproto/json/of14/5-68-ofp_table_status.packet.json new file mode 100644 index 00000000..fde5fb77 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-68-ofp_table_status.packet.json @@ -0,0 +1,62 @@ +{ + "OFPTableStatus": { + "reason": 3, + "table": { + "OFPTableDesc": { + "config": 0, + "length": 80, + "properties": [ + { + "OFPTableModPropEviction": { + "flags": 0, + "length": 8, + "type": 2 + } + }, + { + "OFPTableModPropVacancy": { + "length": 8, + "type": 3, + "vacancy": 0, + "vacancy_down": 0, + "vacancy_up": 0 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "table_id": 8 + } + } + } +} diff --git a/tests/unit/ofproto/json/of14/5-69-ofp_bundle_ctrl_msg.packet.json b/tests/unit/ofproto/json/of14/5-69-ofp_bundle_ctrl_msg.packet.json new file mode 100644 index 00000000..3e996eb5 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-69-ofp_bundle_ctrl_msg.packet.json @@ -0,0 +1,41 @@ +{ + "OFPBundleCtrlMsg": { + "bundle_id": 1234, + "flags": 1, + "properties": [ + { + "OFPBundlePropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPBundlePropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPBundlePropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "type": 0 + } +} diff --git a/tests/unit/ofproto/json/of14/5-7-ofp_set_config.packet.json b/tests/unit/ofproto/json/of14/5-7-ofp_set_config.packet.json new file mode 100644 index 00000000..cd5398b7 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-7-ofp_set_config.packet.json @@ -0,0 +1,6 @@ +{ + "OFPSetConfig": { + "flags": 0, + "miss_send_len": 128 + } +} diff --git a/tests/unit/ofproto/json/of14/5-70-ofp_bundle_add_msg.packet.json b/tests/unit/ofproto/json/of14/5-70-ofp_bundle_add_msg.packet.json new file mode 100644 index 00000000..53e9f7ea --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-70-ofp_bundle_add_msg.packet.json @@ -0,0 +1,45 @@ +{ + "OFPBundleAddMsg": { + "bundle_id": 1234, + "flags": 1, + "message": { + "OFPEchoRequest": { + "data": null + } + }, + "properties": [ + { + "OFPBundlePropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPBundlePropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPBundlePropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of14/5-71-ofp_requestforward.packet.json b/tests/unit/ofproto/json/of14/5-71-ofp_requestforward.packet.json new file mode 100644 index 00000000..e2def4fc --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-71-ofp_requestforward.packet.json @@ -0,0 +1,31 @@ +{ + "OFPRequestForward": { + "request": { + "OFPGroupMod": { + "buckets": [ + { + "OFPBucket": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 2, + "type": 0 + } + } + ], + "len": 32, + "watch_group": 1, + "watch_port": 1, + "weight": 1 + } + } + ], + "command": 0, + "group_id": 1, + "type": 0 + } + } + } +} diff --git a/tests/unit/ofproto/json/of14/5-8-ofp_get_config_request.packet.json b/tests/unit/ofproto/json/of14/5-8-ofp_get_config_request.packet.json new file mode 100644 index 00000000..06fe51f4 --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-8-ofp_get_config_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPGetConfigRequest": {} +} diff --git a/tests/unit/ofproto/json/of14/5-9-ofp_get_config_reply.packet.json b/tests/unit/ofproto/json/of14/5-9-ofp_get_config_reply.packet.json new file mode 100644 index 00000000..62b37b4d --- /dev/null +++ b/tests/unit/ofproto/json/of14/5-9-ofp_get_config_reply.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGetConfigReply": { + "flags": 0, + "miss_send_len": 128 + } +} diff --git a/tests/unit/ofproto/json/of14/lib-ofctl-ofp_table_features_request.packet.json b/tests/unit/ofproto/json/of14/lib-ofctl-ofp_table_features_request.packet.json new file mode 100644 index 00000000..6501de15 --- /dev/null +++ b/tests/unit/ofproto/json/of14/lib-ofctl-ofp_table_features_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPTableFeaturesStatsRequest": { + "body": [], + "flags": 0, + "type": 12 + } +} diff --git a/tests/unit/ofproto/json/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet.json b/tests/unit/ofproto/json/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet.json new file mode 100644 index 00000000..b859650d --- /dev/null +++ b/tests/unit/ofproto/json/of14/libofproto-OFP14-ofp_packet_out_packet_library.packet.json @@ -0,0 +1,61 @@ +{ + "OFPPacketOut": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 4294967292, + "type": 0 + } + } + ], + "actions_len": 16, + "buffer_id": 4294967295, + "data": { + "Packet": { + "protocols": [ + { + "ethernet": { + "dst": "f2:0b:a4:d0:3f:70", + "ethertype": 2048, + "src": "f2:0b:a4:7d:f8:ea" + } + }, + { + "ipv4": { + "csum": 44939, + "dst": "10.0.0.2", + "flags": 0, + "header_length": 5, + "identification": 63514, + "offset": 0, + "option": null, + "proto": 1, + "src": "10.0.0.1", + "tos": 0, + "total_length": 84, + "ttl": 255, + "version": 4 + } + }, + { + "icmp": { + "code": 0, + "csum": 520, + "data": { + "echo": { + "data": "MdYCAAAAAACrjS0xAAAAABAREhMUFRYXGBkaGxwdHh8gISIjJCUmJygpKissLS4vAAAAAAAAAAA=", + "id": 63328, + "seq": 0 + } + }, + "type": 8 + } + } + ] + } + }, + "in_port": 4294967293 + } +} diff --git a/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json b/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json new file mode 100644 index 00000000..9626ceea --- /dev/null +++ b/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_reply.packet.json @@ -0,0 +1,105 @@ +{ + "OFPFlowDescStatsReply": { + "body": [ + { + "OFPFlowDesc": { + "cookie": 1234605616436508552, + "flags": 1, + "hard_timeout": 255, + "idle_timeout": 255, + "importance": 43690, + "instructions": [ + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 2, + "type": 1 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionMeter": { + "len": 8, + "meter_id": 2, + "type": 29 + } + } + ], + "len": 8, + "type": 3 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionCopyField": { + "type": 28, + "len": 20, + "n_bits": 32, + "src_offset": 1, + "dst_offset": 2, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": false, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": false, + "length": 0, + "type": "eth_dst" + } + } + ] + } + } + ], + "len": 28, + "type": 4 + } + } + ], + "length": 84, + "match": { + "OFPMatch": { + "length": 12, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 1 + } + } + ], + "type": 1 + } + }, + "priority": 5, + "stats": { + "OFPStats": { + "length": 12, + "oxs_fields": [ + { + "OXSTlv": { + "field": "flow_count", + "value": 1 + } + } + ] + } + }, + "table_id": 1 + } + } + ], + "flags": 0, + "type": 1 + } +} diff --git a/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json b/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json new file mode 100644 index 00000000..62e46c65 --- /dev/null +++ b/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_desc_request.packet.json @@ -0,0 +1,26 @@ +{ + "OFPFlowDescStatsRequest": { + "cookie": 1234605616436508552, + "cookie_mask": 18446744073709551615, + "flags": 0, + "match": { + "OFPMatch": { + "length": 12, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 1 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 1, + "type": 1 + } +} diff --git a/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_mod.packet.json b/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_mod.packet.json new file mode 100644 index 00000000..7fc12ed3 --- /dev/null +++ b/tests/unit/ofproto/json/of15/lib-ofctl-OFP15-flow_mod.packet.json @@ -0,0 +1,234 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 258 + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionCopyTtlOut": { + "len": 8, + "type": 11 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionPopPbb": { + "len": 8, + "type": 27 + } + }, + { + "OFPActionPushPbb": { + "ethertype": 4660, + "len": 8, + "type": 26 + } + }, + { + "OFPActionPopMpls": { + "ethertype": 39030, + "len": 8, + "type": 20 + } + }, + { + "OFPActionPushMpls": { + "ethertype": 34887, + "len": 8, + "type": 19 + } + }, + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionPushVlan": { + "ethertype": 33024, + "len": 8, + "type": 17 + } + }, + { + "OFPActionDecMplsTtl": { + "len": 8, + "type": 16 + } + }, + { + "OFPActionSetMplsTtl": { + "len": 8, + "mpls_ttl": 10, + "type": 15 + } + }, + { + "OFPActionDecNwTtl": { + "len": 8, + "type": 24 + } + }, + { + "OFPActionSetNwTtl": { + "len": 8, + "nw_ttl": 10, + "type": 23 + } + }, + { + "OFPActionExperimenterUnknown": { + "data": "AAECAwQFBgc=", + "experimenter": 101, + "len": 16, + "type": 65535 + } + }, + { + "OFPActionSetQueue": { + "len": 8, + "queue_id": 3, + "type": 21 + } + }, + { + "OFPActionMeter": { + "len": 8, + "meter_id": 2, + "type": 29 + } + }, + { + "OFPActionGroup": { + "group_id": 99, + "len": 8, + "type": 22 + } + }, + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 6, + "type": 0 + } + } + ], + "len": 176, + "type": 3 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "01:02:03:04:05:06" + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "pbb_uca", + "mask": null, + "value": 1 + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionCopyField": { + "type": 28, + "len": 20, + "n_bits": 32, + "src_offset": 1, + "dst_offset": 2, + "oxm_ids": [ + { + "OFPOxmId": { + "hasmask": false, + "length": 0, + "type": "eth_src" + } + }, + { + "OFPOxmId": { + "hasmask": false, + "length": 0, + "type": "eth_dst" + } + } + ] + } + } + ], + "len": 60, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of15/lib-ofctl-ofp_queue_stats_request.packet.json b/tests/unit/ofproto/json/of15/lib-ofctl-ofp_queue_stats_request.packet.json new file mode 100644 index 00000000..41d30f70 --- /dev/null +++ b/tests/unit/ofproto/json/of15/lib-ofctl-ofp_queue_stats_request.packet.json @@ -0,0 +1,8 @@ +{ + "OFPQueueStatsRequest": { + "flags": 0, + "port_no": 4294967295, + "queue_id": 4294967295, + "type": 5 + } +} diff --git a/tests/unit/ofproto/json/of15/lib-ofctl-ofp_table_features_request.packet.json b/tests/unit/ofproto/json/of15/lib-ofctl-ofp_table_features_request.packet.json new file mode 100644 index 00000000..6501de15 --- /dev/null +++ b/tests/unit/ofproto/json/of15/lib-ofctl-ofp_table_features_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPTableFeaturesStatsRequest": { + "body": [], + "flags": 0, + "type": 12 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json new file mode 100644 index 00000000..07cb6c2f --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_reply.packet.json @@ -0,0 +1,24 @@ +{ + "OFPAggregateStatsReply": { + "body": { + "OFPAggregateStats": { + "length": 16, + "stats": { + "OFPStats": { + "length": 12, + "oxs_fields": [ + { + "OXSTlv": { + "field": "flow_count", + "value": 1 + } + } + ] + } + } + } + }, + "flags": 0, + "type": 2 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json new file mode 100644 index 00000000..248131fd --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-aggregate_stats_request.packet.json @@ -0,0 +1,18 @@ +{ + "OFPAggregateStatsRequest": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 255, + "type": 2 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json new file mode 100644 index 00000000..11f8cfcc --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_reply.packet.json @@ -0,0 +1,3 @@ +{ + "OFPBarrierReply": {} +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json new file mode 100644 index 00000000..2aae9ec3 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-barrier_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPBarrierRequest": {} +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_add.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_add.packet.json new file mode 100644 index 00000000..5a1ddb19 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_add.packet.json @@ -0,0 +1,200 @@ +{ + "OFPBundleAddMsg": { + "bundle_id": 99999999, + "flags": 1, + "message": { + "OFPFlowMod": { + "buffer_id": 0, + "command": 0, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 39032, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.9" + } + }, + "len": 16, + "type": 25 + } + }, + { + "NXActionLearn": { + "cookie": 0, + "experimenter": 8992, + "fin_hard_timeout": 0, + "fin_idle_timeout": 0, + "flags": 0, + "hard_timeout": 300, + "idle_timeout": 0, + "len": 96, + "priority": 1, + "specs": [ + { + "NXFlowSpecMatch": { + "dst": [ + "vlan_vid", + 0 + ], + "n_bits": 12, + "src": [ + "vlan_vid", + 0 + ] + } + }, + { + "NXFlowSpecMatch": { + "dst": [ + "eth_dst_nxm", + 0 + ], + "n_bits": 48, + "src": [ + "eth_src_nxm", + 0 + ] + } + }, + { + "NXFlowSpecLoad": { + "dst": [ + "vlan_vid", + 0 + ], + "n_bits": 12, + "src": 0 + } + }, + { + "NXFlowSpecLoad": { + "dst": [ + "tunnel_id_nxm", + 0 + ], + "n_bits": 64, + "src": [ + "tunnel_id_nxm", + 0 + ] + } + }, + { + "NXFlowSpecOutput": { + "dst": "", + "n_bits": 32, + "src": [ + "in_port", + 0 + ] + } + } + ], + "subtype": 16, + "table_id": 99, + "type": 65535 + } + } + ], + "len": 128, + "type": 4 + } + }, + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 100, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 70, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "aa:bb:cc:99:88:77" + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5095 + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.1" + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 50000 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "192.168.2.3" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "192.168.2.4" + } + } + ], + "type": 1 + } + }, + "out_group": 0, + "out_port": 0, + "priority": 0, + "table_id": 2 + } + }, + "properties": [] + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_ctrl.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_ctrl.packet.json new file mode 100644 index 00000000..d7e858fd --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_ctrl.packet.json @@ -0,0 +1,8 @@ +{ + "OFPBundleCtrlMsg": { + "bundle_id": 99999999, + "flags": 1, + "properties": [], + "type": 1 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_reply.packet.json new file mode 100644 index 00000000..943d7857 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_reply.packet.json @@ -0,0 +1,43 @@ +{ + "OFPBundleFeaturesStatsReply": { + "body": { + "OFPBundleFeaturesStats": { + "capabilities": 7, + "properties": [ + { + "OFPBundleFeaturesPropTime": { + "length": 72, + "sched_accuracy": { + "OFPTime": { + "nanoseconds": 1717986918, + "seconds": 6148914691236517205 + } + }, + "sched_max_future": { + "OFPTime": { + "nanoseconds": 2290649224, + "seconds": 8608480567731124087 + } + }, + "sched_max_past": { + "OFPTime": { + "nanoseconds": 2863311530, + "seconds": 11068046444225730969 + } + }, + "timestamp": { + "OFPTime": { + "nanoseconds": 3435973836, + "seconds": 13527612320720337851 + } + }, + "type": 1 + } + } + ] + } + }, + "flags": 0, + "type": 19 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_request.packet.json new file mode 100644 index 00000000..325181c1 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-bundle_features_request.packet.json @@ -0,0 +1,39 @@ +{ + "OFPBundleFeaturesStatsRequest": { + "feature_request_flags": 3, + "flags": 0, + "properties": [ + { + "OFPBundleFeaturesPropTime": { + "length": 72, + "sched_accuracy": { + "OFPTime": { + "nanoseconds": 1717986918, + "seconds": 6148914691236517205 + } + }, + "sched_max_future": { + "OFPTime": { + "nanoseconds": 2290649224, + "seconds": 8608480567731124087 + } + }, + "sched_max_past": { + "OFPTime": { + "nanoseconds": 2863311530, + "seconds": 11068046444225730969 + } + }, + "timestamp": { + "OFPTime": { + "nanoseconds": 3435973836, + "seconds": 13527612320720337851 + } + }, + "type": 1 + } + } + ], + "type": 19 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status.packet.json new file mode 100644 index 00000000..d9a74bfe --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status.packet.json @@ -0,0 +1,22 @@ +{ + "OFPControllerStatus": { + "status": { + "OFPControllerStatusStats": { + "channel_status": 1, + "length": 48, + "properties": [ + { + "OFPControllerStatusPropUri": { + "length": 26, + "type": 0, + "uri": "tls:192.168.34.23:6653" + } + } + ], + "reason": 1, + "role": 1, + "short_id": 65535 + } + } + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_reply.packet.json new file mode 100644 index 00000000..002f0f1d --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_reply.packet.json @@ -0,0 +1,26 @@ +{ + "OFPControllerStatusStatsReply": { + "body": [ + { + "OFPControllerStatusStats": { + "channel_status": 1, + "length": 48, + "properties": [ + { + "OFPControllerStatusPropUri": { + "length": 26, + "type": 0, + "uri": "tls:192.168.34.23:6653" + } + } + ], + "reason": 1, + "role": 1, + "short_id": 65535 + } + } + ], + "flags": 0, + "type": 18 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_request.packet.json new file mode 100644 index 00000000..d9a8ef8b --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-controller_status_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPControllerStatusStatsRequest": { + "flags": 0, + "type": 18 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json new file mode 100644 index 00000000..26e5dc2d --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_reply.packet.json @@ -0,0 +1,15 @@ +{ + "OFPDescStatsReply": { + "body": { + "OFPDescStats": { + "dp_desc": "dp", + "hw_desc": "hw", + "mfr_desc": "mfr", + "serial_num": "serial", + "sw_desc": "sw" + } + }, + "flags": 0, + "type": 0 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json new file mode 100644 index 00000000..5b23f8bc --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-desc_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPDescStatsRequest": { + "flags": 0, + "type": 0 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json new file mode 100644 index 00000000..011bd6de --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_reply.packet.json @@ -0,0 +1,5 @@ +{ + "OFPEchoReply": { + "data": "" + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json new file mode 100644 index 00000000..501a8479 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-echo_request.packet.json @@ -0,0 +1,5 @@ +{ + "OFPEchoRequest": { + "data": "" + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json new file mode 100644 index 00000000..b76f05c7 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg.packet.json @@ -0,0 +1,7 @@ +{ + "OFPErrorMsg": { + "code": 6, + "data": "Bg4ACAAAAAA=", + "type": 4 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json new file mode 100644 index 00000000..37bfb6a9 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-error_msg_experimenter.packet.json @@ -0,0 +1,8 @@ +{ + "OFPErrorExperimenterMsg": { + "data": "amlra2VuIGRhdGE=", + "exp_type": 60000, + "experimenter": 999999, + "type": 65535 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter.packet.json new file mode 100644 index 00000000..0e749179 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter.packet.json @@ -0,0 +1,7 @@ +{ + "OFPExperimenter": { + "data": "bmF6bw==", + "exp_type": 123456789, + "experimenter": 98765432 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json new file mode 100644 index 00000000..1eb06b84 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_reply.packet.json @@ -0,0 +1,13 @@ +{ + "OFPExperimenterStatsReply": { + "body": { + "OFPExperimenterMultipart": { + "data": "dGVzdGRhdGE5OTk5OTk5OQ==", + "exp_type": 3405674359, + "experimenter": 3735928495 + } + }, + "flags": 0, + "type": 65535 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json new file mode 100644 index 00000000..93af3039 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-experimenter_request.packet.json @@ -0,0 +1,9 @@ +{ + "OFPExperimenterStatsRequest": { + "data": "aG9nZWhvZ2U=", + "exp_type": 3405678728, + "experimenter": 3735928495, + "flags": 0, + "type": 65535 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json new file mode 100644 index 00000000..3d828093 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-features_reply.packet.json @@ -0,0 +1,9 @@ +{ + "OFPSwitchFeatures": { + "auxiliary_id": 0, + "capabilities": 79, + "datapath_id": 1, + "n_buffers": 255, + "n_tables": 255 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json new file mode 100644 index 00000000..8f48ad5a --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-features_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPFeaturesRequest": {} +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_reply.packet.json new file mode 100644 index 00000000..3caab6f9 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_reply.packet.json @@ -0,0 +1,57 @@ +{ + "OFPFlowDescStatsReply": { + "body": [ + { + "OFPFlowDesc": { + "cookie": 1234605616436508552, + "flags": 1, + "hard_timeout": 255, + "idle_timeout": 255, + "importance": 43690, + "instructions": [ + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 2, + "type": 1 + } + } + ], + "length": 64, + "match": { + "OFPMatch": { + "length": 12, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 1 + } + } + ], + "type": 1 + } + }, + "priority": 5, + "stats": { + "OFPStats": { + "length": 12, + "oxs_fields": [ + { + "OXSTlv": { + "field": "flow_count", + "value": 1 + } + } + ] + } + }, + "table_id": 1 + } + } + ], + "flags": 0, + "type": 1 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_request.packet.json new file mode 100644 index 00000000..62e46c65 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_desc_request.packet.json @@ -0,0 +1,26 @@ +{ + "OFPFlowDescStatsRequest": { + "cookie": 1234605616436508552, + "cookie_mask": 18446744073709551615, + "flags": 0, + "match": { + "OFPMatch": { + "length": 12, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 1 + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 1, + "type": 1 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod.packet.json new file mode 100644 index 00000000..ac6dce7e --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod.packet.json @@ -0,0 +1,193 @@ +{ + "OFPFlowMod": { + "buffer_id": 0, + "command": 0, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 39032, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.9" + } + }, + "len": 16, + "type": 25 + } + }, + { + "NXActionLearn": { + "cookie": 0, + "experimenter": 8992, + "fin_hard_timeout": 0, + "fin_idle_timeout": 0, + "flags": 0, + "hard_timeout": 300, + "idle_timeout": 0, + "len": 96, + "priority": 1, + "specs": [ + { + "NXFlowSpecMatch": { + "dst": [ + "vlan_vid", + 0 + ], + "n_bits": 12, + "src": [ + "vlan_vid", + 0 + ] + } + }, + { + "NXFlowSpecMatch": { + "dst": [ + "eth_dst_nxm", + 0 + ], + "n_bits": 48, + "src": [ + "eth_src_nxm", + 0 + ] + } + }, + { + "NXFlowSpecLoad": { + "dst": [ + "vlan_vid", + 0 + ], + "n_bits": 12, + "src": 0 + } + }, + { + "NXFlowSpecLoad": { + "dst": [ + "tunnel_id_nxm", + 0 + ], + "n_bits": 64, + "src": [ + "tunnel_id_nxm", + 0 + ] + } + }, + { + "NXFlowSpecOutput": { + "dst": "", + "n_bits": 32, + "src": [ + "in_port", + 0 + ] + } + } + ], + "subtype": 16, + "table_id": 99, + "type": 65535 + } + } + ], + "len": 128, + "type": 4 + } + }, + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 100, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 70, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "aa:bb:cc:99:88:77" + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5095 + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.1" + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 50000 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "192.168.2.3" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "192.168.2.4" + } + } + ], + "type": 1 + } + }, + "out_group": 0, + "out_port": 0, + "priority": 0, + "table_id": 2 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_conjunction.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_conjunction.packet.json new file mode 100644 index 00000000..6ca74d51 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_conjunction.packet.json @@ -0,0 +1,101 @@ +{ + "OFPFlowMod": { + "buffer_id": 0, + "command": 0, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 39032, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "NXActionConjunction": { + "clause": 1, + "experimenter": 8992, + "id": 11259375, + "len": 16, + "n_clauses": 2, + "subtype": 34, + "type": 65535 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 70, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + }, + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "aa:bb:cc:99:88:77" + } + }, + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2048 + } + }, + { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 5095 + } + }, + { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.1" + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 50000 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "192.168.2.3" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "192.168.2.4" + } + } + ], + "type": 1 + } + }, + "out_group": 0, + "out_port": 0, + "priority": 0, + "table_id": 4 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_match_conj.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_match_conj.packet.json new file mode 100644 index 00000000..2d0b9ad4 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_match_conj.packet.json @@ -0,0 +1,67 @@ +{ + "OFPFlowMod": { + "buffer_id": 0, + "command": 0, + "cookie": 1311768467463790320, + "cookie_mask": 18446744073709551615, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 39032, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.9" + } + }, + "len": 16, + "type": 25 + } + } + ], + "len": 32, + "type": 4 + } + }, + { + "OFPInstructionGotoTable": { + "len": 8, + "table_id": 100, + "type": 1 + } + } + ], + "match": { + "OFPMatch": { + "length": 12, + "oxm_fields": [ + { + "OXMTlv": { + "field": "conj_id", + "mask": null, + "value": 11259375 + } + } + ], + "type": 1 + } + }, + "out_group": 0, + "out_port": 0, + "priority": 0, + "table_id": 3 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json new file mode 100644 index 00000000..5f789d52 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_mod_no_nx.packet.json @@ -0,0 +1,202 @@ +{ + "OFPFlowMod": { + "buffer_id": 65535, + "command": 0, + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "hard_timeout": 0, + "idle_timeout": 0, + "importance": 0, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "vlan_vid", + "mask": null, + "value": 258 + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionCopyTtlOut": { + "len": 8, + "type": 11 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionCopyTtlIn": { + "len": 8, + "type": 12 + } + }, + { + "OFPActionPopPbb": { + "len": 8, + "type": 27 + } + }, + { + "OFPActionPushPbb": { + "ethertype": 4660, + "len": 8, + "type": 26 + } + }, + { + "OFPActionPopMpls": { + "ethertype": 39030, + "len": 8, + "type": 20 + } + }, + { + "OFPActionPushMpls": { + "ethertype": 34887, + "len": 8, + "type": 19 + } + }, + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionPushVlan": { + "ethertype": 33024, + "len": 8, + "type": 17 + } + }, + { + "OFPActionDecMplsTtl": { + "len": 8, + "type": 16 + } + }, + { + "OFPActionSetMplsTtl": { + "len": 8, + "mpls_ttl": 10, + "type": 15 + } + }, + { + "OFPActionDecNwTtl": { + "len": 8, + "type": 24 + } + }, + { + "OFPActionSetNwTtl": { + "len": 8, + "nw_ttl": 10, + "type": 23 + } + }, + { + "OFPActionExperimenterUnknown": { + "data": "AAECAwQFBgc=", + "experimenter": 101, + "len": 16, + "type": 65535 + } + }, + { + "OFPActionSetQueue": { + "len": 8, + "queue_id": 3, + "type": 21 + } + }, + { + "OFPActionGroup": { + "group_id": 99, + "len": 8, + "type": 22 + } + }, + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 6, + "type": 0 + } + } + ], + "len": 176, + "type": 3 + } + }, + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "01:02:03:04:05:06" + } + }, + "len": 16, + "type": 25 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "pbb_uca", + "mask": null, + "value": 1 + } + }, + "len": 16, + "type": 25 + } + } + ], + "len": 40, + "type": 4 + } + } + ], + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "priority": 123, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json new file mode 100644 index 00000000..8c028877 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_reply.packet.json @@ -0,0 +1,66 @@ +{ + "OFPFlowMonitorReply": { + "body": [ + { + "OFPFlowUpdateFull": { + "cookie": 0, + "event": 0, + "hard_timeout": 700, + "idle_timeout": 600, + "instructions": [ + { + "OFPInstructionActions": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 0, + "port": 4294967290, + "type": 0 + } + } + ], + "len": 24, + "type": 4 + } + } + ], + "length": 64, + "match": { + "OFPMatch": { + "length": 10, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_type", + "mask": null, + "value": 2054 + } + } + ], + "type": 1 + } + }, + "priority": 3, + "reason": 0, + "table_id": 0 + } + }, + { + "OFPFlowUpdateAbbrev": { + "event": 4, + "length": 8, + "xid": 1234 + } + }, + { + "OFPFlowUpdatePaused": { + "event": 5, + "length": 8 + } + } + ], + "flags": 0, + "type": 16 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json new file mode 100644 index 00000000..aed7ddaa --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_monitor_request.packet.json @@ -0,0 +1,27 @@ +{ + "OFPFlowMonitorRequest": { + "command": 0, + "flags": 0, + "match": { + "OFPMatch": { + "length": 14, + "oxm_fields": [ + { + "OXMTlv": { + "field": "eth_dst", + "mask": null, + "value": "f2:0b:a4:7d:f8:ea" + } + } + ], + "type": 1 + } + }, + "monitor_flags": 15, + "monitor_id": 100000000, + "out_group": 4294967295, + "out_port": 22, + "table_id": 33, + "type": 16 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_removed.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_removed.packet.json new file mode 100644 index 00000000..daf05248 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_removed.packet.json @@ -0,0 +1,38 @@ +{ + "OFPFlowRemoved": { + "cookie": 1234605616436508552, + "hard_timeout": 255, + "idle_timeout": 255, + "match": { + "OFPMatch": { + "length": 12, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 1 + } + } + ], + "type": 1 + } + }, + "priority": 1, + "reason": 0, + "stats": { + "OFPStats": { + "length": 12, + "oxs_fields": [ + { + "OXSTlv": { + "field": "flow_count", + "value": 1 + } + } + ] + } + }, + "table_id": 1 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_reply.packet.json new file mode 100644 index 00000000..e2713569 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_reply.packet.json @@ -0,0 +1,44 @@ +{ + "OFPFlowStatsReply": { + "body": [ + { + "OFPFlowStats": { + "length": 40, + "match": { + "OFPMatch": { + "length": 12, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 1 + } + } + ], + "type": 1 + } + }, + "priority": 1, + "reason": 0, + "stats": { + "OFPStats": { + "length": 12, + "oxs_fields": [ + { + "OXSTlv": { + "field": "flow_count", + "value": 1 + } + } + ] + } + }, + "table_id": 1 + } + } + ], + "flags": 0, + "type": 17 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json new file mode 100644 index 00000000..cc9de0a6 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-flow_stats_request.packet.json @@ -0,0 +1,18 @@ +{ + "OFPFlowStatsRequest": { + "cookie": 0, + "cookie_mask": 0, + "flags": 0, + "match": { + "OFPMatch": { + "length": 4, + "oxm_fields": [], + "type": 1 + } + }, + "out_group": 4294967295, + "out_port": 4294967295, + "table_id": 0, + "type": 17 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json new file mode 100644 index 00000000..82c9e794 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_reply.packet.json @@ -0,0 +1,122 @@ +{ + "OFPGetAsyncReply": { + "properties": [ + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 0 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 1 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 2 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 3 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 4 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 5 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 6 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 7 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 24, + "type": 8 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 24, + "type": 9 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 10 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 11 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65534 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json new file mode 100644 index 00000000..7daa5a0f --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-get_async_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPGetAsyncRequest": {} +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json new file mode 100644 index 00000000..62b37b4d --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_reply.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGetConfigReply": { + "flags": 0, + "miss_send_len": 128 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json new file mode 100644 index 00000000..06fe51f4 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-get_config_request.packet.json @@ -0,0 +1,3 @@ +{ + "OFPGetConfigRequest": {} +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_reply.packet.json new file mode 100644 index 00000000..03c136d7 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_reply.packet.json @@ -0,0 +1,45 @@ +{ + "OFPGroupDescStatsReply": { + "body": [ + { + "OFPGroupDescStats": { + "bucket_array_len": 32, + "buckets": [ + { + "OFPBucket": { + "action_array_len": 16, + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65509, + "port": 1, + "type": 0 + } + } + ], + "bucket_id": 65535, + "len": 32, + "properties": [ + { + "OFPGroupBucketPropWeight": { + "length": 8, + "type": 0, + "weight": 65535 + } + } + ] + } + } + ], + "group_id": 1, + "length": 48, + "properties": [], + "type": 1 + } + } + ], + "flags": 0, + "type": 7 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_request.packet.json new file mode 100644 index 00000000..1589ed61 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_desc_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPGroupDescStatsRequest": { + "flags": 0, + "group_id": 52651, + "type": 7 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json new file mode 100644 index 00000000..f059f994 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_reply.packet.json @@ -0,0 +1,24 @@ +{ + "OFPGroupFeaturesStatsReply": { + "body": { + "OFPGroupFeaturesStats": { + "actions": [ + 67082241, + 67082241, + 67082241, + 67082241 + ], + "capabilities": 5, + "max_groups": [ + 16777216, + 16777216, + 16777216, + 16777216 + ], + "types": 15 + } + }, + "flags": 0, + "type": 8 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json new file mode 100644 index 00000000..edba5dc5 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_features_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPGroupFeaturesStatsRequest": { + "flags": 0, + "type": 8 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-group_mod.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_mod.packet.json new file mode 100644 index 00000000..d168fefd --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_mod.packet.json @@ -0,0 +1,63 @@ +{ + "OFPGroupMod": { + "bucket_array_len": 56, + "buckets": [ + { + "OFPBucket": { + "action_array_len": 24, + "actions": [ + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.9" + } + }, + "len": 16, + "type": 25 + } + } + ], + "bucket_id": 305419896, + "len": 56, + "properties": [ + { + "OFPGroupBucketPropWeight": { + "length": 8, + "type": 0, + "weight": 52428 + } + }, + { + "OFPGroupBucketPropWatch": { + "length": 8, + "type": 1, + "watch": 56797 + } + }, + { + "OFPGroupBucketPropWatch": { + "length": 8, + "type": 2, + "watch": 4008636142 + } + } + ] + } + } + ], + "command": 3, + "command_bucket_id": 3149642683, + "group_id": 2863311530, + "properties": [], + "type": 1 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json new file mode 100644 index 00000000..cb979e54 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_reply.packet.json @@ -0,0 +1,27 @@ +{ + "OFPGroupStatsReply": { + "body": [ + { + "OFPGroupStats": { + "bucket_stats": [ + { + "OFPBucketCounter": { + "byte_count": 2345, + "packet_count": 234 + } + } + ], + "byte_count": 12345, + "duration_nsec": 609036000, + "duration_sec": 9, + "group_id": 1, + "length": 56, + "packet_count": 123, + "ref_count": 2 + } + } + ], + "flags": 0, + "type": 6 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json new file mode 100644 index 00000000..b200a81c --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-group_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPGroupStatsRequest": { + "flags": 0, + "group_id": 4294967292, + "type": 6 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json new file mode 100644 index 00000000..3c01f80b --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-hello.packet.json @@ -0,0 +1,15 @@ +{ + "OFPHello": { + "elements": [ + { + "OFPHelloElemVersionBitmap": { + "length": 8, + "type": 1, + "versions": [ + 6 + ] + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json new file mode 100644 index 00000000..4ea5bfcf --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_reply.packet.json @@ -0,0 +1,25 @@ +{ + "OFPMeterDescStatsReply": { + "body": [ + { + "OFPMeterDescStats": { + "bands": [ + { + "OFPMeterBandDrop": { + "burst_size": 10, + "len": 16, + "rate": 1000, + "type": 1 + } + } + ], + "flags": 14, + "length": 24, + "meter_id": 100 + } + } + ], + "flags": 0, + "type": 10 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json new file mode 100644 index 00000000..fdc1adc9 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_desc_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPMeterDescStatsRequest": { + "flags": 0, + "meter_id": 4294967295, + "type": 10 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json new file mode 100644 index 00000000..f9fb7848 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_reply.packet.json @@ -0,0 +1,18 @@ +{ + "OFPMeterFeaturesStatsReply": { + "body": [ + { + "OFPMeterFeaturesStats": { + "band_types": 2147483654, + "capabilities": 15, + "features": 3, + "max_bands": 255, + "max_color": 0, + "max_meter": 16777216 + } + } + ], + "flags": 0, + "type": 11 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json new file mode 100644 index 00000000..7363a342 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_features_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPMeterFeaturesStatsRequest": { + "flags": 0, + "type": 11 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json new file mode 100644 index 00000000..5bb43719 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_mod.packet.json @@ -0,0 +1,26 @@ +{ + "OFPMeterMod": { + "bands": [ + { + "OFPMeterBandDrop": { + "burst_size": 10, + "len": 16, + "rate": 1000, + "type": 1 + } + }, + { + "OFPMeterBandDscpRemark": { + "burst_size": 10, + "len": 16, + "prec_level": 1, + "rate": 1000, + "type": 2 + } + } + ], + "command": 0, + "flags": 14, + "meter_id": 100 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json new file mode 100644 index 00000000..1bb4b39e --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_reply.packet.json @@ -0,0 +1,27 @@ +{ + "OFPMeterStatsReply": { + "body": [ + { + "OFPMeterStats": { + "band_stats": [ + { + "OFPMeterBandStats": { + "byte_band_count": 0, + "packet_band_count": 0 + } + } + ], + "byte_in_count": 0, + "duration_nsec": 480000, + "duration_sec": 0, + "ref_count": 0, + "len": 56, + "meter_id": 100, + "packet_in_count": 0 + } + } + ], + "flags": 0, + "type": 9 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json new file mode 100644 index 00000000..8d45799b --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-meter_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPMeterStatsRequest": { + "flags": 0, + "meter_id": 4294967295, + "type": 9 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_in.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_in.packet.json new file mode 100644 index 00000000..e5fd0bd9 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_in.packet.json @@ -0,0 +1,46 @@ +{ + "OFPPacketIn": { + "buffer_id": 200, + "cookie": 0, + "data": "aG9nZQ==", + "match": { + "OFPMatch": { + "length": 40, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 43981 + } + }, + { + "OXMTlv": { + "field": "tunnel_id", + "mask": null, + "value": 50000 + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_src", + "mask": null, + "value": "192.168.2.3" + } + }, + { + "OXMTlv": { + "field": "tun_ipv4_dst", + "mask": null, + "value": "192.168.2.4" + } + } + ], + "type": 1 + } + }, + "reason": 0, + "table_id": 100, + "total_len": 1000 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_out.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_out.packet.json new file mode 100644 index 00000000..d8287cce --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-packet_out.packet.json @@ -0,0 +1,32 @@ +{ + "OFPPacketOut": { + "actions": [ + { + "OFPActionOutput": { + "len": 16, + "max_len": 65535, + "port": 4294967291, + "type": 0 + } + } + ], + "actions_len": 16, + "buffer_id": 4294967295, + "data": "dGVzdA==", + "match": { + "OFPMatch": { + "length": 12, + "oxm_fields": [ + { + "OXMTlv": { + "field": "in_port", + "mask": null, + "value": 4294967040 + } + } + ], + "type": 1 + } + } + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json new file mode 100644 index 00000000..c281c0f8 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_reply.packet.json @@ -0,0 +1,103 @@ +{ + "OFPPortDescStatsReply": { + "body": [ + { + "OFPPort": { + "config": 0, + "hw_addr": "f2:0b:a4:d0:3f:70", + "length": 168, + "name": "Port7", + "port_no": 7, + "properties": [ + { + "OFPPortDescPropEthernet": { + "advertised": 10240, + "curr": 10248, + "curr_speed": 5000, + "length": 32, + "max_speed": 5000, + "peer": 10248, + "supported": 10248, + "type": 0 + } + }, + { + "OFPPortDescPropOptical": { + "length": 40, + "rx_grid_freq_lmda": 1500, + "rx_max_freq_lmda": 2000, + "rx_min_freq_lmda": 1000, + "supported": 1, + "tx_grid_freq_lmda": 1500, + "tx_max_freq_lmda": 2000, + "tx_min_freq_lmda": 1000, + "tx_pwr_max": 2000, + "tx_pwr_min": 1000, + "type": 1 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "state": 4 + } + }, + { + "OFPPort": { + "config": 0, + "hw_addr": "f2:0b:a4:7d:f8:ea", + "length": 72, + "name": "Port6", + "port_no": 6, + "properties": [ + { + "OFPPortDescPropEthernet": { + "advertised": 10240, + "curr": 10248, + "curr_speed": 5000, + "length": 32, + "max_speed": 5000, + "peer": 10248, + "supported": 10248, + "type": 0 + } + } + ], + "state": 4 + } + } + ], + "flags": 0, + "type": 13 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_request.packet.json new file mode 100644 index 00000000..478f1327 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_desc_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPPortDescStatsRequest": { + "flags": 0, + "port_no": 48346, + "type": 13 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json new file mode 100644 index 00000000..a255b9dd --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_mod.packet.json @@ -0,0 +1,60 @@ +{ + "OFPPortMod": { + "config": 0, + "hw_addr": "00:11:00:00:11:11", + "mask": 0, + "port_no": 1, + "properties": [ + { + "OFPPortModPropEthernet": { + "advertise": 4096, + "length": 8, + "type": 0 + } + }, + { + "OFPPortModPropOptical": { + "configure": 3, + "fl_offset": 2000, + "freq_lmda": 1500, + "grid_span": 3000, + "length": 24, + "tx_pwr": 300, + "type": 1 + } + }, + { + "OFPPortModPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPPortModPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPPortModPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json new file mode 100644 index 00000000..4ea41742 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_reply.packet.json @@ -0,0 +1,113 @@ +{ + "OFPPortStatsReply": { + "body": [ + { + "OFPPortStats": { + "duration_nsec": 0, + "duration_sec": 0, + "length": 224, + "port_no": 7, + "properties": [ + { + "OFPPortStatsPropEthernet": { + "collisions": 0, + "length": 40, + "rx_crc_err": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "type": 0 + } + }, + { + "OFPPortStatsPropOptical": { + "bias_current": 300, + "flags": 3, + "length": 44, + "rx_freq_lmda": 1500, + "rx_grid_span": 500, + "rx_offset": 700, + "rx_pwr": 2000, + "temperature": 273, + "tx_freq_lmda": 1500, + "tx_grid_span": 500, + "tx_offset": 700, + "tx_pwr": 2000, + "type": 1 + } + }, + { + "OFPPortStatsPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPPortStatsPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPPortStatsPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "rx_bytes": 0, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 0, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + }, + { + "OFPPortStats": { + "duration_nsec": 0, + "duration_sec": 0, + "length": 120, + "port_no": 6, + "properties": [ + { + "OFPPortStatsPropEthernet": { + "collisions": 0, + "length": 40, + "rx_crc_err": 0, + "rx_frame_err": 0, + "rx_over_err": 0, + "type": 0 + } + } + ], + "rx_bytes": 336, + "rx_dropped": 0, + "rx_errors": 0, + "rx_packets": 4, + "tx_bytes": 336, + "tx_dropped": 0, + "tx_errors": 0, + "tx_packets": 4 + } + } + ], + "flags": 0, + "type": 4 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json new file mode 100644 index 00000000..5228710d --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_stats_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPPortStatsRequest": { + "flags": 0, + "port_no": 4294967295, + "type": 4 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json new file mode 100644 index 00000000..b273ac22 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-port_status.packet.json @@ -0,0 +1,76 @@ +{ + "OFPPortStatus": { + "desc": { + "OFPPort": { + "config": 0, + "hw_addr": "f2:0b:a4:d0:3f:70", + "length": 168, + "name": "\u79c1\u306e\u30dd\u30fc\u30c8", + "port_no": 7, + "properties": [ + { + "OFPPortDescPropEthernet": { + "advertised": 10240, + "curr": 10248, + "curr_speed": 5000, + "length": 32, + "max_speed": 5000, + "peer": 10248, + "supported": 10248, + "type": 0 + } + }, + { + "OFPPortDescPropOptical": { + "length": 40, + "rx_grid_freq_lmda": 1500, + "rx_max_freq_lmda": 2000, + "rx_min_freq_lmda": 1000, + "supported": 1, + "tx_grid_freq_lmda": 1500, + "tx_max_freq_lmda": 2000, + "tx_min_freq_lmda": 1000, + "tx_pwr_max": 2000, + "tx_pwr_min": 1000, + "type": 1 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPPortDescPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "state": 4 + } + }, + "reason": 0 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json new file mode 100644 index 00000000..26c8f7d5 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_reply.packet.json @@ -0,0 +1,81 @@ +{ + "OFPQueueDescStatsReply": { + "body": [ + { + "OFPQueueDesc": { + "len": 32, + "port_no": 7, + "properties": [ + { + "OFPQueueDescPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + } + ], + "queue_id": 0 + } + }, + { + "OFPQueueDesc": { + "len": 88, + "port_no": 8, + "properties": [ + { + "OFPQueueDescPropMinRate": { + "length": 8, + "rate": 300, + "type": 1 + } + }, + { + "OFPQueueDescPropMaxRate": { + "length": 8, + "rate": 900, + "type": 2 + } + }, + { + "OFPQueueDescPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPQueueDescPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPQueueDescPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "queue_id": 1 + } + } + ], + "flags": 0, + "type": 15 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_request.packet.json new file mode 100644 index 00000000..db1f85d5 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_desc_request.packet.json @@ -0,0 +1,8 @@ +{ + "OFPQueueDescStatsRequest": { + "flags": 0, + "port_no": 52651, + "queue_id": 57020, + "type": 15 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json new file mode 100644 index 00000000..2c190977 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_reply.packet.json @@ -0,0 +1,80 @@ +{ + "OFPQueueStatsReply": { + "body": [ + { + "OFPQueueStats": { + "duration_nsec": 0, + "duration_sec": 0, + "length": 104, + "port_no": 7, + "properties": [ + { + "OFPQueueStatsPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPQueueStatsPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPQueueStatsPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + }, + { + "OFPQueueStats": { + "duration_nsec": 0, + "duration_sec": 0, + "length": 48, + "port_no": 6, + "properties": [], + "queue_id": 1, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + }, + { + "OFPQueueStats": { + "duration_nsec": 0, + "duration_sec": 0, + "length": 48, + "port_no": 7, + "properties": [], + "queue_id": 2, + "tx_bytes": 0, + "tx_errors": 0, + "tx_packets": 0 + } + } + ], + "flags": 0, + "type": 5 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json new file mode 100644 index 00000000..99d8505d --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-queue_stats_request.packet.json @@ -0,0 +1,8 @@ +{ + "OFPQueueStatsRequest": { + "flags": 0, + "port_no": 43981, + "queue_id": 4294967295, + "type": 5 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json new file mode 100644 index 00000000..66368c20 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-requestforward.packet.json @@ -0,0 +1,67 @@ +{ + "OFPRequestForward": { + "request": { + "OFPGroupMod": { + "bucket_array_len": 56, + "buckets": [ + { + "OFPBucket": { + "action_array_len": 24, + "actions": [ + { + "OFPActionPopVlan": { + "len": 8, + "type": 18 + } + }, + { + "OFPActionSetField": { + "field": { + "OXMTlv": { + "field": "ipv4_dst", + "mask": null, + "value": "192.168.2.9" + } + }, + "len": 16, + "type": 25 + } + } + ], + "bucket_id": 305419896, + "len": 56, + "properties": [ + { + "OFPGroupBucketPropWeight": { + "length": 8, + "type": 0, + "weight": 52428 + } + }, + { + "OFPGroupBucketPropWatch": { + "length": 8, + "type": 1, + "watch": 56797 + } + }, + { + "OFPGroupBucketPropWatch": { + "length": 8, + "type": 2, + "watch": 4008636142 + } + } + ] + } + } + ], + "command": 3, + "command_bucket_id": 3149642683, + "group_id": 2863311530, + "properties": [], + "type": 1 + } + } + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-role_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-role_reply.packet.json new file mode 100644 index 00000000..e8be5895 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-role_reply.packet.json @@ -0,0 +1,7 @@ +{ + "OFPRoleReply": { + "generation_id": 1234605616436508552, + "role": 1, + "short_id": 43690 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-role_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-role_request.packet.json new file mode 100644 index 00000000..c0c120f6 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-role_request.packet.json @@ -0,0 +1,7 @@ +{ + "OFPRoleRequest": { + "generation_id": 1234605616436508552, + "role": 1, + "short_id": 43690 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json new file mode 100644 index 00000000..c88d3bfa --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-role_status.packet.json @@ -0,0 +1,8 @@ +{ + "OFPRoleStatus": { + "generation_id": 17356517385562371090, + "properties": [], + "reason": 0, + "role": 3 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json new file mode 100644 index 00000000..0802c14e --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-set_async.packet.json @@ -0,0 +1,122 @@ +{ + "OFPSetAsync": { + "properties": [ + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 0 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 1 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 2 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 3 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 4 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 5 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 6 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 7 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 24, + "type": 8 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 24, + "type": 9 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 10 + } + }, + { + "OFPAsyncConfigPropReasons": { + "length": 8, + "mask": 3, + "type": 11 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65534 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPAsyncConfigPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ] + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json new file mode 100644 index 00000000..cd5398b7 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-set_config.packet.json @@ -0,0 +1,6 @@ +{ + "OFPSetConfig": { + "flags": 0, + "miss_send_len": 128 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json new file mode 100644 index 00000000..1f3d7142 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_reply.packet.json @@ -0,0 +1,83 @@ +{ + "OFPTableDescStatsReply": { + "body": [ + { + "OFPTableDesc": { + "config": 0, + "length": 24, + "properties": [ + { + "OFPTableModPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + } + ], + "table_id": 7 + } + }, + { + "OFPTableDesc": { + "config": 0, + "length": 80, + "properties": [ + { + "OFPTableModPropEviction": { + "flags": 0, + "length": 8, + "type": 2 + } + }, + { + "OFPTableModPropVacancy": { + "length": 8, + "type": 3, + "vacancy": 0, + "vacancy_down": 0, + "vacancy_up": 0 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "table_id": 8 + } + } + ], + "flags": 0, + "type": 14 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json new file mode 100644 index 00000000..f5a4cde0 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_desc_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPTableDescStatsRequest": { + "flags": 0, + "type": 14 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_reply.packet.json new file mode 100644 index 00000000..864a85fd --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_reply.packet.json @@ -0,0 +1,38 @@ +{ + "OFPTableFeaturesStatsReply": { + "body": [ + { + "OFPTableFeaturesStats": { + "capabilities": 4, + "command": 1, + "features": 1, + "length": 80, + "max_entries": 255, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "table1", + "properties": [ + { + "OFPTableFeaturePropOxmValues": { + "length": 14, + "oxm_values": [ + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "aa:bb:cc:dd:ee:ff" + } + } + ], + "type": 22 + } + } + ], + "table_id": 1 + } + } + ], + "flags": 0, + "type": 12 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_request.packet.json new file mode 100644 index 00000000..986e1439 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_features_request.packet.json @@ -0,0 +1,38 @@ +{ + "OFPTableFeaturesStatsRequest": { + "body": [ + { + "OFPTableFeaturesStats": { + "capabilities": 4, + "command": 1, + "features": 1, + "length": 80, + "max_entries": 255, + "metadata_match": 18446744073709551615, + "metadata_write": 18446744073709551615, + "name": "table1", + "properties": [ + { + "OFPTableFeaturePropOxmValues": { + "length": 14, + "oxm_values": [ + { + "OXMTlv": { + "field": "eth_src", + "mask": null, + "value": "aa:bb:cc:dd:ee:ff" + } + } + ], + "type": 22 + } + } + ], + "table_id": 1 + } + } + ], + "flags": 0, + "type": 12 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json new file mode 100644 index 00000000..5adf812f --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_mod.packet.json @@ -0,0 +1,15 @@ +{ + "OFPTableMod": { + "config": 4, + "properties": [ + { + "OFPTableModPropEviction": { + "flags": 2, + "length": 8, + "type": 2 + } + } + ], + "table_id": 255 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json new file mode 100644 index 00000000..94801adb --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_reply.packet.json @@ -0,0 +1,24 @@ +{ + "OFPTableStatsReply": { + "body": [ + { + "OFPTableStats": { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 0 + } + }, + { + "OFPTableStats": { + "active_count": 4, + "lookup_count": 4, + "matched_count": 4, + "table_id": 1 + } + } + ], + "flags": 0, + "type": 3 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json new file mode 100644 index 00000000..1f965d77 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_stats_request.packet.json @@ -0,0 +1,6 @@ +{ + "OFPTableStatsRequest": { + "flags": 0, + "type": 3 + } +} diff --git a/tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json new file mode 100644 index 00000000..fde5fb77 --- /dev/null +++ b/tests/unit/ofproto/json/of15/libofproto-OFP15-table_status.packet.json @@ -0,0 +1,62 @@ +{ + "OFPTableStatus": { + "reason": 3, + "table": { + "OFPTableDesc": { + "config": 0, + "length": 80, + "properties": [ + { + "OFPTableModPropEviction": { + "flags": 0, + "length": 8, + "type": 2 + } + }, + { + "OFPTableModPropVacancy": { + "length": 8, + "type": 3, + "vacancy": 0, + "vacancy_down": 0, + "vacancy_up": 0 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [], + "exp_type": 0, + "experimenter": 101, + "length": 12, + "type": 65535 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [ + 1 + ], + "exp_type": 1, + "experimenter": 101, + "length": 16, + "type": 65535 + } + }, + { + "OFPTableModPropExperimenter": { + "data": [ + 1, + 2 + ], + "exp_type": 2, + "experimenter": 101, + "length": 20, + "type": 65535 + } + } + ], + "table_id": 8 + } + } + } +} diff --git a/tests/unit/ofproto/test_ether.py b/tests/unit/ofproto/test_ether.py new file mode 100644 index 00000000..dead1a43 --- /dev/null +++ b/tests/unit/ofproto/test_ether.py @@ -0,0 +1,37 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +from nose.tools import eq_ +from ryu.ofproto.ether import * + + +LOG = logging.getLogger('test_ether') + + +class TestInet(unittest.TestCase): + """ Test case for ether + """ + + def test_ether_type(self): + eq_(ETH_TYPE_IP, 0x0800) + eq_(ETH_TYPE_ARP, 0x0806) + eq_(ETH_TYPE_8021Q, 0x8100) + eq_(ETH_TYPE_IPV6, 0x86dd) + eq_(ETH_TYPE_MPLS, 0x8847) + eq_(ETH_TYPE_SLOW, 0x8809) diff --git a/tests/unit/ofproto/test_inet.py b/tests/unit/ofproto/test_inet.py new file mode 100644 index 00000000..92a82ac4 --- /dev/null +++ b/tests/unit/ofproto/test_inet.py @@ -0,0 +1,43 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +from nose.tools import eq_ +from ryu.ofproto.inet import * + + +LOG = logging.getLogger('test_inet') + + +class TestInet(unittest.TestCase): + """ Test case for inet + """ + + def test_ip_proto(self): + eq_(IPPROTO_IP, 0) + eq_(IPPROTO_HOPOPTS, 0) + eq_(IPPROTO_ICMP, 1) + eq_(IPPROTO_TCP, 6) + eq_(IPPROTO_UDP, 17) + eq_(IPPROTO_ROUTING, 43) + eq_(IPPROTO_FRAGMENT, 44) + eq_(IPPROTO_AH, 51) + eq_(IPPROTO_ICMPV6, 58) + eq_(IPPROTO_NONE, 59) + eq_(IPPROTO_DSTOPTS, 60) + eq_(IPPROTO_SCTP, 132) diff --git a/tests/unit/ofproto/test_nx_flow_spec.py b/tests/unit/ofproto/test_nx_flow_spec.py new file mode 100644 index 00000000..e0bf6b4e --- /dev/null +++ b/tests/unit/ofproto/test_nx_flow_spec.py @@ -0,0 +1,95 @@ +# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2015 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import ryu.ofproto.ofproto_v1_3_parser as ofpp + + +class Test_FlowSpec(unittest.TestCase): + def test_flowspec_src_0_dst_0(self): + user = ofpp.NXFlowSpecMatch(src=('in_port', 0), + dst=('in_port', 0), + n_bits=16) + on_wire = ( + b'\x00\x10' + b'\x80\x00\x00\x04\x00\x00' + b'\x80\x00\x00\x04\x00\x00' + ) + self.assertEqual(on_wire, user.serialize()) + (o, rest) = ofpp._NXFlowSpec.parse(on_wire) + self.assertEqual(user.to_jsondict(), o.to_jsondict()) + self.assertEqual(str(user), str(o)) + self.assertEqual(b'', rest) + + def test_flowspec_src_1_dst_0(self): + user = ofpp.NXFlowSpecMatch(src=99, + dst=('in_port', 0), + n_bits=16) + on_wire = ( + b'\x20\x10' + b'\x00\x63' + b'\x80\x00\x00\x04\x00\x00' + ) + self.assertEqual(on_wire, user.serialize()) + (o, rest) = ofpp._NXFlowSpec.parse(on_wire) + self.assertEqual(user.to_jsondict(), o.to_jsondict()) + self.assertEqual(str(user), str(o)) + self.assertEqual(b'', rest) + + def test_flowspec_src_0_dst_1(self): + user = ofpp.NXFlowSpecLoad(src=('in_port', 0), + dst=('in_port', 0), + n_bits=16) + on_wire = ( + b'\x08\x10' + b'\x80\x00\x00\x04\x00\x00' + b'\x80\x00\x00\x04\x00\x00' + ) + self.assertEqual(on_wire, user.serialize()) + (o, rest) = ofpp._NXFlowSpec.parse(on_wire) + self.assertEqual(user.to_jsondict(), o.to_jsondict()) + self.assertEqual(str(user), str(o)) + self.assertEqual(b'', rest) + + def test_flowspec_src_1_dst_1(self): + user = ofpp.NXFlowSpecLoad(src=99, + dst=('in_port', 0), + n_bits=16) + on_wire = ( + b'\x28\x10' + b'\x00\x63' + b'\x80\x00\x00\x04\x00\x00' + ) + self.assertEqual(on_wire, user.serialize()) + (o, rest) = ofpp._NXFlowSpec.parse(on_wire) + self.assertEqual(user.to_jsondict(), o.to_jsondict()) + self.assertEqual(str(user), str(o)) + self.assertEqual(b'', rest) + + def test_flowspec_src_0_dst_2(self): + user = ofpp.NXFlowSpecOutput(src=('in_port', 0), + dst='', + n_bits=16) + on_wire = ( + b'\x10\x10' + b'\x80\x00\x00\x04\x00\x00' + ) + self.assertEqual(on_wire, user.serialize()) + (o, rest) = ofpp._NXFlowSpec.parse(on_wire) + self.assertEqual(user.to_jsondict(), o.to_jsondict()) + self.assertEqual(str(user), str(o)) + self.assertEqual(b'', rest) diff --git a/tests/unit/ofproto/test_ofproto.py b/tests/unit/ofproto/test_ofproto.py new file mode 100644 index 00000000..47f1e544 --- /dev/null +++ b/tests/unit/ofproto/test_ofproto.py @@ -0,0 +1,81 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 Isaku Yamahata +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +try: + # Python 3 + from imp import reload +except ImportError: + # Python 2 + pass + +import unittest +import logging +from nose.tools import eq_ + + +LOG = logging.getLogger('test_ofproto') + + +class TestOfprotCommon(unittest.TestCase): + """ Test case for ofproto + """ + + def test_ofp_event(self): + import ryu.ofproto + reload(ryu.ofproto) + import ryu.controller.ofp_event + reload(ryu.controller.ofp_event) + + def test_ofproto(self): + # When new version of OFP support is added, + # this test must be updated. + import ryu.ofproto + reload(ryu.ofproto) + ofp_modules = ryu.ofproto.get_ofp_modules() + + import ryu.ofproto.ofproto_v1_0 + import ryu.ofproto.ofproto_v1_2 + import ryu.ofproto.ofproto_v1_3 + import ryu.ofproto.ofproto_v1_4 + import ryu.ofproto.ofproto_v1_5 + eq_(set(ofp_modules.keys()), set([ryu.ofproto.ofproto_v1_0.OFP_VERSION, + ryu.ofproto.ofproto_v1_2.OFP_VERSION, + ryu.ofproto.ofproto_v1_3.OFP_VERSION, + ryu.ofproto.ofproto_v1_4.OFP_VERSION, + ryu.ofproto.ofproto_v1_5.OFP_VERSION, + ])) + consts_mods = set([ofp_mod[0] for ofp_mod in ofp_modules.values()]) + eq_(consts_mods, set([ryu.ofproto.ofproto_v1_0, + ryu.ofproto.ofproto_v1_2, + ryu.ofproto.ofproto_v1_3, + ryu.ofproto.ofproto_v1_4, + ryu.ofproto.ofproto_v1_5, + ])) + + parser_mods = set([ofp_mod[1] for ofp_mod in ofp_modules.values()]) + import ryu.ofproto.ofproto_v1_0_parser + import ryu.ofproto.ofproto_v1_2_parser + import ryu.ofproto.ofproto_v1_3_parser + import ryu.ofproto.ofproto_v1_4_parser + import ryu.ofproto.ofproto_v1_5_parser + eq_(parser_mods, set([ryu.ofproto.ofproto_v1_0_parser, + ryu.ofproto.ofproto_v1_2_parser, + ryu.ofproto.ofproto_v1_3_parser, + ryu.ofproto.ofproto_v1_4_parser, + ryu.ofproto.ofproto_v1_5_parser, + ])) diff --git a/tests/unit/ofproto/test_ofproto_common.py b/tests/unit/ofproto/test_ofproto_common.py new file mode 100644 index 00000000..6a63236e --- /dev/null +++ b/tests/unit/ofproto/test_ofproto_common.py @@ -0,0 +1,37 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +from nose.tools import eq_ +from ryu.ofproto.ofproto_common import * + + +LOG = logging.getLogger('test_ofproto_common') + + +class TestOfprotCommon(unittest.TestCase): + """ Test case for ofproto_common + """ + + def test_struct_ofp_header(self): + eq_(OFP_HEADER_PACK_STR, '!BBHI') + eq_(OFP_HEADER_SIZE, 8) + + def test_define_constants(self): + eq_(OFP_TCP_PORT, 6653) + eq_(OFP_SSL_PORT, 6653) diff --git a/tests/unit/ofproto/test_ofproto_parser.py b/tests/unit/ofproto/test_ofproto_parser.py new file mode 100644 index 00000000..bc3c1fd1 --- /dev/null +++ b/tests/unit/ofproto/test_ofproto_parser.py @@ -0,0 +1,244 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import six + +import binascii +import unittest +from nose.tools import * +import struct +from ryu import exception + +from ryu.ofproto import ofproto_common, ofproto_parser +from ryu.ofproto import ofproto_v1_0, ofproto_v1_0_parser + +import logging +LOG = logging.getLogger(__name__) + +if six.PY3: + buffer = bytes + + +class TestOfproto_Parser(unittest.TestCase): + def setUp(self): + LOG.debug('setUp') + self.bufHello = binascii.unhexlify('0100000800000001') + + fr = '010600b0000000020000000000000abc' \ + + '00000100010000000000008700000fff' \ + + '0002aefa39d2b9177472656d61302d30' \ + + '00000000000000000000000000000000' \ + + '000000c0000000000000000000000000' \ + + 'fffe723f9a764cc87673775f30786162' \ + + '63000000000000000000000100000001' \ + + '00000082000000000000000000000000' \ + + '00012200d6c5a1947472656d61312d30' \ + + '00000000000000000000000000000000' \ + + '000000c0000000000000000000000000' + self.bufFeaturesReply = binascii.unhexlify(fr) + + pi = '010a005200000000000001010040' \ + + '00020000000000000002000000000001' \ + + '080045000032000000004011f967c0a8' \ + + '0001c0a8000200010001001e00000000' \ + + '00000000000000000000000000000000' \ + + '00000000' + self.bufPacketIn = binascii.unhexlify(pi) + + def tearDown(self): + LOG.debug('tearDown') + pass + + def testHello(self): + (version, + msg_type, + msg_len, + xid) = ofproto_parser.header(self.bufHello) + eq_(version, 1) + eq_(msg_type, 0) + eq_(msg_len, 8) + eq_(xid, 1) + + def testFeaturesReply(self): + (version, + msg_type, + msg_len, + xid) = ofproto_parser.header(self.bufFeaturesReply) + + msg = ofproto_parser.msg(self, + version, + msg_type, + msg_len, + xid, + self.bufFeaturesReply) + LOG.debug(msg) + + ok_(isinstance(msg, ofproto_v1_0_parser.OFPSwitchFeatures)) + LOG.debug(msg.ports[65534]) + ok_(isinstance(msg.ports[1], ofproto_v1_0_parser.OFPPhyPort)) + ok_(isinstance(msg.ports[2], ofproto_v1_0_parser.OFPPhyPort)) + ok_(isinstance(msg.ports[65534], ofproto_v1_0_parser.OFPPhyPort)) + + def testPacketIn(self): + (version, + msg_type, + msg_len, + xid) = ofproto_parser.header(self.bufPacketIn) + + msg = ofproto_parser.msg(self, + version, + msg_type, + msg_len, + xid, + self.bufPacketIn) + LOG.debug(msg) + ok_(isinstance(msg, ofproto_v1_0_parser.OFPPacketIn)) + + @raises(AssertionError) + def test_check_msg_len(self): + (version, + msg_type, + msg_len, + xid) = ofproto_parser.header(self.bufPacketIn) + + msg_len = len(self.bufPacketIn) + 1 + ofproto_parser.msg(self, + version, + msg_type, + msg_len, + xid, + self.bufPacketIn) + + @raises(exception.OFPUnknownVersion) + def test_check_msg_parser(self): + (version, + msg_type, + msg_len, + xid) = ofproto_parser.header(self.bufPacketIn) + + version = 0xff + ofproto_parser.msg(self, + version, + msg_type, + msg_len, + xid, + self.bufPacketIn) + + +class TestMsgBase(unittest.TestCase): + """ Test case for ofproto_parser.MsgBase + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_set_xid(self): + xid = 3841413783 + c = ofproto_parser.MsgBase(object) + c.set_xid(xid) + eq_(xid, c.xid) + + @raises(AssertionError) + def test_set_xid_check_xid(self): + xid = 2160492514 + c = ofproto_parser.MsgBase(object) + c.xid = xid + c.set_xid(xid) + + def _test_parser(self, msg_type=ofproto_v1_0.OFPT_HELLO): + version = ofproto_v1_0.OFP_VERSION + msg_len = ofproto_v1_0.OFP_HEADER_SIZE + xid = 2183948390 + data = b'\x00\x01\x02\x03' + + fmt = ofproto_v1_0.OFP_HEADER_PACK_STR + buf = struct.pack(fmt, version, msg_type, msg_len, xid) \ + + data + + res = ofproto_v1_0_parser.OFPHello.parser( + object, version, msg_type, msg_len, xid, bytearray(buf)) + + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(buffer(buf), res.buf) + + # test __str__() + list_ = ('version', 'msg_type', 'msg_len', 'xid') + check = {} + for s in str(res).rsplit(','): + if '=' in s: + (k, v,) = s.rsplit('=') + if k in list_: + check[k] = v + + eq_(hex(ofproto_v1_0.OFP_VERSION), check['version']) + eq_(hex(ofproto_v1_0.OFPT_HELLO), check['msg_type']) + eq_(hex(msg_len), check['msg_len']) + eq_(hex(xid), check['xid']) + + return True + + def test_parser(self): + ok_(self._test_parser()) + + @raises(AssertionError) + def test_parser_check_msg_type(self): + self._test_parser(ofproto_v1_0.OFPT_ERROR) + + def _test_serialize(self): + + class Datapath(object): + ofproto = ofproto_v1_0 + ofproto_parser = ofproto_v1_0_parser + + c = ofproto_v1_0_parser.OFPHello(Datapath) + + c.serialize() + eq_(ofproto_v1_0.OFP_VERSION, c.version) + eq_(ofproto_v1_0.OFPT_HELLO, c.msg_type) + eq_(0, c.xid) + + return True + + def test_serialize(self): + ok_(self._test_serialize()) + + +class TestMsgStrAttr(unittest.TestCase): + """ Test case for ofproto_parser.msg_str_attr + """ + + def test_msg_str_attr(self): + class Check(object): + check = 'msg_str_attr_test' + + c = Check() + buf = '' + + res = ofproto_parser.msg_str_attr(c, buf, ('check',)) + str_ = str(res) + str_ = str_.rsplit() + eq_('check', str_[0]) + eq_('msg_str_attr_test', str_[1]) diff --git a/tests/unit/ofproto/test_ofproto_v12.py b/tests/unit/ofproto/test_ofproto_v12.py new file mode 100644 index 00000000..c1228a05 --- /dev/null +++ b/tests/unit/ofproto/test_ofproto_v12.py @@ -0,0 +1,717 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +from nose.tools import eq_ +from ryu.ofproto.ofproto_v1_2 import * + + +LOG = logging.getLogger('test_ofproto_v12') + + +class TestOfprot12(unittest.TestCase): + """ Test case for ofproto_v1_2 + """ + + def test_struct_ofp_header(self): + eq_(OFP_HEADER_PACK_STR, '!BBHI') + eq_(OFP_HEADER_SIZE, 8) + + def test_enum_ofp_type(self): + eq_(OFPT_HELLO, 0) + eq_(OFPT_ERROR, 1) + eq_(OFPT_ECHO_REQUEST, 2) + eq_(OFPT_ECHO_REPLY, 3) + eq_(OFPT_EXPERIMENTER, 4) + eq_(OFPT_FEATURES_REQUEST, 5) + eq_(OFPT_FEATURES_REPLY, 6) + eq_(OFPT_GET_CONFIG_REQUEST, 7) + eq_(OFPT_GET_CONFIG_REPLY, 8) + eq_(OFPT_SET_CONFIG, 9) + eq_(OFPT_PACKET_IN, 10) + eq_(OFPT_FLOW_REMOVED, 11) + eq_(OFPT_PORT_STATUS, 12) + eq_(OFPT_PACKET_OUT, 13) + eq_(OFPT_FLOW_MOD, 14) + eq_(OFPT_GROUP_MOD, 15) + eq_(OFPT_PORT_MOD, 16) + eq_(OFPT_TABLE_MOD, 17) + eq_(OFPT_STATS_REQUEST, 18) + eq_(OFPT_STATS_REPLY, 19) + eq_(OFPT_BARRIER_REQUEST, 20) + eq_(OFPT_BARRIER_REPLY, 21) + eq_(OFPT_QUEUE_GET_CONFIG_REQUEST, 22) + eq_(OFPT_QUEUE_GET_CONFIG_REPLY, 23) + eq_(OFPT_ROLE_REQUEST, 24) + eq_(OFPT_ROLE_REPLY, 25) + + def test_struct_ofp_port(self): + eq_(OFP_PORT_PACK_STR, '!I4x6s2x16sIIIIIIII') + eq_(OFP_PORT_SIZE, 64) + + def test_enum_ofp_port_config(self): + eq_(OFPPC_PORT_DOWN, 1 << 0) + eq_(OFPPC_NO_RECV, 1 << 2) + eq_(OFPPC_NO_FWD, 1 << 5) + eq_(OFPPC_NO_PACKET_IN, 1 << 6) + + def test_enum_ofp_port_state(self): + eq_(OFPPS_LINK_DOWN, 1 << 0) + eq_(OFPPS_BLOCKED, 1 << 1) + eq_(OFPPS_LIVE, 1 << 2) + + def test_enum_ofp_port_no(self): + eq_(OFPP_MAX, 0xffffff00) + eq_(OFPP_IN_PORT, 0xfffffff8) + eq_(OFPP_TABLE, 0xfffffff9) + eq_(OFPP_NORMAL, 0xfffffffa) + eq_(OFPP_FLOOD, 0xfffffffb) + eq_(OFPP_ALL, 0xfffffffc) + eq_(OFPP_CONTROLLER, 0xfffffffd) + eq_(OFPP_LOCAL, 0xfffffffe) + eq_(OFPP_ANY, 0xffffffff) + eq_(OFPQ_ALL, 0xffffffff) + + def test_enum_ofp_port_features(self): + eq_(OFPPF_10MB_HD, 1 << 0) + eq_(OFPPF_10MB_FD, 1 << 1) + eq_(OFPPF_100MB_HD, 1 << 2) + eq_(OFPPF_100MB_FD, 1 << 3) + eq_(OFPPF_1GB_HD, 1 << 4) + eq_(OFPPF_1GB_FD, 1 << 5) + eq_(OFPPF_10GB_FD, 1 << 6) + eq_(OFPPF_40GB_FD, 1 << 7) + eq_(OFPPF_100GB_FD, 1 << 8) + eq_(OFPPF_1TB_FD, 1 << 9) + eq_(OFPPF_OTHER, 1 << 10) + eq_(OFPPF_COPPER, 1 << 11) + eq_(OFPPF_FIBER, 1 << 12) + eq_(OFPPF_AUTONEG, 1 << 13) + eq_(OFPPF_PAUSE, 1 << 14) + eq_(OFPPF_PAUSE_ASYM, 1 << 15) + + def test_struct_ofp_packet_queue(self): + eq_(OFP_PACKET_QUEUE_PACK_STR, '!IIH6x') + eq_(OFP_PACKET_QUEUE_SIZE, 16) + + def test_enum_ofp_queue_properties(self): + eq_(OFPQT_MIN_RATE, 1) + eq_(OFPQT_MAX_RATE, 2) + eq_(OFPQT_EXPERIMENTER, 0xffff) + + def test_struct_ofp_queue_prop_header(self): + eq_(OFP_QUEUE_PROP_HEADER_PACK_STR, '!HH4x') + eq_(OFP_QUEUE_PROP_HEADER_SIZE, 8) + + def test_struct_ofp_queue_prop_min_rate(self): + eq_(OFP_QUEUE_PROP_MIN_RATE_PACK_STR, '!H6x') + eq_(OFP_QUEUE_PROP_MIN_RATE_SIZE, 16) + + def test_struct_ofp_queue_prop_max_rate(self): + eq_(OFP_QUEUE_PROP_MAX_RATE_PACK_STR, '!H6x') + eq_(OFP_QUEUE_PROP_MAX_RATE_SIZE, 16) + + def test_struct_ofp_queue_prop_experimenter(self): + eq_(OFP_QUEUE_PROP_EXPERIMENTER_PACK_STR, '!I4x') + eq_(OFP_QUEUE_PROP_EXPERIMENTER_SIZE, 16) + + def test_struct_ofp_match(self): + eq_(OFP_MATCH_PACK_STR, '!HHBBBB') + eq_(OFP_MATCH_SIZE, 8) + + def test_enum_ofp_match_type(self): + eq_(OFPMT_STANDARD, 0) + eq_(OFPMT_OXM, 1) + + def test_enum_ofp_oxm_class(self): + eq_(OFPXMC_NXM_0, 0x0000) + eq_(OFPXMC_NXM_1, 0x0001) + eq_(OFPXMC_OPENFLOW_BASIC, 0x8000) + eq_(OFPXMC_EXPERIMENTER, 0xFFFF) + + def test_enmu_oxm_ofb_match_fields(self): + eq_(OFPXMT_OFB_IN_PORT, 0) + eq_(OFPXMT_OFB_IN_PHY_PORT, 1) + eq_(OFPXMT_OFB_METADATA, 2) + eq_(OFPXMT_OFB_ETH_DST, 3) + eq_(OFPXMT_OFB_ETH_SRC, 4) + eq_(OFPXMT_OFB_ETH_TYPE, 5) + eq_(OFPXMT_OFB_VLAN_VID, 6) + eq_(OFPXMT_OFB_VLAN_PCP, 7) + eq_(OFPXMT_OFB_IP_DSCP, 8) + eq_(OFPXMT_OFB_IP_ECN, 9) + eq_(OFPXMT_OFB_IP_PROTO, 10) + eq_(OFPXMT_OFB_IPV4_SRC, 11) + eq_(OFPXMT_OFB_IPV4_DST, 12) + eq_(OFPXMT_OFB_TCP_SRC, 13) + eq_(OFPXMT_OFB_TCP_DST, 14) + eq_(OFPXMT_OFB_UDP_SRC, 15) + eq_(OFPXMT_OFB_UDP_DST, 16) + eq_(OFPXMT_OFB_SCTP_SRC, 17) + eq_(OFPXMT_OFB_SCTP_DST, 18) + eq_(OFPXMT_OFB_ICMPV4_TYPE, 19) + eq_(OFPXMT_OFB_ICMPV4_CODE, 20) + eq_(OFPXMT_OFB_ARP_OP, 21) + eq_(OFPXMT_OFB_ARP_SPA, 22) + eq_(OFPXMT_OFB_ARP_TPA, 23) + eq_(OFPXMT_OFB_ARP_SHA, 24) + eq_(OFPXMT_OFB_ARP_THA, 25) + eq_(OFPXMT_OFB_IPV6_SRC, 26) + eq_(OFPXMT_OFB_IPV6_DST, 27) + eq_(OFPXMT_OFB_IPV6_FLABEL, 28) + eq_(OFPXMT_OFB_ICMPV6_TYPE, 29) + eq_(OFPXMT_OFB_ICMPV6_CODE, 30) + eq_(OFPXMT_OFB_IPV6_ND_TARGET, 31) + eq_(OFPXMT_OFB_IPV6_ND_SLL, 32) + eq_(OFPXMT_OFB_IPV6_ND_TLL, 33) + eq_(OFPXMT_OFB_MPLS_LABEL, 34) + eq_(OFPXMT_OFB_MPLS_TC, 35) + + def test_enum_ofp_vlan_id(self): + eq_(OFPVID_PRESENT, 0x1000) + eq_(OFPVID_NONE, 0x0000) + + def test_struct_ofp_oxm_experimenter_header(self): + eq_(OFP_OXM_EXPERIMENTER_HEADER_PACK_STR, '!II') + eq_(OFP_OXM_EXPERIMENTER_HEADER_SIZE, 8) + + def test_enum_ofp_instruction_type(self): + eq_(OFPIT_GOTO_TABLE, 1) + eq_(OFPIT_WRITE_METADATA, 2) + eq_(OFPIT_WRITE_ACTIONS, 3) + eq_(OFPIT_APPLY_ACTIONS, 4) + eq_(OFPIT_CLEAR_ACTIONS, 5) + eq_(OFPIT_EXPERIMENTER, 0xFFFF) + + def test_struct_ofp_instruction_goto_table(self): + eq_(OFP_INSTRUCTION_GOTO_TABLE_PACK_STR, '!HHB3x') + eq_(OFP_INSTRUCTION_GOTO_TABLE_SIZE, 8) + + def test_struct_ofp_instruction_write_metadata(self): + eq_(OFP_INSTRUCTION_WRITE_METADATA_PACK_STR, '!HH4xQQ') + eq_(OFP_INSTRUCTION_WRITE_METADATA_SIZE, 24) + + def test_struct_ofp_instaruction_actions(self): + eq_(OFP_INSTRUCTION_ACTIONS_PACK_STR, '!HH4x') + eq_(OFP_INSTRUCTION_ACTIONS_SIZE, 8) + + def test_enum_ofp_action_type(self): + eq_(OFPAT_OUTPUT, 0) + eq_(OFPAT_COPY_TTL_OUT, 11) + eq_(OFPAT_COPY_TTL_IN, 12) + eq_(OFPAT_SET_MPLS_TTL, 15) + eq_(OFPAT_DEC_MPLS_TTL, 16) + eq_(OFPAT_PUSH_VLAN, 17) + eq_(OFPAT_POP_VLAN, 18) + eq_(OFPAT_PUSH_MPLS, 19) + eq_(OFPAT_POP_MPLS, 20) + eq_(OFPAT_SET_QUEUE, 21) + eq_(OFPAT_GROUP, 22) + eq_(OFPAT_SET_NW_TTL, 23) + eq_(OFPAT_DEC_NW_TTL, 24) + eq_(OFPAT_SET_FIELD, 25) + eq_(OFPAT_EXPERIMENTER, 0xffff) + + def test_struct_ofp_action_header(self): + eq_(OFP_ACTION_HEADER_PACK_STR, '!HH4x') + eq_(OFP_ACTION_HEADER_SIZE, 8) + + def test_struct_ofp_action_output(self): + eq_(OFP_ACTION_OUTPUT_PACK_STR, '!HHIH6x') + eq_(OFP_ACTION_OUTPUT_SIZE, 16) + + def test_enum_ofp_controller_max_len(self): + eq_(OFPCML_MAX, 0xffe5) + eq_(OFPCML_NO_BUFFER, 0xffff) + + def test_struct_ofp_action_group(self): + eq_(OFP_ACTION_GROUP_PACK_STR, '!HHI') + eq_(OFP_ACTION_GROUP_SIZE, 8) + + def test_struct_ofp_action_set_queue(self): + eq_(OFP_ACTION_SET_QUEUE_PACK_STR, '!HHI') + eq_(OFP_ACTION_SET_QUEUE_SIZE, 8) + + def test_struct_ofp_aciton_mpls_ttl(self): + eq_(OFP_ACTION_MPLS_TTL_PACK_STR, '!HHB3x') + eq_(OFP_ACTION_MPLS_TTL_SIZE, 8) + + def test_struct_ofp_action_nw_ttl(self): + eq_(OFP_ACTION_NW_TTL_PACK_STR, '!HHB3x') + eq_(OFP_ACTION_NW_TTL_SIZE, 8) + + def test_struct_ofp_action_push(self): + eq_(OFP_ACTION_PUSH_PACK_STR, '!HHH2x') + eq_(OFP_ACTION_PUSH_SIZE, 8) + + def test_struct_ofp_action_pop_mpls(self): + eq_(OFP_ACTION_POP_MPLS_PACK_STR, '!HHH2x') + eq_(OFP_ACTION_POP_MPLS_SIZE, 8) + + def test_struct_ofp_action_set_field(self): + eq_(OFP_ACTION_SET_FIELD_PACK_STR, '!HH4B') + eq_(OFP_ACTION_SET_FIELD_SIZE, 8) + + def test_struct_ofp_action_experimenter_header(self): + eq_(OFP_ACTION_EXPERIMENTER_HEADER_PACK_STR, '!HHI') + eq_(OFP_ACTION_EXPERIMENTER_HEADER_SIZE, 8) + + def test_struct_ofp_switch_feature(self): + eq_(OFP_SWITCH_FEATURES_PACK_STR, '!QIB3xII') + eq_(OFP_SWITCH_FEATURES_SIZE, 32) + + def test_enum_ofp_capabilities(self): + eq_(OFPC_FLOW_STATS, 1 << 0) + eq_(OFPC_TABLE_STATS, 1 << 1) + eq_(OFPC_PORT_STATS, 1 << 2) + eq_(OFPC_GROUP_STATS, 1 << 3) + eq_(OFPC_IP_REASM, 1 << 5) + eq_(OFPC_QUEUE_STATS, 1 << 6) + eq_(OFPC_PORT_BLOCKED, 1 << 8) + + def test_struct_ofp_switch_config(self): + eq_(OFP_SWITCH_CONFIG_PACK_STR, '!HH') + eq_(OFP_SWITCH_CONFIG_SIZE, 12) + + def test_enum_ofp_config_flags(self): + eq_(OFPC_FRAG_NORMAL, 0) + eq_(OFPC_FRAG_DROP, 1 << 0) + eq_(OFPC_FRAG_REASM, 1 << 1) + eq_(OFPC_FRAG_MASK, 3) + eq_(OFPC_INVALID_TTL_TO_CONTROLLER, 1 << 2) + + def test_enum_ofp_table(self): + eq_(OFPTT_MAX, 0xfe) + eq_(OFPTT_ALL, 0xff) + + def test_struct_ofp_table_mod(self): + eq_(OFP_TABLE_MOD_PACK_STR, '!B3xI') + eq_(OFP_TABLE_MOD_SIZE, 16) + + def test_enum_ofp_table_config(self): + eq_(OFPTC_TABLE_MISS_CONTROLLER, 0) + eq_(OFPTC_TABLE_MISS_CONTINUE, 1 << 0) + eq_(OFPTC_TABLE_MISS_DROP, 1 << 1) + eq_(OFPTC_TABLE_MISS_MASK, 3) + + def test_struct_ofp_flow_mod(self): + eq_(OFP_FLOW_MOD_PACK_STR, '!QQBBHHHIIIH2xHHBBBB') + eq_(OFP_FLOW_MOD_SIZE, 56) + + def test_enum_ofp_flow_mod_command(self): + eq_(OFPFC_ADD, 0) + eq_(OFPFC_MODIFY, 1) + eq_(OFPFC_MODIFY_STRICT, 2) + eq_(OFPFC_DELETE, 3) + eq_(OFPFC_DELETE_STRICT, 4) + + def test_enum_ofp_flow_mod_flags(self): + eq_(OFPFF_SEND_FLOW_REM, 1 << 0) + eq_(OFPFF_CHECK_OVERLAP, 1 << 1) + eq_(OFPFF_RESET_COUNTS, 1 << 2) + + def test_struct_ofp_group_mod(self): + eq_(OFP_GROUP_MOD_PACK_STR, '!HBxI') + eq_(OFP_GROUP_MOD_SIZE, 16) + + # same to OFPP_* + def test_enum_ofp_group(self): + eq_(OFPG_MAX, 0xffffff00) + eq_(OFPG_ALL, 0xfffffffc) + eq_(OFPG_ANY, 0xffffffff) + + def test_enum_ofp_group_mod_command(self): + eq_(OFPGC_ADD, 0) + eq_(OFPGC_MODIFY, 1) + eq_(OFPGC_DELETE, 2) + + def test_enum_ofp_group_type(self): + eq_(OFPGT_ALL, 0) + eq_(OFPGT_SELECT, 1) + eq_(OFPGT_INDIRECT, 2) + eq_(OFPGT_FF, 3) + + def test_struct_ofp_bucket(self): + eq_(OFP_BUCKET_PACK_STR, '!HHII4x') + eq_(OFP_BUCKET_SIZE, 16) + + def test_struct_ofp_port_mod(self): + eq_(OFP_PORT_MOD_PACK_STR, '!I4x6s2xIII4x') + eq_(OFP_PORT_MOD_SIZE, 40) + + def test_sturct_ofp_stats_request(self): + eq_(OFP_STATS_REQUEST_PACK_STR, '!HH4x') + eq_(OFP_STATS_REQUEST_SIZE, 16) + + # OFPSF_REQ_* flags (none yet defined). + # The only value defined for flags in a reply is whether more + # replies will follow this one - this has the value 0x0001. + def test_enum_ofp_stats_reply_flags(self): + eq_(OFPSF_REPLY_MORE, 0x0001) + + def test_struct_ofp_stats_reply(self): + eq_(OFP_STATS_REPLY_PACK_STR, '!HH4x') + eq_(OFP_STATS_REPLY_SIZE, 16) + + def test_enum_ofp_stats_types(self): + eq_(OFPST_DESC, 0) + eq_(OFPST_FLOW, 1) + eq_(OFPST_AGGREGATE, 2) + eq_(OFPST_TABLE, 3) + eq_(OFPST_PORT, 4) + eq_(OFPST_QUEUE, 5) + eq_(OFPST_GROUP, 6) + eq_(OFPST_GROUP_DESC, 7) + eq_(OFPST_GROUP_FEATURES, 8) + eq_(OFPST_EXPERIMENTER, 0xffff) + + def test_struct_ofp_desc_stats(self): + eq_(OFP_DESC_STATS_PACK_STR, '!256s256s256s32s256s') + eq_(OFP_DESC_STATS_SIZE, 1056) + + def test_struct_ofp_flow_stats_request(self): + eq_(OFP_FLOW_STATS_REQUEST_PACK_STR, '!B3xII4xQQ') + eq_(OFP_FLOW_STATS_REQUEST_SIZE, 40) + + def test_struct_ofp_flow_stats(self): + eq_(OFP_FLOW_STATS_PACK_STR, '!HBxIIHHH6xQQQ') + eq_(OFP_FLOW_STATS_SIZE, 56) + + def test_struct_ofp_aggregate_stats_request(self): + eq_(OFP_AGGREGATE_STATS_REQUEST_PACK_STR, '!B3xII4xQQ') + eq_(OFP_AGGREGATE_STATS_REQUEST_SIZE, 40) + + def test_struct_ofp_aggregate_stats_reply(self): + eq_(OFP_AGGREGATE_STATS_REPLY_PACK_STR, '!QQI4x') + eq_(OFP_AGGREGATE_STATS_REPLY_SIZE, 24) + + def test_sturct_ofp_table_stats(self): + eq_(OFP_TABLE_STATS_PACK_STR, '!B7x32sQQIIQQQQIIIIQQ') + eq_(OFP_TABLE_STATS_SIZE, 128) + + def test_struct_ofp_port_stats_request(self): + eq_(OFP_PORT_STATS_REQUEST_PACK_STR, '!I4x') + eq_(OFP_PORT_STATS_REQUEST_SIZE, 8) + + def test_struct_ofp_port_stats(self): + eq_(OFP_PORT_STATS_PACK_STR, '!I4xQQQQQQQQQQQQ') + eq_(OFP_PORT_STATS_SIZE, 104) + + def test_struct_ofp_queue_stats_request(self): + eq_(OFP_QUEUE_STATS_REQUEST_PACK_STR, '!II') + eq_(OFP_QUEUE_STATS_REQUEST_SIZE, 8) + + def test_struct_ofp_queue_stats(self): + eq_(OFP_QUEUE_STATS_PACK_STR, '!IIQQQ') + eq_(OFP_QUEUE_STATS_SIZE, 32) + + def test_struct_ofp_group_stats_request(self): + eq_(OFP_GROUP_STATS_REQUEST_PACK_STR, '!I4x') + eq_(OFP_GROUP_STATS_REQUEST_SIZE, 8) + + def test_struct_ofp_group_stats(self): + eq_(OFP_GROUP_STATS_PACK_STR, '!H2xII4xQQ') + eq_(OFP_GROUP_STATS_SIZE, 32) + + def test_struct_ofp_bucket_counter(self): + eq_(OFP_BUCKET_COUNTER_PACK_STR, '!QQ') + eq_(OFP_BUCKET_COUNTER_SIZE, 16) + + def test_struct_ofp_group_desc_stats(self): + eq_(OFP_GROUP_DESC_STATS_PACK_STR, '!HBxI') + eq_(OFP_GROUP_DESC_STATS_SIZE, 8) + + def test_struct_ofp_group_features_stats(self): + eq_(OFP_GROUP_FEATURES_STATS_PACK_STR, '!II4I4I') + eq_(OFP_GROUP_FEATURES_STATS_SIZE, 40) + + def test_enmu_ofp_group_capabilities(self): + eq_(OFPGFC_SELECT_WEIGHT, 1 << 0) + eq_(OFPGFC_SELECT_LIVENESS, 1 << 1) + eq_(OFPGFC_CHAINING, 1 << 2) + eq_(OFPGFC_CHAINING_CHECKS, 1 << 3) + + def test_struct_ofp_experimenter_stats_header(self): + eq_(OFP_EXPERIMENTER_STATS_HEADER_PACK_STR, '!II') + eq_(OFP_EXPERIMENTER_STATS_HEADER_SIZE, 8) + + def test_struct_opf_queue_get_config_request(self): + eq_(OFP_QUEUE_GET_CONFIG_REQUEST_PACK_STR, '!I4x') + eq_(OFP_QUEUE_GET_CONFIG_REQUEST_SIZE, 16) + + def test_struct_ofp_queue_get_config_reply(self): + eq_(OFP_QUEUE_GET_CONFIG_REPLY_PACK_STR, '!I4x') + eq_(OFP_QUEUE_GET_CONFIG_REPLY_SIZE, 16) + + def test_struct_ofp_packet_out(self): + eq_(OFP_PACKET_OUT_PACK_STR, '!IIH6x') + eq_(OFP_PACKET_OUT_SIZE, 24) + + def test_struct_ofp_role_request(self): + eq_(OFP_ROLE_REQUEST_PACK_STR, '!I4xQ') + eq_(OFP_ROLE_REQUEST_SIZE, 24) + + def test_enum_ofp_controller_role(self): + eq_(OFPCR_ROLE_NOCHANGE, 0) + eq_(OFPCR_ROLE_EQUAL, 1) + eq_(OFPCR_ROLE_MASTER, 2) + eq_(OFPCR_ROLE_SLAVE, 3) + + def test_struct_ofp_packet_in(self): + eq_(OFP_PACKET_IN_PACK_STR, '!IHBB') + eq_(OFP_PACKET_IN_SIZE, 24) + + def test_enum_ofp_packet_in_reason(self): + eq_(OFPR_NO_MATCH, 0) + eq_(OFPR_ACTION, 1) + eq_(OFPR_INVALID_TTL, 2) + + def test_struct_ofp_flow_removed(self): + eq_(OFP_FLOW_REMOVED_PACK_STR, '!QHBBIIHHQQHHBBBB') + eq_(OFP_FLOW_REMOVED_PACK_STR0, '!QHBBIIHHQQ') + eq_(OFP_FLOW_REMOVED_SIZE, 56) + + def test_enum_ofp_flow_removed_reason(self): + eq_(OFPRR_IDLE_TIMEOUT, 0) + eq_(OFPRR_HARD_TIMEOUT, 1) + eq_(OFPRR_DELETE, 2) + eq_(OFPRR_GROUP_DELETE, 3) + + def test_struct_ofp_port_status(self): + eq_(OFP_PORT_STATUS_PACK_STR, '!B7xI4x6s2x16sIIIIIIII') + eq_(OFP_PORT_STATUS_DESC_OFFSET, 16) + eq_(OFP_PORT_STATUS_SIZE, 80) + + def test_enum_ofp_port_reason(self): + eq_(OFPPR_ADD, 0) + eq_(OFPPR_DELETE, 1) + eq_(OFPPR_MODIFY, 2) + + def test_struct_ofp_error_msg(self): + eq_(OFP_ERROR_MSG_PACK_STR, '!HH') + eq_(OFP_ERROR_MSG_SIZE, 12) + + def test_enum_ofp_error_type(self): + eq_(OFPET_HELLO_FAILED, 0) + eq_(OFPET_BAD_REQUEST, 1) + eq_(OFPET_BAD_ACTION, 2) + eq_(OFPET_BAD_INSTRUCTION, 3) + eq_(OFPET_BAD_MATCH, 4) + eq_(OFPET_FLOW_MOD_FAILED, 5) + eq_(OFPET_GROUP_MOD_FAILED, 6) + eq_(OFPET_PORT_MOD_FAILED, 7) + eq_(OFPET_TABLE_MOD_FAILED, 8) + eq_(OFPET_QUEUE_OP_FAILED, 9) + eq_(OFPET_SWITCH_CONFIG_FAILED, 10) + eq_(OFPET_ROLE_REQUEST_FAILED, 11) + eq_(OFPET_EXPERIMENTER, 0xffff) + + def test_enum_ofp_hello_failed_code(self): + eq_(OFPHFC_INCOMPATIBLE, 0) + eq_(OFPHFC_EPERM, 1) + + def test_enum_ofp_bad_request_code(self): + eq_(OFPBRC_BAD_VERSION, 0) + eq_(OFPBRC_BAD_TYPE, 1) + eq_(OFPBRC_BAD_STAT, 2) + eq_(OFPBRC_BAD_EXPERIMENTER, 3) + eq_(OFPBRC_BAD_EXP_TYPE, 4) + eq_(OFPBRC_EPERM, 5) + eq_(OFPBRC_BAD_LEN, 6) + eq_(OFPBRC_BUFFER_EMPTY, 7) + eq_(OFPBRC_BUFFER_UNKNOWN, 8) + eq_(OFPBRC_BAD_TABLE_ID, 9) + eq_(OFPBRC_IS_SLAVE, 10) + eq_(OFPBRC_BAD_PORT, 11) + eq_(OFPBRC_BAD_PACKET, 12) + + def test_enum_ofp_bad_action_code(self): + eq_(OFPBAC_BAD_TYPE, 0) + eq_(OFPBAC_BAD_LEN, 1) + eq_(OFPBAC_BAD_EXPERIMENTER, 2) + eq_(OFPBAC_BAD_EXP_TYPE, 3) + eq_(OFPBAC_BAD_OUT_PORT, 4) + eq_(OFPBAC_BAD_ARGUMENT, 5) + eq_(OFPBAC_EPERM, 6) + eq_(OFPBAC_TOO_MANY, 7) + eq_(OFPBAC_BAD_QUEUE, 8) + eq_(OFPBAC_BAD_OUT_GROUP, 9) + eq_(OFPBAC_MATCH_INCONSISTENT, 10) + eq_(OFPBAC_UNSUPPORTED_ORDER, 11) + eq_(OFPBAC_BAD_TAG, 12) + eq_(OFPBAC_BAD_SET_TYPE, 13) + eq_(OFPBAC_BAD_SET_LEN, 14) + eq_(OFPBAC_BAD_SET_ARGUMENT, 15) + + def test_enum_ofp_bad_instruction_code(self): + eq_(OFPBIC_UNKNOWN_INST, 0) + eq_(OFPBIC_UNSUP_INST, 1) + eq_(OFPBIC_BAD_TABLE_ID, 2) + eq_(OFPBIC_UNSUP_METADATA, 3) + eq_(OFPBIC_UNSUP_METADATA_MASK, 4) + eq_(OFPBIC_BAD_EXPERIMENTER, 5) + eq_(OFPBIC_BAD_EXP_TYPE, 6) + eq_(OFPBIC_BAD_LEN, 7) + eq_(OFPBIC_EPERM, 8) + + def test_enum_ofp_bad_match_code(self): + eq_(OFPBMC_BAD_TYPE, 0) + eq_(OFPBMC_BAD_LEN, 1) + eq_(OFPBMC_BAD_TAG, 2) + eq_(OFPBMC_BAD_DL_ADDR_MASK, 3) + eq_(OFPBMC_BAD_NW_ADDR_MASK, 4) + eq_(OFPBMC_BAD_WILDCARDS, 5) + eq_(OFPBMC_BAD_FIELD, 6) + eq_(OFPBMC_BAD_VALUE, 7) + eq_(OFPBMC_BAD_MASK, 8) + eq_(OFPBMC_BAD_PREREQ, 9) + eq_(OFPBMC_DUP_FIELD, 10) + eq_(OFPBMC_EPERM, 11) + + def test_enum_ofp_flow_mod_failed_code(self): + eq_(OFPFMFC_UNKNOWN, 0) + eq_(OFPFMFC_TABLE_FULL, 1) + eq_(OFPFMFC_BAD_TABLE_ID, 2) + eq_(OFPFMFC_OVERLAP, 3) + eq_(OFPFMFC_EPERM, 4) + eq_(OFPFMFC_BAD_TIMEOUT, 5) + eq_(OFPFMFC_BAD_COMMAND, 6) + eq_(OFPFMFC_BAD_FLAGS, 7) + + def test_enum_ofp_group_mod_failed_code(self): + eq_(OFPGMFC_GROUP_EXISTS, 0) + eq_(OFPGMFC_INVALID_GROUP, 1) + eq_(OFPGMFC_WEIGHT_UNSUPPORTED, 2) + eq_(OFPGMFC_OUT_OF_GROUPS, 3) + eq_(OFPGMFC_OUT_OF_BUCKETS, 4) + eq_(OFPGMFC_CHAINING_UNSUPPORTED, 5) + eq_(OFPGMFC_WATCH_UNSUPPORTED, 6) + eq_(OFPGMFC_LOOP, 7) + eq_(OFPGMFC_UNKNOWN_GROUP, 8) + eq_(OFPGMFC_CHAINED_GROUP, 9) + eq_(OFPGMFC_BAD_TYPE, 10) + eq_(OFPGMFC_BAD_COMMAND, 11) + eq_(OFPGMFC_BAD_BUCKET, 12) + eq_(OFPGMFC_BAD_WATCH, 13) + eq_(OFPGMFC_EPERM, 14) + + def test_enum_ofp_port_mod_failed_code(self): + eq_(OFPPMFC_BAD_PORT, 0) + eq_(OFPPMFC_BAD_HW_ADDR, 1) + eq_(OFPPMFC_BAD_CONFIG, 2) + eq_(OFPPMFC_BAD_ADVERTISE, 3) + eq_(OFPPMFC_EPERM, 4) + + def test_enum_ofp_table_mod_failed_code(self): + eq_(OFPTMFC_BAD_TABLE, 0) + eq_(OFPTMFC_BAD_CONFIG, 1) + eq_(OFPTMFC_EPERM, 2) + + def test_enum_ofp_queue_op_failed_code(self): + eq_(OFPQOFC_BAD_PORT, 0) + eq_(OFPQOFC_BAD_QUEUE, 1) + eq_(OFPQOFC_EPERM, 2) + + def test_enum_ofp_switch_config_failed_code(self): + eq_(OFPSCFC_BAD_FLAGS, 0) + eq_(OFPSCFC_BAD_LEN, 1) + eq_(OFPSCFC_EPERM, 2) + + def test_enum_ofp_role_request_failed_code(self): + eq_(OFPRRFC_STALE, 0) + eq_(OFPRRFC_UNSUP, 1) + eq_(OFPRRFC_BAD_ROLE, 2) + + def test_struct_ofp_error_experimenter_msg(self): + eq_(OFP_ERROR_EXPERIMENTER_MSG_PACK_STR, '!HHI') + eq_(OFP_ERROR_EXPERIMENTER_MSG_SIZE, 16) + + def test_struct_ofp_experimenter_header(self): + eq_(OFP_EXPERIMENTER_HEADER_PACK_STR, '!II') + eq_(OFP_EXPERIMENTER_HEADER_SIZE, 16) + + # OXM is interpreted as a 32-bit word in network byte order. + # - oxm_class 17-bit to 32-bit (OFPXMC_*). + # - oxm_field 10-bit to 16-bit (OFPXMT_OFB_*). + # - oxm_hasmask 9-bit (Set if OXM include a bitmask). + # - oxm_length 1-bit to 8-bit (Lenght of OXM payload). + def _test_OXM(self, value, class_, field, hasmask, length): + virfy = (class_ << 16) | (field << 9) | (hasmask << 8) | length + eq_(value >> 32, 0) + eq_(value, virfy) + + def _test_OXM_basic(self, value, field, hasmask, length): + self._test_OXM(value, OFPXMC_OPENFLOW_BASIC, field, hasmask, length) + + def test_OXM_basic(self): + self._test_OXM_basic(OXM_OF_IN_PORT, OFPXMT_OFB_IN_PORT, 0, 4) + self._test_OXM_basic(OXM_OF_IN_PHY_PORT, OFPXMT_OFB_IN_PHY_PORT, 0, 4) + self._test_OXM_basic(OXM_OF_METADATA, OFPXMT_OFB_METADATA, 0, 8) + self._test_OXM_basic(OXM_OF_METADATA_W, OFPXMT_OFB_METADATA, 1, 16) + self._test_OXM_basic(OXM_OF_ETH_DST, OFPXMT_OFB_ETH_DST, 0, 6) + self._test_OXM_basic(OXM_OF_ETH_DST_W, OFPXMT_OFB_ETH_DST, 1, 12) + self._test_OXM_basic(OXM_OF_ETH_SRC, OFPXMT_OFB_ETH_SRC, 0, 6) + self._test_OXM_basic(OXM_OF_ETH_SRC_W, OFPXMT_OFB_ETH_SRC, 1, 12) + self._test_OXM_basic(OXM_OF_ETH_TYPE, OFPXMT_OFB_ETH_TYPE, 0, 2) + self._test_OXM_basic(OXM_OF_VLAN_VID, OFPXMT_OFB_VLAN_VID, 0, 2) + self._test_OXM_basic(OXM_OF_VLAN_VID_W, OFPXMT_OFB_VLAN_VID, 1, 4) + self._test_OXM_basic(OXM_OF_VLAN_PCP, OFPXMT_OFB_VLAN_PCP, 0, 1) + self._test_OXM_basic(OXM_OF_IP_DSCP, OFPXMT_OFB_IP_DSCP, 0, 1) + self._test_OXM_basic(OXM_OF_IP_ECN, OFPXMT_OFB_IP_ECN, 0, 1) + self._test_OXM_basic(OXM_OF_IP_PROTO, OFPXMT_OFB_IP_PROTO, 0, 1) + self._test_OXM_basic(OXM_OF_IPV4_SRC, OFPXMT_OFB_IPV4_SRC, 0, 4) + self._test_OXM_basic(OXM_OF_IPV4_SRC_W, OFPXMT_OFB_IPV4_SRC, 1, 8) + self._test_OXM_basic(OXM_OF_IPV4_DST, OFPXMT_OFB_IPV4_DST, 0, 4) + self._test_OXM_basic(OXM_OF_IPV4_DST_W, OFPXMT_OFB_IPV4_DST, 1, 8) + self._test_OXM_basic(OXM_OF_TCP_SRC, OFPXMT_OFB_TCP_SRC, 0, 2) + self._test_OXM_basic(OXM_OF_TCP_DST, OFPXMT_OFB_TCP_DST, 0, 2) + self._test_OXM_basic(OXM_OF_UDP_SRC, OFPXMT_OFB_UDP_SRC, 0, 2) + self._test_OXM_basic(OXM_OF_UDP_DST, OFPXMT_OFB_UDP_DST, 0, 2) + self._test_OXM_basic(OXM_OF_SCTP_SRC, OFPXMT_OFB_SCTP_SRC, 0, 2) + self._test_OXM_basic(OXM_OF_SCTP_DST, OFPXMT_OFB_SCTP_DST, 0, 2) + self._test_OXM_basic(OXM_OF_ICMPV4_TYPE, OFPXMT_OFB_ICMPV4_TYPE, 0, 1) + self._test_OXM_basic(OXM_OF_ICMPV4_CODE, OFPXMT_OFB_ICMPV4_CODE, 0, 1) + self._test_OXM_basic(OXM_OF_ARP_OP, OFPXMT_OFB_ARP_OP, 0, 2) + self._test_OXM_basic(OXM_OF_ARP_SPA, OFPXMT_OFB_ARP_SPA, 0, 4) + self._test_OXM_basic(OXM_OF_ARP_SPA_W, OFPXMT_OFB_ARP_SPA, 1, 8) + self._test_OXM_basic(OXM_OF_ARP_TPA, OFPXMT_OFB_ARP_TPA, 0, 4) + self._test_OXM_basic(OXM_OF_ARP_TPA_W, OFPXMT_OFB_ARP_TPA, 1, 8) + self._test_OXM_basic(OXM_OF_ARP_SHA, OFPXMT_OFB_ARP_SHA, 0, 6) + self._test_OXM_basic(OXM_OF_ARP_SHA_W, OFPXMT_OFB_ARP_SHA, 1, 12) + self._test_OXM_basic(OXM_OF_ARP_THA, OFPXMT_OFB_ARP_THA, 0, 6) + self._test_OXM_basic(OXM_OF_ARP_THA_W, OFPXMT_OFB_ARP_THA, 1, 12) + self._test_OXM_basic(OXM_OF_IPV6_SRC, OFPXMT_OFB_IPV6_SRC, 0, 16) + self._test_OXM_basic(OXM_OF_IPV6_SRC_W, OFPXMT_OFB_IPV6_SRC, 1, 32) + self._test_OXM_basic(OXM_OF_IPV6_DST, OFPXMT_OFB_IPV6_DST, 0, 16) + self._test_OXM_basic(OXM_OF_IPV6_DST_W, OFPXMT_OFB_IPV6_DST, 1, 32) + self._test_OXM_basic(OXM_OF_IPV6_FLABEL, OFPXMT_OFB_IPV6_FLABEL, 0, 4) + self._test_OXM_basic(OXM_OF_IPV6_FLABEL_W, + OFPXMT_OFB_IPV6_FLABEL, 1, 8) + self._test_OXM_basic(OXM_OF_ICMPV6_TYPE, OFPXMT_OFB_ICMPV6_TYPE, 0, 1) + self._test_OXM_basic(OXM_OF_ICMPV6_CODE, OFPXMT_OFB_ICMPV6_CODE, 0, 1) + self._test_OXM_basic(OXM_OF_IPV6_ND_TARGET, + OFPXMT_OFB_IPV6_ND_TARGET, 0, 16) + self._test_OXM_basic(OXM_OF_IPV6_ND_SLL, OFPXMT_OFB_IPV6_ND_SLL, 0, 6) + self._test_OXM_basic(OXM_OF_IPV6_ND_TLL, OFPXMT_OFB_IPV6_ND_TLL, 0, 6) + self._test_OXM_basic(OXM_OF_MPLS_LABEL, OFPXMT_OFB_MPLS_LABEL, 0, 4) + self._test_OXM_basic(OXM_OF_MPLS_TC, OFPXMT_OFB_MPLS_TC, 0, 1) + + def test_define_constants(self): + eq_(OFP_VERSION, 0x03) + eq_(OFP_TCP_PORT, 6633) + eq_(MAX_XID, 0xffffffff) diff --git a/tests/unit/ofproto/test_oxm.py b/tests/unit/ofproto/test_oxm.py new file mode 100644 index 00000000..ffb762fc --- /dev/null +++ b/tests/unit/ofproto/test_oxm.py @@ -0,0 +1,188 @@ +# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2015 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest + +import ryu.ofproto.ofproto_v1_3 as ofp + + +class Test_OXM(unittest.TestCase): + def _test_encode(self, user, on_wire): + (f, uv) = user + (n, v, m) = ofp.oxm_from_user(f, uv) + buf = bytearray() + ofp.oxm_serialize(n, v, m, buf, 0) + self.assertEqual(on_wire, buf) + + def _test_decode(self, user, on_wire): + (n, v, m, l) = ofp.oxm_parse(on_wire, 0) + self.assertEqual(len(on_wire), l) + (f, uv) = ofp.oxm_to_user(n, v, m) + self.assertEqual(user, (f, uv)) + + def _test_encode_header(self, user, on_wire): + f = user + n = ofp.oxm_from_user_header(f) + buf = bytearray() + ofp.oxm_serialize_header(n, buf, 0) + self.assertEqual(on_wire, buf) + + def _test_decode_header(self, user, on_wire): + (n, l) = ofp.oxm_parse_header(on_wire, 0) + self.assertEqual(len(on_wire), l) + f = ofp.oxm_to_user_header(n) + self.assertEqual(user, f) + + def _test(self, user, on_wire, header_bytes): + self._test_encode(user, on_wire) + self._test_decode(user, on_wire) + if isinstance(user[1], tuple): # has mask? + return + user_header = user[0] + on_wire_header = on_wire[:header_bytes] + self._test_decode_header(user_header, on_wire_header) + if user_header.startswith('field_'): + return # not supported + self._test_encode_header(user_header, on_wire_header) + + def test_basic_nomask(self): + user = ('ipv4_src', '192.0.2.1') + on_wire = ( + b'\x80\x00\x16\x04' + b'\xc0\x00\x02\x01' + ) + self._test(user, on_wire, 4) + + def test_basic_mask(self): + user = ('ipv4_src', ('192.0.2.1', '255.255.0.0')) + on_wire = ( + b'\x80\x00\x17\x08' + b'\xc0\x00\x02\x01' + b'\xff\xff\x00\x00' + ) + self._test(user, on_wire, 4) + + def test_exp_nomask(self): + user = ('_dp_hash', 0x12345678) + on_wire = ( + b'\xff\xff\x00\x08' + b'\x00\x00\x23\x20' # Nicira + b'\x12\x34\x56\x78' + ) + self._test(user, on_wire, 8) + + def test_exp_mask(self): + user = ('_dp_hash', (0x12345678, 0x7fffffff)) + on_wire = ( + b'\xff\xff\x01\x0c' + b'\x00\x00\x23\x20' # Nicira + b'\x12\x34\x56\x78' + b'\x7f\xff\xff\xff' + ) + self._test(user, on_wire, 8) + + def test_exp_nomask_2(self): + user = ('tcp_flags', 0x876) + on_wire = ( + b'\xff\xff\x54\x06' + b'\x4f\x4e\x46\x00' # ONF + b'\x08\x76' + ) + self._test(user, on_wire, 8) + + def test_exp_mask_2(self): + user = ('tcp_flags', (0x876, 0x7ff)) + on_wire = ( + b'\xff\xff\x55\x08' + b'\x4f\x4e\x46\x00' # ONF + b'\x08\x76' + b'\x07\xff' + ) + self._test(user, on_wire, 8) + + def test_exp_nomask_3(self): + user = ('actset_output', 0x98765432) + on_wire = ( + b'\xff\xff\x56\x08' + b'\x4f\x4e\x46\x00' # ONF + b'\x98\x76\x54\x32' + ) + self._test(user, on_wire, 8) + + def test_exp_mask_3(self): + user = ('actset_output', (0x98765432, 0xfffffffe)) + on_wire = ( + b'\xff\xff\x57\x0c' + b'\x4f\x4e\x46\x00' # ONF + b'\x98\x76\x54\x32' + b'\xff\xff\xff\xfe' + ) + self._test(user, on_wire, 8) + + def test_nxm_1_nomask(self): + user = ('tun_ipv4_src', '192.0.2.1') + on_wire = ( + b'\x00\x01\x3e\x04' + b'\xc0\x00\x02\x01' + ) + self._test(user, on_wire, 4) + + def test_nxm_1_mask(self): + user = ('tun_ipv4_src', ('192.0.2.1', '255.255.0.0')) + on_wire = ( + b'\x00\x01\x3f\x08' + b'\xc0\x00\x02\x01' + b'\xff\xff\x00\x00' + ) + self._test(user, on_wire, 4) + + def test_ext_256_nomask(self): + user = ('pbb_uca', 50) + on_wire = ( + b'\xff\xff\x00\x07' + b'\x4f\x4e\x46\x00' # ONF + b'\x0a\x00' + b'\x32' + ) + self._test(user, on_wire, 10) + + def test_ext_256_mask(self): + user = ('pbb_uca', (50, 51)) + on_wire = ( + b'\xff\xff\x01\x08' + b'\x4f\x4e\x46\x00' # ONF + b'\x0a\x00' + b'\x32' + b'\x33' + ) + self._test(user, on_wire, 10) + + def test_basic_unknown_nomask(self): + user = ('field_100', 'aG9nZWhvZ2U=') + on_wire = ( + b'\x00\x00\xc8\x08' + b'hogehoge' + ) + self._test(user, on_wire, 4) + + def test_basic_unknown_mask(self): + user = ('field_100', ('aG9nZWhvZ2U=', 'ZnVnYWZ1Z2E=')) + on_wire = ( + b'\x00\x00\xc9\x10' + b'hogehoge' + b'fugafuga' + ) + self._test(user, on_wire, 4) diff --git a/tests/unit/ofproto/test_oxs.py b/tests/unit/ofproto/test_oxs.py new file mode 100644 index 00000000..289731f0 --- /dev/null +++ b/tests/unit/ofproto/test_oxs.py @@ -0,0 +1,116 @@ +# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import unittest + +import ryu.ofproto.ofproto_v1_5 as ofp + + +LOG = logging.getLogger(__name__) + + +class Test_OXS(unittest.TestCase): + def _test_encode(self, user, on_wire): + """ test encording user value into on-wire bytes. + + n: name of OXS field + uv: user vale + t: oxs_type + v: on-wire bytes value + """ + (n, uv) = user + (t, v, _) = ofp.oxs_from_user(n, uv) + buf = bytearray() + ofp.oxs_serialize(t, v, None, buf, 0) + self.assertEqual(on_wire, buf) + + def _test_decode(self, user, on_wire): + """ test decording user value from on-wire bytes. + + t: oxs_type + v: on-wire bytes value + l: length of field + n: name of OXS field + uv: user vale + """ + (t, v, _, l) = ofp.oxs_parse(on_wire, 0) + self.assertEqual(len(on_wire), l) + (n, uv) = ofp.oxs_to_user(t, v, None) + self.assertEqual(user, (n, uv)) + + def _test_encode_header(self, user, on_wire): + """ test encording header. + + t: oxs_type + """ + t = ofp.oxs_from_user_header(user) + buf = bytearray() + ofp.oxs_serialize_header(t, buf, 0) + self.assertEqual(on_wire, buf) + + def _test_decode_header(self, user, on_wire): + """ test decording header. + + t: oxs_type + l: length of header + n: name of OXS field + """ + (t, l) = ofp.oxs_parse_header(on_wire, 0) + self.assertEqual(len(on_wire), l) + n = ofp.oxs_to_user_header(t) + self.assertEqual(user, n) + + def _test(self, user, on_wire, header_bytes): + """ execute tests. + + user: user specified value. + eg. user = ('duration', (100, 100)) + on_wire: on-wire bytes + header_bytes: header length + """ + self._test_encode(user, on_wire) + self._test_decode(user, on_wire) + user_header = user[0] + on_wire_header = on_wire[:header_bytes] + self._test_decode_header(user_header, on_wire_header) + if user_header.startswith('field_'): + return # not supported + self._test_encode_header(user_header, on_wire_header) + + def test_basic_single(self): + user = ('flow_count', 100) + on_wire = ( + b'\x80\x02\x06\x04' + b'\x00\x00\x00\x64' + ) + self._test(user, on_wire, 4) + + def test_basic_double(self): + user = ('duration', (100, 200)) + on_wire = ( + b'\x80\x02\x00\x08' + b'\x00\x00\x00\x64' + b'\x00\x00\x00\xc8' + ) + self._test(user, on_wire, 4) + + def test_basic_unknown(self): + user = ('field_100', 'aG9nZWhvZ2U=') + on_wire = ( + b'\x00\x00\xc8\x08' + b'hogehoge' + ) + self._test(user, on_wire, 4) diff --git a/tests/unit/ofproto/test_parser.py b/tests/unit/ofproto/test_parser.py new file mode 100644 index 00000000..9e19fd8f --- /dev/null +++ b/tests/unit/ofproto/test_parser.py @@ -0,0 +1,312 @@ +# Copyright (C) 2013,2014,2015 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013,2014,2015 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import json +import sys +import unittest + +import six +from nose.tools import eq_ + +from ryu import exception +from ryu.ofproto import ofproto_parser +from ryu.ofproto import ofproto_protocol +from ryu.ofproto import ofproto_v1_0 +from ryu.ofproto import ofproto_v1_2 +from ryu.ofproto import ofproto_v1_3 +from ryu.ofproto import ofproto_v1_4 +from ryu.ofproto import ofproto_v1_5 + +from tests import test_lib + + +# (has_parser, has_serializer) +implemented = { + 1: { + ofproto_v1_0.OFPT_PACKET_OUT: (False, True), + ofproto_v1_0.OFPT_FEATURES_REQUEST: (False, True), + ofproto_v1_0.OFPT_FEATURES_REPLY: (True, False), + ofproto_v1_0.OFPT_PACKET_IN: (True, False), + ofproto_v1_0.OFPT_FLOW_MOD: (True, True), + }, + 3: { + ofproto_v1_2.OFPT_FEATURES_REQUEST: (False, True), + ofproto_v1_2.OFPT_FEATURES_REPLY: (True, False), + ofproto_v1_2.OFPT_GET_CONFIG_REQUEST: (False, True), + ofproto_v1_2.OFPT_GET_CONFIG_REPLY: (True, False), + ofproto_v1_2.OFPT_SET_CONFIG: (False, True), + ofproto_v1_2.OFPT_PACKET_IN: (True, False), + ofproto_v1_2.OFPT_FLOW_REMOVED: (True, False), + ofproto_v1_2.OFPT_PORT_STATUS: (True, False), + ofproto_v1_2.OFPT_PACKET_OUT: (False, True), + ofproto_v1_2.OFPT_FLOW_MOD: (True, True), + ofproto_v1_2.OFPT_GROUP_MOD: (False, True), + ofproto_v1_2.OFPT_PORT_MOD: (False, True), + ofproto_v1_2.OFPT_TABLE_MOD: (False, True), + ofproto_v1_2.OFPT_STATS_REQUEST: (False, True), + ofproto_v1_2.OFPT_STATS_REPLY: (True, False), + ofproto_v1_2.OFPT_BARRIER_REQUEST: (False, True), + ofproto_v1_2.OFPT_QUEUE_GET_CONFIG_REQUEST: (False, True), + ofproto_v1_2.OFPT_QUEUE_GET_CONFIG_REPLY: (True, False), + ofproto_v1_2.OFPT_ROLE_REQUEST: (False, True), + ofproto_v1_2.OFPT_ROLE_REPLY: (True, False), + }, + 4: { + ofproto_v1_3.OFPT_HELLO: (True, False), + ofproto_v1_3.OFPT_FEATURES_REQUEST: (False, True), + ofproto_v1_3.OFPT_FEATURES_REPLY: (True, False), + ofproto_v1_3.OFPT_GET_CONFIG_REQUEST: (False, True), + ofproto_v1_3.OFPT_GET_CONFIG_REPLY: (True, False), + ofproto_v1_3.OFPT_SET_CONFIG: (False, True), + ofproto_v1_3.OFPT_PACKET_IN: (True, False), + ofproto_v1_3.OFPT_FLOW_REMOVED: (True, False), + ofproto_v1_3.OFPT_PORT_STATUS: (True, False), + ofproto_v1_3.OFPT_PACKET_OUT: (False, True), + ofproto_v1_3.OFPT_FLOW_MOD: (True, True), + ofproto_v1_3.OFPT_GROUP_MOD: (False, True), + ofproto_v1_3.OFPT_PORT_MOD: (False, True), + ofproto_v1_3.OFPT_METER_MOD: (False, True), + ofproto_v1_3.OFPT_TABLE_MOD: (False, True), + ofproto_v1_3.OFPT_MULTIPART_REQUEST: (False, True), + ofproto_v1_3.OFPT_MULTIPART_REPLY: (True, False), + ofproto_v1_3.OFPT_BARRIER_REQUEST: (False, True), + ofproto_v1_3.OFPT_QUEUE_GET_CONFIG_REQUEST: (False, True), + ofproto_v1_3.OFPT_QUEUE_GET_CONFIG_REPLY: (True, False), + ofproto_v1_3.OFPT_ROLE_REQUEST: (False, True), + ofproto_v1_3.OFPT_ROLE_REPLY: (True, False), + ofproto_v1_3.OFPT_GET_ASYNC_REQUEST: (False, True), + ofproto_v1_3.OFPT_GET_ASYNC_REPLY: (True, False), + ofproto_v1_3.OFPT_SET_ASYNC: (False, True), + }, + 5: { + ofproto_v1_4.OFPT_HELLO: (True, False), + ofproto_v1_4.OFPT_FEATURES_REQUEST: (False, True), + ofproto_v1_4.OFPT_FEATURES_REPLY: (True, False), + ofproto_v1_4.OFPT_GET_CONFIG_REQUEST: (False, True), + ofproto_v1_4.OFPT_GET_CONFIG_REPLY: (True, False), + ofproto_v1_4.OFPT_SET_CONFIG: (False, True), + ofproto_v1_4.OFPT_PACKET_IN: (True, False), + ofproto_v1_4.OFPT_FLOW_REMOVED: (True, False), + ofproto_v1_4.OFPT_PORT_STATUS: (True, False), + ofproto_v1_4.OFPT_PACKET_OUT: (False, True), + ofproto_v1_4.OFPT_FLOW_MOD: (True, True), + ofproto_v1_4.OFPT_GROUP_MOD: (True, True), + ofproto_v1_4.OFPT_PORT_MOD: (False, True), + ofproto_v1_4.OFPT_METER_MOD: (True, True), + ofproto_v1_4.OFPT_TABLE_MOD: (False, True), + ofproto_v1_4.OFPT_MULTIPART_REQUEST: (False, True), + ofproto_v1_4.OFPT_MULTIPART_REPLY: (True, False), + ofproto_v1_4.OFPT_BARRIER_REQUEST: (False, True), + ofproto_v1_4.OFPT_ROLE_REQUEST: (False, True), + ofproto_v1_4.OFPT_ROLE_REPLY: (True, False), + ofproto_v1_4.OFPT_GET_ASYNC_REQUEST: (False, True), + ofproto_v1_4.OFPT_GET_ASYNC_REPLY: (True, False), + ofproto_v1_4.OFPT_SET_ASYNC: (False, True), + ofproto_v1_4.OFPT_ROLE_STATUS: (True, False), + ofproto_v1_4.OFPT_TABLE_STATUS: (True, False), + ofproto_v1_4.OFPT_REQUESTFORWARD: (True, True), + ofproto_v1_4.OFPT_BUNDLE_CONTROL: (False, True), + ofproto_v1_4.OFPT_BUNDLE_ADD_MESSAGE: (False, True), + }, + 6: { + ofproto_v1_5.OFPT_HELLO: (True, False), + ofproto_v1_5.OFPT_FEATURES_REQUEST: (False, True), + ofproto_v1_5.OFPT_FEATURES_REPLY: (True, False), + ofproto_v1_5.OFPT_GET_CONFIG_REQUEST: (False, True), + ofproto_v1_5.OFPT_GET_CONFIG_REPLY: (True, False), + ofproto_v1_5.OFPT_SET_CONFIG: (False, True), + ofproto_v1_5.OFPT_PACKET_IN: (True, False), + ofproto_v1_5.OFPT_FLOW_REMOVED: (True, False), + ofproto_v1_5.OFPT_PORT_STATUS: (True, False), + ofproto_v1_5.OFPT_PACKET_OUT: (False, True), + ofproto_v1_5.OFPT_FLOW_MOD: (True, True), + ofproto_v1_5.OFPT_GROUP_MOD: (True, True), + ofproto_v1_5.OFPT_PORT_MOD: (False, True), + ofproto_v1_5.OFPT_METER_MOD: (True, True), + ofproto_v1_5.OFPT_TABLE_MOD: (False, True), + ofproto_v1_5.OFPT_MULTIPART_REQUEST: (False, True), + ofproto_v1_5.OFPT_MULTIPART_REPLY: (True, False), + ofproto_v1_5.OFPT_BARRIER_REQUEST: (False, True), + ofproto_v1_5.OFPT_ROLE_REQUEST: (False, True), + ofproto_v1_5.OFPT_ROLE_REPLY: (True, False), + ofproto_v1_5.OFPT_GET_ASYNC_REQUEST: (False, True), + ofproto_v1_5.OFPT_GET_ASYNC_REPLY: (True, False), + ofproto_v1_5.OFPT_SET_ASYNC: (False, True), + ofproto_v1_5.OFPT_ROLE_STATUS: (True, False), + ofproto_v1_5.OFPT_TABLE_STATUS: (True, False), + ofproto_v1_5.OFPT_REQUESTFORWARD: (True, True), + ofproto_v1_5.OFPT_BUNDLE_CONTROL: (True, True), + ofproto_v1_5.OFPT_BUNDLE_ADD_MESSAGE: (False, True), + ofproto_v1_5.OFPT_CONTROLLER_STATUS: (True, False), + }, +} + + +class Test_Parser(unittest.TestCase): + """ Test case for ryu.ofproto, especially json representation + """ + + def __init__(self, methodName): + print('init %s' % methodName) + super(Test_Parser, self).__init__(methodName) + + def setUp(self): + pass + + def tearDown(self): + pass + + @staticmethod + def _msg_to_jsondict(msg): + return msg.to_jsondict() + + @staticmethod + def _jsondict_to_msg(dp, jsondict): + return ofproto_parser.ofp_msg_from_jsondict(dp, jsondict) + + def _test_msg(self, name, wire_msg, json_str): + def bytes_eq(buf1, buf2): + if buf1 != buf2: + msg = 'EOF in either data' + for i in range(0, min(len(buf1), len(buf2))): + c1 = six.indexbytes(six.binary_type(buf1), i) + c2 = six.indexbytes(six.binary_type(buf2), i) + if c1 != c2: + msg = 'differs at chr %d, %d != %d' % (i, c1, c2) + break + assert buf1 == buf2, "%r != %r, %s" % (buf1, buf2, msg) + + json_dict = json.loads(json_str) + # on-wire -> OFPxxx -> json + (version, msg_type, msg_len, xid) = ofproto_parser.header(wire_msg) + try: + has_parser, has_serializer = implemented[version][msg_type] + except KeyError: + has_parser = True + has_serializer = True + + dp = ofproto_protocol.ProtocolDesc(version=version) + if has_parser: + try: + msg = ofproto_parser.msg(dp, version, msg_type, msg_len, xid, + wire_msg) + json_dict2 = self._msg_to_jsondict(msg) + except exception.OFPTruncatedMessage as e: + json_dict2 = {'OFPTruncatedMessage': + self._msg_to_jsondict(e.ofpmsg)} + # XXXdebug code + open(('/tmp/%s.json' % name), 'w').write(json.dumps(json_dict2)) + eq_(json_dict, json_dict2) + if 'OFPTruncatedMessage' in json_dict2: + return + + # json -> OFPxxx -> json + xid = json_dict[list(json_dict.keys())[0]].pop('xid', None) + msg2 = self._jsondict_to_msg(dp, json_dict) + msg2.set_xid(xid) + if has_serializer: + msg2.serialize() + eq_(self._msg_to_jsondict(msg2), json_dict) + bytes_eq(wire_msg, msg2.buf) + + # check if "len" "length" fields can be omitted + + def _remove(d, names): + f = lambda x: _remove(x, names) + if isinstance(d, list): + return list(map(f, d)) + if isinstance(d, dict): + d2 = {} + for k, v in d.items(): + if k in names: + continue + d2[k] = f(v) + return d2 + return d + + json_dict3 = _remove(json_dict, ['len', 'length']) + msg3 = self._jsondict_to_msg(dp, json_dict3) + msg3.set_xid(xid) + msg3.serialize() + bytes_eq(wire_msg, msg3.buf) + + msg2.serialize() + bytes_eq(wire_msg, msg2.buf) + + +def _add_tests(): + import os + import os.path + import functools + + this_dir = os.path.dirname(sys.modules[__name__].__file__) + packet_data_dir = os.path.join(this_dir, '../../packet_data') + json_dir = os.path.join(this_dir, 'json') + ofvers = [ + 'of10', + 'of12', + 'of13', + 'of14', + 'of15', + ] + cases = set() + for ver in ofvers: + pdir = packet_data_dir + '/' + ver + jdir = json_dir + '/' + ver + n_added = 0 + for file in os.listdir(pdir): + if file.endswith('.packet'): + truncated = None + elif '.truncated' in file: + # contents of .truncated files aren't relevant + s1, s2 = file.split('.truncated') + try: + truncated = int(s2) + except ValueError: + continue + file = s1 + '.packet' + else: + continue + wire_msg = open(pdir + '/' + file, 'rb').read() + if not truncated: + json_str = open(jdir + '/' + file + '.json', 'r').read() + else: + json_str = open(jdir + '/' + file + + '.truncated%d.json' % truncated, 'r').read() + wire_msg = wire_msg[:truncated] + method_name = ('test_' + file).replace('-', '_').replace('.', '_') + if truncated: + method_name += '_truncated%d' % truncated + + def _run(self, name, wire_msg, json_str): + print('processing %s ...' % name) + if six.PY3: + self._test_msg(self, name, wire_msg, json_str) + else: + self._test_msg(name, wire_msg, json_str) + print('adding %s ...' % method_name) + f = functools.partial(_run, name=method_name, wire_msg=wire_msg, + json_str=json_str) + test_lib.add_method(Test_Parser, method_name, f) + cases.add(method_name) + n_added += 1 + assert n_added > 0 + assert (cases == + set(unittest.defaultTestLoader.getTestCaseNames(Test_Parser))) + +_add_tests() diff --git a/tests/unit/ofproto/test_parser_compat.py b/tests/unit/ofproto/test_parser_compat.py new file mode 100644 index 00000000..8b98e27c --- /dev/null +++ b/tests/unit/ofproto/test_parser_compat.py @@ -0,0 +1,159 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +from struct import unpack +import unittest + +import six +from nose.tools import eq_ + +from ryu.lib import addrconv +from ryu.ofproto import ofproto_v1_2 +from ryu.ofproto import ofproto_v1_3 +from ryu.ofproto import ofproto_v1_2_parser +from ryu.ofproto import ofproto_v1_3_parser + +from tests import test_lib + + +class Test_Parser_Compat(unittest.TestCase): + def __init__(self, methodName): + print('init %s' % methodName) + super(Test_Parser_Compat, self).__init__(methodName) + + def setUp(self): + pass + + def tearDown(self): + pass + + def _test(self, name, ofpp): + ofp = { + ofproto_v1_2_parser: ofproto_v1_2, + ofproto_v1_3_parser: ofproto_v1_3, + }[ofpp] + + in_port = 987654321 + eth_src = 'aa:bb:cc:dd:ee:ff' + ipv4_src = '192.0.2.9' + ipv6_src = 'fe80::f00b:a4ff:feef:5d8f' + + old_in_port = in_port + old_eth_src = addrconv.mac.text_to_bin(eth_src) + old_ipv4_src = unpack('!I', addrconv.ipv4.text_to_bin(ipv4_src))[0] + old_ipv6_src = list(unpack('!8H', + addrconv.ipv6.text_to_bin(ipv6_src))) + + def check(o): + check_old(o) + check_new(o) + + def check_old(o): + # old api + def get_field(m, t): + for f in m.fields: + if isinstance(f, t): + return f + get_value = lambda m, t: get_field(m, t).value + + eq_(get_value(o, ofpp.MTInPort), old_in_port) + eq_(get_value(o, ofpp.MTEthSrc), old_eth_src) + eq_(get_value(o, ofpp.MTIPV4Src), old_ipv4_src) + eq_(get_value(o, ofpp.MTIPv6Src), old_ipv6_src) + + def check_new(o): + # new api + eq_(o['in_port'], in_port) + eq_(o['eth_src'], eth_src) + eq_(o['ipv4_src'], ipv4_src) + eq_(o['ipv6_src'], ipv6_src) + + # ensure that old and new api produces the same thing + + # old api + old = ofpp.OFPMatch() + old.set_in_port(old_in_port) + old.set_dl_src(old_eth_src) + old.set_ipv4_src(old_ipv4_src) + old.set_ipv6_src(old_ipv6_src) + + old_buf = bytearray() + old.serialize(old_buf, 0) + + # note: you can't inspect an object composed with the old set_XXX api + # before serialize(). + check_old(old) + + # another variant of old api; originally it was intended to be + # internal but actually used in the field. eg. LINC l2_switch_v1_3.py + old2 = ofpp.OFPMatch() + old2.append_field(ofp.OXM_OF_IN_PORT, old_in_port) + old2.append_field(ofp.OXM_OF_ETH_SRC, old_eth_src) + old2.append_field(ofp.OXM_OF_IPV4_SRC, old_ipv4_src) + old2.append_field(ofp.OXM_OF_IPV6_SRC, old_ipv6_src) + check_old(old2) + + old2_buf = bytearray() + old2.serialize(old2_buf, 0) + + # new api + new = ofpp.OFPMatch(in_port=in_port, eth_src=eth_src, + ipv4_src=ipv4_src, ipv6_src=ipv6_src) + check_new(new) + + new_buf = bytearray() + new.serialize(new_buf, 0) + eq_(new_buf, old_buf) + eq_(new_buf, old2_buf) + + old_jsondict = old.to_jsondict() + old2_jsondict = old2.to_jsondict() + new_jsondict = new.to_jsondict() + eq_(new_jsondict, old_jsondict) + eq_(new_jsondict, old2_jsondict) + + eq_(str(new), str(old)) + eq_(str(new), str(old2)) + + # a parsed object can be inspected by old and new api + + check(ofpp.OFPMatch.parser(six.binary_type(new_buf), 0)) + check(ofpp.OFPMatch.from_jsondict(list(new_jsondict.values())[0])) + + +def _add_tests(): + import functools + import itertools + + ofpps = [ofproto_v1_2_parser, ofproto_v1_3_parser] + for ofpp in ofpps: + mod = ofpp.__name__.split('.')[-1] + method_name = 'test_' + mod + '_ofpmatch_compat' + + def _run(self, name, ofpp): + print('processing %s ...' % name) + if six.PY3: + self._test(self, name, ofpp) + else: + self._test(name, ofpp) + print('adding %s ...' % method_name) + f = functools.partial(_run, name=method_name, + ofpp=ofpp) + test_lib.add_method(Test_Parser_Compat, method_name, f) + +_add_tests() diff --git a/tests/unit/ofproto/test_parser_ofpmatch.py b/tests/unit/ofproto/test_parser_ofpmatch.py new file mode 100644 index 00000000..91da3d3d --- /dev/null +++ b/tests/unit/ofproto/test_parser_ofpmatch.py @@ -0,0 +1,292 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +try: + # Python 3 + from functools import reduce +except ImportError: + # Python 2 + pass + +import unittest + +import six +from nose.tools import eq_ +from nose.tools import ok_ + +from ryu.ofproto import ofproto_v1_2 +from ryu.ofproto import ofproto_v1_3 +from ryu.ofproto import ofproto_v1_4 +from ryu.ofproto import ofproto_v1_5 +from ryu.ofproto import ofproto_v1_2_parser +from ryu.ofproto import ofproto_v1_3_parser +from ryu.ofproto import ofproto_v1_4_parser +from ryu.ofproto import ofproto_v1_5_parser + +from tests import test_lib + + +class Test_Parser_OFPMatch(unittest.TestCase): + _ofp = {ofproto_v1_2_parser: ofproto_v1_2, + ofproto_v1_3_parser: ofproto_v1_3, + ofproto_v1_4_parser: ofproto_v1_4, + ofproto_v1_5_parser: ofproto_v1_5} + + def __init__(self, methodName): + print('init %s' % methodName) + super(Test_Parser_OFPMatch, self).__init__(methodName) + + def setUp(self): + pass + + def tearDown(self): + pass + + def _test(self, name, ofpp, d, domask): + if domask: + d = dict(self._ofp[ofpp].oxm_normalize_user(k, uv) + for (k, uv) + in d.items()) + match = ofpp.OFPMatch(**d) + b = bytearray() + match.serialize(b, 0) + match2 = match.parser(six.binary_type(b), 0) + for k, v in d.items(): + ok_(k in match) + ok_(k in match2) + eq_(match[k], v) + eq_(match2[k], v) + for k, v in match.iteritems(): + ok_(k in d) + eq_(d[k], v) + for k, v in match2.iteritems(): + ok_(k in d) + eq_(d[k], v) + + +def _add_tests(): + import functools + import itertools + + class Field(object): + @classmethod + def generate_mask(cls): + return list(cls.generate())[1] + + class Int1(Field): + @staticmethod + def generate(): + yield 0 + yield 0xff + + class Int2(Field): + @staticmethod + def generate(): + yield 0 + yield 0x1234 + yield 0xffff + + class Int3(Field): + @staticmethod + def generate(): + yield 0 + yield 0x123456 + yield 0xffffff + + class Int4(Field): + @staticmethod + def generate(): + yield 0 + yield 0x12345678 + yield 0xffffffff + + class Int8(Field): + @staticmethod + def generate(): + yield 0 + yield 0x123456789abcdef0 + yield 0xffffffffffffffff + + class Mac(Field): + @staticmethod + def generate(): + yield '00:00:00:00:00:00' + yield 'f2:0b:a4:7d:f8:ea' + yield 'ff:ff:ff:ff:ff:ff' + + class IPv4(Field): + @staticmethod + def generate(): + yield '0.0.0.0' + yield '192.0.2.1' + yield '255.255.255.255' + + class IPv6(Field): + @staticmethod + def generate(): + yield '::' + yield 'fe80::f00b:a4ff:fed0:3f70' + yield 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' + + class B64(Field): + @staticmethod + def generate(): + yield 'aG9nZWhvZ2U=' + yield 'ZnVnYWZ1Z2E=' + + ofpps = [ofproto_v1_2_parser, ofproto_v1_3_parser, + ofproto_v1_4_parser, ofproto_v1_5_parser] + common = [ + # OpenFlow Basic + ('in_port', Int4), + ('in_phy_port', Int4), + ('metadata', Int8), + ('eth_dst', Mac), + ('eth_src', Mac), + ('eth_type', Int2), + ('vlan_vid', Int2), + ('vlan_pcp', Int1), + ('ip_dscp', Int1), + ('ip_ecn', Int1), + ('ip_proto', Int1), + ('ipv4_src', IPv4), + ('ipv4_dst', IPv4), + ('tcp_src', Int2), + ('tcp_dst', Int2), + ('udp_src', Int2), + ('udp_dst', Int2), + ('sctp_src', Int2), + ('sctp_dst', Int2), + ('icmpv4_type', Int1), + ('icmpv4_code', Int1), + ('arp_op', Int2), + ('arp_spa', IPv4), + ('arp_tpa', IPv4), + ('arp_sha', Mac), + ('arp_tha', Mac), + ('ipv6_src', IPv6), + ('ipv6_dst', IPv6), + ('ipv6_flabel', Int4), + ('icmpv6_type', Int1), + ('icmpv6_code', Int1), + ('ipv6_nd_target', IPv6), + ('ipv6_nd_sll', Mac), + ('ipv6_nd_tll', Mac), + ('mpls_label', Int4), + ('mpls_tc', Int1), + # Old ONF Experimenter --> OpenFlow Basic (OF1.4+) + ('pbb_uca', Int1), + # ONF Experimenter --> OpenFlow Basic (OF1.5+) + ('tcp_flags', Int2), + ('actset_output', Int4), + # Nicira Experimenter + ('eth_dst_nxm', Mac), + ('eth_src_nxm', Mac), + ('tunnel_id_nxm', Int8), + ('tun_ipv4_src', IPv4), + ('tun_ipv4_dst', IPv4), + ('pkt_mark', Int4), + ('conj_id', Int4), + ('tun_ipv6_src', IPv6), + ('tun_ipv6_dst', IPv6), + ('_dp_hash', Int4), + ('reg0', Int4), + ('reg1', Int4), + ('reg2', Int4), + ('reg3', Int4), + ('reg4', Int4), + ('reg5', Int4), + ('reg6', Int4), + ('reg7', Int4), + # Common Experimenter + ('field_100', B64), + ] + L = {} + L[ofproto_v1_2_parser] = common + [ + # OF1.2 doesn't have OXM_OF_PBB_ISID. + # OFPXMC_OPENFLOW_BASIC = 0x8000 + # OXM_OF_PBB_ISID = 37 + # (OFPXMC_OPENFLOW_BASIC << 7) + OXM_OF_PBB_ISID == 4194341 + ('field_4194341', B64), + ] + L[ofproto_v1_3_parser] = common + [ + # OpenFlow Basic (OF1.3+) + ('mpls_bos', Int1), + ('pbb_isid', Int3), + ('tunnel_id', Int8), + ('ipv6_exthdr', Int2), + ] + L[ofproto_v1_4_parser] = L[ofproto_v1_3_parser] + L[ofproto_v1_5_parser] = L[ofproto_v1_4_parser] + [ + # OpenFlow Basic (OF1.5+) + ('packet_type', Int4), + ] + + def flatten_one(l, i): + if isinstance(i, tuple): + return l + flatten(i) + else: + return l + [i] + flatten = lambda l: reduce(flatten_one, l, []) + + for ofpp in ofpps: + for n in range(1, 3): + for C in itertools.combinations(L[ofpp], n): + l = [1] + keys = [] + clss = [] + for (k, cls) in C: + l = itertools.product(l, cls.generate()) + keys.append(k) + clss.append(cls) + l = [flatten(x)[1:] for x in l] + for domask in [True, False]: + for values in l: + if domask: + values = [(value, cls.generate_mask()) + for (cls, value) + in zip(clss, values)] + d = dict(zip(keys, values)) + mod = ofpp.__name__.split('.')[-1] + method_name = 'test_' + mod + if domask: + method_name += '_mask' + for k in sorted(dict(d).keys()): + method_name += '_' + str(k) + method_name += '_' + str(d[k]) + method_name = method_name.replace(':', '_') + method_name = method_name.replace('.', '_') + method_name = method_name.replace('(', '_') + method_name = method_name.replace(')', '_') + method_name = method_name.replace(',', '_') + method_name = method_name.replace("'", '_') + method_name = method_name.replace(' ', '_') + + def _run(self, name, ofpp, d, domask): + print('processing %s ...' % name) + if six.PY3: + self._test(self, name, ofpp, d, domask) + else: + self._test(name, ofpp, d, domask) + print('adding %s ...' % method_name) + f = functools.partial(_run, name=method_name, + ofpp=ofpp, d=d, domask=domask) + test_lib.add_method(Test_Parser_OFPMatch, + method_name, f) + +_add_tests() diff --git a/tests/unit/ofproto/test_parser_ofpstats.py b/tests/unit/ofproto/test_parser_ofpstats.py new file mode 100644 index 00000000..3f413a42 --- /dev/null +++ b/tests/unit/ofproto/test_parser_ofpstats.py @@ -0,0 +1,208 @@ +# Copyright (C) 2015 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +try: + # Python 3 + from functools import reduce +except ImportError: + # Python 2 + pass + +import unittest + +import six +from nose.tools import eq_ +from nose.tools import ok_ + +from ryu.ofproto import ofproto_v1_5 +from ryu.ofproto import ofproto_v1_5_parser + +from tests import test_lib + + +class Test_Parser_OFPStats(unittest.TestCase): + _ofp = {ofproto_v1_5_parser: ofproto_v1_5} + + def __init__(self, methodName): + print('init %s' % methodName) + super(Test_Parser_OFPStats, self).__init__(methodName) + + def setUp(self): + pass + + def tearDown(self): + pass + + def _test(self, name, ofpp, d): + stats = ofpp.OFPStats(**d) + b = bytearray() + stats.serialize(b, 0) + stats2 = stats.parser(six.binary_type(b), 0) + for k, v in d.items(): + ok_(k in stats) + ok_(k in stats2) + eq_(stats[k], v) + eq_(stats2[k], v) + for k, v in stats.iteritems(): + ok_(k in d) + eq_(d[k], v) + for k, v in stats2.iteritems(): + ok_(k in d) + eq_(d[k], v) + + +def _add_tests(): + import functools + import itertools + + class Field(object): + pass + + class Int1(Field): + @staticmethod + def generate(): + yield 0 + yield 0xff + + class Int2(Field): + @staticmethod + def generate(): + yield 0 + yield 0x1234 + yield 0xffff + + class Int3(Field): + @staticmethod + def generate(): + yield 0 + yield 0x123456 + yield 0xffffff + + class Int4(Field): + @staticmethod + def generate(): + yield 0 + yield 0x12345678 + yield 0xffffffff + + class Int4double(Field): + @staticmethod + def generate(): + # Note: If yield value as a tuple, flatten_one() will reduce it + # into a single value. So the followings avoid this problem by + # using a list value. + yield [0, 1] + yield [0x12345678, 0x23456789] + yield [0xffffffff, 0xfffffffe] + + class Int8(Field): + @staticmethod + def generate(): + yield 0 + yield 0x123456789abcdef0 + yield 0xffffffffffffffff + + class Mac(Field): + @staticmethod + def generate(): + yield '00:00:00:00:00:00' + yield 'f2:0b:a4:7d:f8:ea' + yield 'ff:ff:ff:ff:ff:ff' + + class IPv4(Field): + @staticmethod + def generate(): + yield '0.0.0.0' + yield '192.0.2.1' + yield '255.255.255.255' + + class IPv6(Field): + @staticmethod + def generate(): + yield '::' + yield 'fe80::f00b:a4ff:fed0:3f70' + yield 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' + + class B64(Field): + @staticmethod + def generate(): + yield 'aG9nZWhvZ2U=' + yield 'ZnVnYWZ1Z2E=' + + ofpps = [ofproto_v1_5_parser] + common = [ + ('duration', Int4double), + ('idle_time', Int4double), + ('flow_count', Int4), + ('packet_count', Int8), + ('byte_count', Int8), + ('field_100', B64), + ] + L = {} + L[ofproto_v1_5_parser] = common + + def flatten_one(l, i): + if isinstance(i, tuple): + return l + flatten(i) + else: + return l + [i] + flatten = lambda l: reduce(flatten_one, l, []) + + for ofpp in ofpps: + for n in range(1, 3): + for C in itertools.combinations(L[ofpp], n): + l = [1] + keys = [] + clss = [] + for (k, cls) in C: + l = itertools.product(l, cls.generate()) + keys.append(k) + clss.append(cls) + l = [flatten(x)[1:] for x in l] + for values in l: + d = dict(zip(keys, values)) + for n, uv in d.items(): + if isinstance(uv, list): + # XXX + # OFPStats returns value as tuple when field is + # 'duration' or 'idle_time'. Then convert list + # value into tuple here. + d[n] = tuple(uv) + mod = ofpp.__name__.split('.')[-1] + method_name = 'test_' + mod + for k in sorted(dict(d).keys()): + method_name += '_' + str(k) + method_name += '_' + str(d[k]) + method_name = method_name.replace(':', '_') + method_name = method_name.replace('.', '_') + method_name = method_name.replace('(', '_') + method_name = method_name.replace(')', '_') + method_name = method_name.replace(',', '_') + method_name = method_name.replace("'", '_') + method_name = method_name.replace(' ', '_') + + def _run(self, name, ofpp, d): + print('processing %s ...' % name) + if six.PY3: + self._test(self, name, ofpp, d) + else: + self._test(name, ofpp, d) + print('adding %s ...' % method_name) + f = functools.partial(_run, name=method_name, + ofpp=ofpp, d=d) + test_lib.add_method(Test_Parser_OFPStats, + method_name, f) + +_add_tests() diff --git a/tests/unit/ofproto/test_parser_v10.py b/tests/unit/ofproto/test_parser_v10.py new file mode 100644 index 00000000..eefb65f2 --- /dev/null +++ b/tests/unit/ofproto/test_parser_v10.py @@ -0,0 +1,5556 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import six +from nose.tools import * +from ryu.ofproto.ofproto_v1_0_parser import * +from ryu.ofproto.nx_actions import * +from ryu.ofproto import ofproto_v1_0_parser +from ryu.lib import addrconv + + +LOG = logging.getLogger('test_ofproto_v10') + + +class TestOFPPhyPort(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPPhyPort + """ + + # OFP_PHY_PORT_PACK_STR + # '!H6s16sIIIIII'... port_no, hw_addr, name, config, state + # curr, advertised, supported, peer + port_no = {'buf': b'\xe7\x6b', 'val': 59243} + hw_addr = '52:54:54:10:20:99' + name = b'name'.ljust(16) + config = {'buf': b'\x84\xb6\x8c\x53', 'val': 2226555987} + state = {'buf': b'\x64\x07\xfb\xc9', 'val': 1678244809} + curr = {'buf': b'\xa9\xe8\x0a\x2b', 'val': 2850556459} + advertised = {'buf': b'\x78\xb9\x7b\x72', 'val': 2025421682} + supported = {'buf': b'\x7e\x65\x68\xad', 'val': 2120575149} + peer = {'buf': b'\xa4\x5b\x8b\xed', 'val': 2757463021} + + buf = port_no['buf'] \ + + addrconv.mac.text_to_bin(hw_addr) \ + + name \ + + config['buf'] \ + + state['buf'] \ + + curr['buf'] \ + + advertised['buf'] \ + + supported['buf'] \ + + peer['buf'] + + c = OFPPhyPort(port_no['val'], + hw_addr, + name, + config['val'], + state['val'], + curr['val'], + advertised['val'], + supported['val'], + peer['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.port_no['val'], self.c.port_no) + eq_(self.hw_addr, self.c.hw_addr) + eq_(self.name, self.c.name) + eq_(self.config['val'], self.c.config) + eq_(self.state['val'], self.c.state) + eq_(self.curr['val'], self.c.curr) + eq_(self.advertised['val'], self.c.advertised) + eq_(self.supported['val'], self.c.supported) + eq_(self.peer['val'], self.c.peer) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(self.port_no['val'], res.port_no) + eq_(self.hw_addr, res.hw_addr) + eq_(self.name, res.name) + eq_(self.config['val'], res.config) + eq_(self.state['val'], res.state) + eq_(self.curr['val'], res.curr) + eq_(self.advertised['val'], res.advertised) + eq_(self.supported['val'], res.supported) + eq_(self.peer['val'], res.peer) + + +class TestOFPMatch(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPMatch + """ + + # OFP_MATCH_PACK_STR + # '!IH6s6sHBxHBB2xIIHH'...wildcards, in_port, dl_src, dl_dst, dl_vlan, + # dl_vlan_pcp, dl_type, nw_tos, nw_proto, + # nw_src, nw_dst, tp_src, tp_dst + wildcards = {'buf': b'\x00\x02\x10\x00', 'val': 135168} + in_port = {'buf': b'\x37\x8b', 'val': 14219} + dl_src = {'buf': b'\x52\x54\x54\x10\x20\x99', + 'human': '52:54:54:10:20:99'} + dl_dst = {'buf': b'\x61\x31\x50\x6d\xc9\xe5', + 'human': '61:31:50:6d:c9:e5'} + dl_vlan = {'buf': b'\xc1\xf9', 'val': 49657} + dl_vlan_pcp = {'buf': b'\x79', 'val': 121} + zfill0 = b'\x00' + dl_type = {'buf': b'\xa6\x9e', 'val': 42654} + nw_tos = {'buf': b'\xde', 'val': 222} + nw_proto = {'buf': b'\xe5', 'val': 229} + zfil11 = b'\x00' * 2 + nw_src = {'buf': b'\x1b\x6d\x8d\x4b', 'val': 460164427, + 'human': '27.109.141.75'} + nw_dst = {'buf': b'\xab\x25\xe1\x20', 'val': 2871386400, + 'human': '171.37.225.32'} + tp_src = {'buf': b'\xd5\xc3', 'val': 54723} + tp_dst = {'buf': b'\x78\xb9', 'val': 30905} + + buf = wildcards['buf'] \ + + in_port['buf'] \ + + dl_src['buf'] \ + + dl_dst['buf'] \ + + dl_vlan['buf'] \ + + dl_vlan_pcp['buf'] \ + + zfill0 \ + + dl_type['buf'] \ + + nw_tos['buf'] \ + + nw_proto['buf'] \ + + zfil11 \ + + nw_src['buf'] \ + + nw_dst['buf'] \ + + tp_src['buf'] \ + + tp_dst['buf'] + + def _get_obj(self, dl_src, dl_dst): + c = OFPMatch(self.wildcards['val'], + self.in_port['val'], + dl_src, + dl_dst, + self.dl_vlan['val'], + self.dl_vlan_pcp['val'], + self.dl_type['val'], + self.nw_tos['val'], + self.nw_proto['val'], + self.nw_src['val'], + self.nw_dst['val'], + self.tp_src['val'], + self.tp_dst['val']) + return c + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + c = self._get_obj(self.dl_src['buf'], self.dl_dst['buf']) + + eq_(self.wildcards['val'], c.wildcards) + eq_(self.in_port['val'], c.in_port) + eq_(self.dl_src['buf'], c.dl_src) + eq_(self.dl_dst['buf'], c.dl_dst) + eq_(self.dl_vlan['val'], c.dl_vlan) + eq_(self.dl_vlan_pcp['val'], c.dl_vlan_pcp) + eq_(self.dl_type['val'], c.dl_type) + eq_(self.nw_tos['val'], c.nw_tos) + eq_(self.nw_proto['val'], c.nw_proto) + eq_(self.nw_src['val'], c.nw_src) + eq_(self.nw_dst['val'], c.nw_dst) + eq_(self.tp_src['val'], c.tp_src) + eq_(self.tp_dst['val'], c.tp_dst) + + def test_init_zero(self): + c = self._get_obj(0, 0) + eq_(mac.DONTCARE, c.dl_src) + eq_(mac.DONTCARE, c.dl_dst) + + def test_parse(self): + c = self._get_obj(self.dl_src['buf'], self.dl_dst['buf']) + res = c.parse(self.buf, 0) + + eq_(self.wildcards['val'], res.wildcards) + eq_(self.in_port['val'], res.in_port) + eq_(self.dl_src['buf'], res.dl_src) + eq_(self.dl_dst['buf'], res.dl_dst) + eq_(self.dl_vlan['val'], res.dl_vlan) + eq_(self.dl_vlan_pcp['val'], res.dl_vlan_pcp) + eq_(self.dl_type['val'], res.dl_type) + eq_(self.nw_tos['val'], res.nw_tos) + eq_(self.nw_proto['val'], res.nw_proto) + eq_(self.nw_src['val'], res.nw_src) + eq_(self.nw_dst['val'], res.nw_dst) + eq_(self.tp_src['val'], res.tp_src) + eq_(self.tp_dst['val'], res.tp_dst) + + def test_serialize(self): + buf = bytearray() + c = self._get_obj(self.dl_src['buf'], self.dl_dst['buf']) + + c.serialize(buf, 0) + + fmt = ofproto.OFP_MATCH_PACK_STR + res = struct.unpack_from(fmt, six.binary_type(buf)) + + eq_(self.wildcards['val'], res[0]) + eq_(self.in_port['val'], res[1]) + eq_(self.dl_src['buf'], res[2]) + eq_(self.dl_dst['buf'], res[3]) + eq_(self.dl_vlan['val'], res[4]) + eq_(self.dl_vlan_pcp['val'], res[5]) + eq_(self.dl_type['val'], res[6]) + eq_(self.nw_tos['val'], res[7]) + eq_(self.nw_proto['val'], res[8]) + eq_(self.nw_src['val'], res[9]) + eq_(self.nw_dst['val'], res[10]) + eq_(self.tp_src['val'], res[11]) + eq_(self.tp_dst['val'], res[12]) + + def test_getitem(self): + c = self._get_obj(self.dl_src['buf'], self.dl_dst['buf']) + + eq_(self.wildcards['val'], c["wildcards"]) + eq_(self.in_port['val'], c["in_port"]) + eq_(self.dl_src['human'], c["dl_src"]) + eq_(self.dl_dst['human'], c["dl_dst"]) + eq_(self.dl_vlan['val'], c["dl_vlan"]) + eq_(self.dl_vlan_pcp['val'], c["dl_vlan_pcp"]) + eq_(self.dl_type['val'], c["dl_type"]) + eq_(self.nw_tos['val'], c["nw_tos"]) + eq_(self.nw_proto['val'], c["nw_proto"]) + eq_(self.nw_src['human'], c["nw_src"]) + eq_(self.nw_dst['human'], c["nw_dst"]) + eq_(self.tp_src['val'], c["tp_src"]) + eq_(self.tp_dst['val'], c["tp_dst"]) + + +class TestOFPActionHeader(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionHeader + """ + + # OFP_ACTION_HEADER_PACK_STR + # '!HH4x'...type, len, zfill + type = {'buf': b'\x00\x02', 'val': ofproto.OFPAT_SET_VLAN_PCP} + len = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_HEADER_SIZE} + zfill = b'\x00' * 4 + + buf = type['buf'] \ + + len['buf'] \ + + zfill + + c = OFPActionHeader(type['val'], len['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.type['val'], self.c.type) + eq_(self.len['val'], self.c.len) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_HEADER_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type['val'], res[0]) + eq_(self.len['val'], res[1]) + + +class TestOFPActionOutput(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionOutput + """ + + # OFP_ACTION_OUTPUT_PACK_STR + # '!HHHH'...type, len, port, max_len + type_ = {'buf': b'\x00\x00', 'val': ofproto.OFPAT_OUTPUT} + len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} + port = {'buf': b'\x19\xce', 'val': 6606} + max_len = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} + + buf = type_['buf'] \ + + len_['buf'] \ + + port['buf'] \ + + max_len['buf'] + + c = OFPActionOutput(port['val'], max_len['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.port['val'], self.c.port) + eq_(self.max_len['val'], self.c.max_len) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(self.port['val'], res.port) + eq_(self.max_len['val'], res.max_len) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x01', 'val': 1} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.port['buf'] \ + + self.max_len['buf'] + + self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x07', 'val': 7} + + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.port['buf'] \ + + self.max_len['buf'] + + self.c.parser(buf, 0) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_OUTPUT_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.port['val'], res[2]) + eq_(self.max_len['val'], res[3]) + + +class TestOFPActionVlanVid(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionVlanVid + """ + + # OFP_ACTION_VLAN_VID_PACK_STR + # '!HHH2x'...type, len, vlan_vid, zfill + type_ = {'buf': b'\x00\x01', 'val': ofproto.OFPAT_SET_VLAN_VID} + len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_VLAN_VID_SIZE} + vlan_vid = {'buf': b'\x3c\x0e', 'val': 15374} + zfill = b'\x00' * 2 + + buf = type_['buf'] \ + + len_['buf'] \ + + vlan_vid['buf'] \ + + zfill + + c = OFPActionVlanVid(vlan_vid['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.vlan_vid['val'], self.c.vlan_vid) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(self.vlan_vid['val'], res.vlan_vid) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x02', 'val': 2} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.vlan_vid['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x07', 'val': 7} + + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.vlan_vid['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_VLAN_VID_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vlan_vid['val'], res[2]) + + +class TestOFPActionVlanPcp(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionVlanPcp + """ + + # OFP_ACTION_VLAN_PCP_PACK_STR + # '!HHB3x'...type, len, vlan_pcp, zfill + type_ = {'buf': b'\x00\x02', 'val': ofproto.OFPAT_SET_VLAN_PCP} + len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_VLAN_PCP_SIZE} + vlan_pcp = {'buf': b'\x1c', 'val': 28} + zfill = b'\x00' * 3 + + buf = type_['buf'] \ + + len_['buf'] \ + + vlan_pcp['buf'] \ + + zfill + + c = OFPActionVlanPcp(vlan_pcp['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.vlan_pcp['val'], self.c.vlan_pcp) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + eq_(self.vlan_pcp['val'], res.vlan_pcp) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x01', 'val': 1} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.vlan_pcp['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x07', 'val': 7} + + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.vlan_pcp['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_VLAN_PCP_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vlan_pcp['val'], res[2]) + + +class TestOFPActionStripVlan(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionStripVlan + """ + + # OFP_ACTION_HEADER_PACK_STR + # '!HH4x'...type, len, zfill + type_ = {'buf': b'\x00\x03', 'val': ofproto.OFPAT_STRIP_VLAN} + len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_HEADER_SIZE} + zfill = b'\x00' * 4 + + buf = type_['buf'] \ + + len_['buf'] \ + + zfill + + c = OFPActionStripVlan() + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + ok_(self.c.parser(self.buf, 0)) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x01', 'val': 1} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x07', 'val': 7} + + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + +class TestOFPActionSetDlSrc(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionSetDlSrc + """ + + # OFP_ACTION_DL_ADDR_PACK_STR + # '!HH6s6x'...type, len, dl_addr, zfill + type_ = {'buf': b'\x00\x04', 'val': ofproto.OFPAT_SET_DL_SRC} + len_ = {'buf': b'\x00\x10', 'val': ofproto.OFP_ACTION_DL_ADDR_SIZE} + dl_addr = b'\x0e\xde\x27\xce\xc6\xcf' + zfill = b'\x00' * 6 + + buf = type_['buf'] \ + + len_['buf'] \ + + dl_addr \ + + zfill + + c = OFPActionSetDlSrc(dl_addr) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.dl_addr, self.c.dl_addr) + + def test_parser_type_src(self): + res = self.c.parser(self.buf, 0) + eq_(self.dl_addr, res.dl_addr) + + def test_parser_type_dst(self): + type_ = {'buf': b'\x00\x05', 'val': ofproto.OFPAT_SET_DL_DST} + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.dl_addr \ + + self.zfill + + res = self.c.parser(buf, 0) + + eq_(self.dl_addr, res.dl_addr) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x06', 'val': 6} + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.dl_addr \ + + self.zfill + + res = self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x07', 'val': 7} + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.dl_addr \ + + self.zfill + + res = self.c.parser(buf, 0) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_DL_ADDR_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.dl_addr, res[2]) + + +class TestOFPActionSetDlDst(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionSetDlDst + """ + + # OFP_ACTION_DL_ADDR_PACK_STR + # '!HH6s6x'...type, len, dl_addr, zfill + type_ = {'buf': b'\x00\x05', 'val': ofproto.OFPAT_SET_DL_DST} + len_ = {'buf': b'\x00\x10', 'val': ofproto.OFP_ACTION_DL_ADDR_SIZE} + dl_addr = b'\x37\x48\x38\x9a\xf4\x28' + zfill = b'\x00' * 6 + + buf = type_['buf'] \ + + len_['buf'] \ + + dl_addr \ + + zfill + + c = OFPActionSetDlDst(dl_addr) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.dl_addr, self.c.dl_addr) + + def test_parser_type_dst(self): + res = self.c.parser(self.buf, 0) + eq_(self.dl_addr, res.dl_addr) + + def test_parser_type_src(self): + type_ = {'buf': b'\x00\x04', 'val': ofproto.OFPAT_SET_DL_SRC} + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.dl_addr \ + + self.zfill + + res = self.c.parser(buf, 0) + + eq_(self.dl_addr, res.dl_addr) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x06', 'val': 6} + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.dl_addr \ + + self.zfill + + res = self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x07', 'val': 7} + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.dl_addr \ + + self.zfill + + res = self.c.parser(buf, 0) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_DL_ADDR_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.dl_addr, res[2]) + + +class TestOFPActionSetNwSrc(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionSetNwSrc + """ + + # OFP_ACTION_NW_ADDR_PACK_STR + # '!HHI'...type, len, nw_addr + type_ = {'buf': b'\x00\x06', 'val': ofproto.OFPAT_SET_NW_SRC} + len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_NW_ADDR_SIZE} + nw_addr = {'buf': b'\xc0\xa8\x7a\x0a', 'val': 3232266762} + + buf = type_['buf'] \ + + len_['buf'] \ + + nw_addr['buf'] + + c = OFPActionSetNwSrc(nw_addr['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.nw_addr['val'], self.c.nw_addr) + + def test_parser_src(self): + res = self.c.parser(self.buf, 0) + eq_(self.nw_addr['val'], res.nw_addr) + + def test_parser_dst(self): + type_ = {'buf': b'\x00\x07', 'val': ofproto.OFPAT_SET_NW_DST} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.nw_addr['buf'] + + res = self.c.parser(buf, 0) + eq_(self.nw_addr['val'], res.nw_addr) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x05', 'val': 5} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.nw_addr['buf'] + + self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x10', 'val': 16} + + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.nw_addr['buf'] + + self.c.parser(buf, 0) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_NW_ADDR_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.nw_addr['val'], res[2]) + + +class TestOFPActionSetNwDst(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionSetNwDst + """ + + # OFP_ACTION_NW_ADDR_PACK_STR + # '!HHI'...type, len, nw_addr + type_ = {'buf': b'\x00\x07', 'val': ofproto.OFPAT_SET_NW_DST} + len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_NW_ADDR_SIZE} + nw_addr = {'buf': b'\xc0\xa8\x7a\x0a', 'val': 3232266762} + + buf = type_['buf'] \ + + len_['buf'] \ + + nw_addr['buf'] + + c = OFPActionSetNwDst(nw_addr['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.nw_addr['val'], self.c.nw_addr) + + def test_parser_dst(self): + res = self.c.parser(self.buf, 0) + eq_(self.nw_addr['val'], res.nw_addr) + + def test_parser_src(self): + type_ = {'buf': b'\x00\x06', 'val': ofproto.OFPAT_SET_NW_SRC} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.nw_addr['buf'] + + res = self.c.parser(buf, 0) + eq_(self.nw_addr['val'], res.nw_addr) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x05', 'val': 5} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.nw_addr['buf'] + + self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x10', 'val': 16} + + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.nw_addr['buf'] + + self.c.parser(buf, 0) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_NW_ADDR_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.nw_addr['val'], res[2]) + + +class TestOFPActionSetNwTos(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionSetNwTos + """ + + # OFP_ACTION_NW_TOS_PACK_STR + # '!HHB3x'...type, len, tos, zfill + type_ = {'buf': b'\x00\x08', 'val': ofproto.OFPAT_SET_NW_TOS} + len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_NW_TOS_SIZE} + tos = {'buf': b'\xb6', 'val': 182} + zfill = b'\x00' * 3 + + buf = type_['buf'] \ + + len_['buf'] \ + + tos['buf'] \ + + zfill + + c = OFPActionSetNwTos(tos['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.tos['val'], self.c.tos) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + eq_(self.tos['val'], res.tos) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x05', 'val': 5} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.tos['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x07', 'val': 7} + + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.tos['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_NW_TOS_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.tos['val'], res[2]) + + +class TestOFPActionSetTpSrc(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionSetTpSrc + """ + + # OFP_ACTION_TP_PORT_PACK_STR + # '!HHH2x'...type, len, tp, zfill + type_ = {'buf': b'\x00\x09', 'val': ofproto.OFPAT_SET_TP_SRC} + len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_TP_PORT_SIZE} + tp = {'buf': b'\x07\xf1', 'val': 2033} + zfill = b'\x00' * 2 + + buf = type_['buf'] \ + + len_['buf'] \ + + tp['buf'] \ + + zfill + + c = OFPActionSetTpSrc(tp['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.tp['val'], self.c.tp) + + def test_parser_src(self): + res = self.c.parser(self.buf, 0) + eq_(self.tp['val'], res.tp) + + def test_parser_dst(self): + type_ = {'buf': b'\x00\x0a', 'val': ofproto.OFPAT_SET_TP_DST} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.tp['buf'] \ + + self.zfill + + res = self.c.parser(self.buf, 0) + eq_(self.tp['val'], res.tp) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x07', 'val': 7} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.tp['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x07', 'val': 7} + + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.tp['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_TP_PORT_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.tp['val'], res[2]) + + +class TestOFPActionSetTpDst(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionSetTpDst + """ + + # OFP_ACTION_TP_PORT_PACK_STR + # '!HHH2x'...type, len, tp, zfill + type_ = {'buf': b'\x00\x0a', 'val': ofproto.OFPAT_SET_TP_DST} + len_ = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_TP_PORT_SIZE} + tp = {'buf': b'\x06\x6d', 'val': 1645} + zfill = b'\x00' * 2 + + buf = type_['buf'] \ + + len_['buf'] \ + + tp['buf'] \ + + zfill + + c = OFPActionSetTpDst(tp['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.tp['val'], self.c.tp) + + def test_parser_dst(self): + res = self.c.parser(self.buf, 0) + eq_(self.tp['val'], res.tp) + + def test_parser_src(self): + type_ = {'buf': b'\x00\x09', 'val': ofproto.OFPAT_SET_TP_SRC} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.tp['buf'] \ + + self.zfill + + res = self.c.parser(buf, 0) + eq_(self.tp['val'], res.tp) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x10', 'val': 16} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.tp['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x07', 'val': 7} + + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.tp['buf'] \ + + self.zfill + + self.c.parser(buf, 0) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_TP_PORT_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.tp['val'], res[2]) + + +class TestOFPActionEnqueue(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPActionEnqueue + """ + + # OFP_ACTION_ENQUEUE_PACK_STR + # '!HHH6xI'...type_, len_, port, zfill, queue_id + type_ = {'buf': b'\x00\x0b', 'val': ofproto.OFPAT_ENQUEUE} + len_ = {'buf': b'\x00\x10', 'val': ofproto.OFP_ACTION_ENQUEUE_SIZE} + port = {'buf': b'\x04\x55', 'val': 1109} + zfill = b'\x00' * 6 + queue_id = {'buf': b'\x0a\x5b\x03\x5e', 'val': 173736798} + + buf = type_['buf'] \ + + len_['buf'] \ + + port['buf'] \ + + zfill \ + + queue_id['buf'] + + c = OFPActionEnqueue(port['val'], queue_id['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.port['val'], self.c.port) + eq_(self.queue_id['val'], self.c.queue_id) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(self.port['val'], res.port) + eq_(self.queue_id['val'], res.queue_id) + + @raises(AssertionError) + def test_parser_check_type(self): + type_ = {'buf': b'\x00\x0a', 'val': 10} + + buf = type_['buf'] \ + + self.len_['buf'] \ + + self.port['buf'] \ + + self.zfill \ + + self.queue_id['buf'] + + self.c.parser(buf, 0) + + @raises(AssertionError) + def test_parser_check_len(self): + len_ = {'buf': b'\x00\x05', 'val': 5} + + buf = self.type_['buf'] \ + + len_['buf'] \ + + self.port['buf'] \ + + self.zfill \ + + self.queue_id['buf'] + + self.c.parser(buf, 0) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_ENQUEUE_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.port['val'], res[2]) + eq_(self.queue_id['val'], res[3]) + + +class TestNXActionResubmit(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionResubmit + """ + + # NX_ACTION_RESUBMIT_PACK_STR + # '!HHIHHB3x'...type, len, vendor, subtype, in_port, table, zfill + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_RESUBMIT_SIZE} + vendor = {'buf': b'\x00\x00\x23\x20', 'val': 8992} + subtype = {'buf': b'\x00\x01', 'val': 1} + in_port = {'buf': b'\x0a\x4c', 'val': 2636} + table = {'buf': b'\x52', 'val': 82} + zfill = b'\x00' * 3 + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + in_port['buf'] \ + + table['buf'] \ + + zfill + + c = NXActionResubmit(in_port['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + eq_(self.in_port['val'], self.c.in_port) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.in_port['val'], res.in_port) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.NX_ACTION_RESUBMIT_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + eq_(self.in_port['val'], res[4]) + + +class TestNXActionResubmitTable(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionResubmitTable + """ + + # NX_ACTION_RESUBMIT_PACK_STR + # '!HHIHHB3x'...type, len, vendor, subtype, in_port, table, zfill + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_RESUBMIT_SIZE} + vendor = {'buf': b'\x00\x00\x23\x20', 'val': 8992} + subtype = {'buf': b'\x00\x0e', 'val': 14} + in_port = {'buf': b'\x0a\x4c', 'val': 2636} + table_id = {'buf': b'\x52', 'val': 82} + zfill = b'\x00' * 3 + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + in_port['buf'] \ + + table_id['buf'] \ + + zfill + + c = NXActionResubmitTable(in_port['val'], table_id['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + eq_(self.in_port['val'], self.c.in_port) + eq_(self.table_id['val'], self.c.table_id) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.in_port['val'], res.in_port) + eq_(self.table_id['val'], res.table_id) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.NX_ACTION_RESUBMIT_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + eq_(self.in_port['val'], res[4]) + eq_(self.table_id['val'], res[5]) + + +class TestNXActionSetTunnel(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionSetTunnel + """ + + # NX_ACTION_SET_TUNNEL_PACK_STR + # '!HHIH2xI'...type, len, vendor, subtype, zfill, tun_id + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_SET_TUNNEL_SIZE} + vendor = {'buf': b'\x00\x00\x23\x20', 'val': 8992} + subtype = {'buf': b'\x00\x02', 'val': 2} + zfill = b'\x00' * 2 + tun_id = {'buf': b'\x01\x6f\x01\xd0', 'val': 24052176} + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + zfill \ + + tun_id['buf'] + + c = NXActionSetTunnel(tun_id['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + eq_(self.tun_id['val'], self.c.tun_id) + + def test_parse(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.tun_id['val'], res.tun_id) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.NX_ACTION_SET_TUNNEL_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + eq_(self.tun_id['val'], res[4]) + + +class TestNXActionSetQueue(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionSetQueue + """ + + # NX_ACTION_SET_QUEUE_PACK_STR + # '!HHIH2xI'...type, len, vendor, subtype, zfill, queue_id + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_SET_TUNNEL_SIZE} + vendor = {'buf': b'\x00\x00\x23\x20', + 'val': ofproto_common.NX_EXPERIMENTER_ID} + subtype = {'buf': b'\x00\x04', 'val': ofproto.NXAST_SET_QUEUE} + zfill = b'\x00' * 2 + queue_id = {'buf': b'\xde\xbe\xc5\x18', 'val': 3737044248} + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + zfill \ + + queue_id['buf'] + + c = NXActionSetQueue(queue_id['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + eq_(self.queue_id['val'], self.c.queue_id) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.queue_id['val'], res.queue_id) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.NX_ACTION_SET_QUEUE_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + eq_(self.queue_id['val'], res[4]) + + +class TestNXActionPopQueue(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionPopQueue + """ + + # NX_ACTION_POP_QUEUE_PACK_STR + # '!HHIH6x'...type, len, vendor, subtype, zfill + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_SET_TUNNEL_SIZE} + vendor = {'buf': b'\x00\x00\x23\x20', + 'val': ofproto_common.NX_EXPERIMENTER_ID} + subtype = {'buf': b'\x00\x05', 'val': ofproto.NXAST_POP_QUEUE} + zfill = b'\x00' * 6 + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + zfill + + c = NXActionPopQueue() + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.subtype['val'], res.subtype) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.NX_ACTION_POP_QUEUE_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + + +class TestNXActionRegMove(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionRegMove + """ + + # NX_ACTION_REG_MOVE_PACK_STR + # '!HHIHHHHII'...type_, len_, vendor, subtype, n_bits, + # src_ofs, dst_ofs, src, dst + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x18', 'val': ofproto.NX_ACTION_REG_MOVE_SIZE} + vendor = {'buf': b'\x00\x00\x23\x20', + 'val': ofproto_common.NX_EXPERIMENTER_ID} + subtype = {'buf': b'\x00\x06', 'val': ofproto.NXAST_REG_MOVE} + n_bits = {'buf': b'\x3d\x98', 'val': 15768} + src_ofs = {'buf': b'\xf3\xa3', 'val': 62371} + dst_ofs = {'buf': b'\xdc\x67', 'val': 56423} + src_field = {'buf': b'\x00\x01\x00\x04', 'val': "reg0", "val2": 65540} + dst_field = {'buf': b'\x00\x01\x02\x04', 'val': "reg1", "val2": 66052} + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + n_bits['buf'] \ + + src_ofs['buf'] \ + + dst_ofs['buf'] \ + + src_field['buf'] \ + + dst_field['buf'] + + c = NXActionRegMove(src_field['val'], + dst_field['val'], + n_bits['val'], + src_ofs['val'], + dst_ofs['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + eq_(self.src_field['val'], self.c.src_field) + eq_(self.dst_field['val'], self.c.dst_field) + eq_(self.n_bits['val'], self.c.n_bits) + eq_(self.src_field['val'], self.c.src_field) + eq_(self.dst_field['val'], self.c.dst_field) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.subtype['val'], res.subtype) + eq_(self.src_ofs['val'], res.src_ofs) + eq_(self.dst_ofs['val'], res.dst_ofs) + eq_(self.n_bits['val'], res.n_bits) + eq_(self.src_field['val'], res.src_field) + eq_(self.dst_field['val'], res.dst_field) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.NX_ACTION_REG_MOVE_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + eq_(self.n_bits['val'], res[4]) + eq_(self.src_ofs['val'], res[5]) + eq_(self.dst_ofs['val'], res[6]) + eq_(self.src_field['val2'], res[7]) + eq_(self.dst_field['val2'], res[8]) + + +class TestNXActionRegLoad(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionRegLoad + """ + + # NX_ACTION_REG_LOAD_PACK_STR + # '!HHIHHIQ'...type_, len_, vendor, subtype, + # ofs_nbits, dst, value + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x18', 'val': ofproto.NX_ACTION_REG_MOVE_SIZE} + vendor = {'buf': b'\x00\x00\x23\x20', + 'val': ofproto_common.NX_EXPERIMENTER_ID} + subtype = {'buf': b'\x00\x07', 'val': ofproto.NXAST_REG_LOAD} + ofs_nbits = {'buf': b'\x3d\x98', 'val': 15768} + dst = {'buf': b'\x00\x01\x00\x04', 'val': "reg0", "val2": 65540} + value = {'buf': b'\x33\x51\xcd\x43\x25\x28\x18\x99', + 'val': 3697962457317775513} + start = 246 + end = 270 + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + ofs_nbits['buf'] \ + + dst['buf'] \ + + value['buf'] + + c = NXActionRegLoad(ofs_nbits['val'], + dst['val'], + value['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + eq_(self.ofs_nbits['val'], self.c.ofs_nbits) + eq_(self.dst['val'], self.c.dst) + eq_(self.value['val'], self.c.value) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.ofs_nbits['val'], self.c.ofs_nbits) + eq_(self.dst['val'], res.dst) + eq_(self.value['val'], res.value) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.NX_ACTION_REG_LOAD_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + eq_(self.ofs_nbits['val'], res[4]) + eq_(self.dst['val2'], res[5]) + eq_(self.value['val'], res[6]) + + +class TestNXActionSetTunnel64(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionSetTunnel64 + """ + + # NX_ACTION_SET_TUNNEL64_PACK_STR + # '!HHIH6xQ'...type, len, vendor, subtype, zfill, tun_id + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x18', 'val': ofproto.NX_ACTION_SET_TUNNEL64_SIZE} + vendor = {'buf': b'\x00\x00\x23\x20', + 'val': ofproto_common.NX_EXPERIMENTER_ID} + subtype = {'buf': b'\x00\x09', 'val': ofproto.NXAST_SET_TUNNEL64} + zfill = b'\x00' * 6 + tun_id = {'buf': b'\x6e\x01\xa6\xea\x7e\x36\x1d\xd9', + 'val': 7926800345218817497} + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + zfill \ + + tun_id['buf'] + + c = NXActionSetTunnel64(tun_id['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + eq_(self.tun_id['val'], self.c.tun_id) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.subtype['val'], res.subtype) + eq_(self.tun_id['val'], res.tun_id) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.NX_ACTION_SET_TUNNEL64_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + eq_(self.tun_id['val'], res[4]) + + +class TestNXActionMultipath(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionMultipath + """ + + # NX_ACTION_MULTIPATH_PACK_STR + # '!HHIHHH2xHHI2xHI'...type, len, vendor, subtype, fields, basis, zfill + # algorithm, max_link, arg, zfill, ofs_nbits, dst + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x20', 'val': ofproto.NX_ACTION_MULTIPATH_SIZE} + vendor = {'buf': b'\x00\x00\x23\x20', + 'val': ofproto_common.NX_EXPERIMENTER_ID} + subtype = {'buf': b'\x00\x0a', 'val': ofproto.NXAST_MULTIPATH} + fields = {'buf': b'\x6d\xf5', 'val': 28149} + basis = {'buf': b'\x7c\x0a', 'val': 31754} + zfill0 = b'\x00' * 2 + algorithm = {'buf': b'\x82\x1d', 'val': 33309} + max_link = {'buf': b'\x06\x2b', 'val': 1579} + arg = {'buf': b'\x18\x79\x41\xc8', 'val': 410599880} + zfill1 = b'\x00' * 2 + ofs_nbits = {'buf': b'\xa9\x9a', 'val': 43418} + dst = {'buf': b'\x00\x01\x00\x04', 'val': "reg0", 'val2': 65540} + start = 678 + end = 704 + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + fields['buf'] \ + + basis['buf'] \ + + zfill0 \ + + algorithm['buf'] \ + + max_link['buf'] \ + + arg['buf'] \ + + zfill1 \ + + ofs_nbits['buf'] \ + + dst['buf'] + + c = NXActionMultipath(fields['val'], + basis['val'], + algorithm['val'], + max_link['val'], + arg['val'], + ofs_nbits['val'], + dst['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + eq_(self.fields['val'], self.c.fields) + eq_(self.basis['val'], self.c.basis) + eq_(self.algorithm['val'], self.c.algorithm) + eq_(self.max_link['val'], self.c.max_link) + eq_(self.arg['val'], self.c.arg) + eq_(self.ofs_nbits['val'], self.c.ofs_nbits) + eq_(self.dst['val'], self.c.dst) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.subtype['val'], res.subtype) + eq_(self.fields['val'], res.fields) + eq_(self.basis['val'], res.basis) + eq_(self.algorithm['val'], res.algorithm) + eq_(self.max_link['val'], res.max_link) + eq_(self.arg['val'], res.arg) + eq_(self.ofs_nbits['val'], res.ofs_nbits) + eq_(self.dst['val'], res.dst) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.NX_ACTION_MULTIPATH_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + eq_(self.fields['val'], res[4]) + eq_(self.basis['val'], res[5]) + eq_(self.algorithm['val'], res[6]) + eq_(self.max_link['val'], res[7]) + eq_(self.arg['val'], res[8]) + eq_(self.ofs_nbits['val'], res[9]) + eq_(self.dst['val2'], res[10]) + + +class TestNXActionBundle(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionBundle + """ + + # NX_ACTION_BUNDLE_PACK_STR + # '!HHIHHHHIHHI4x'...type, len, vendor, subtype, algorithm, + # fields, basis, slave_type, n_slaves, + # ofs_nbits, dst, zfill + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x28', 'val': (ofproto.NX_ACTION_BUNDLE_SIZE + 8)} + vendor = {'buf': b'\x00\x00\x23\x20', + 'val': ofproto_common.NX_EXPERIMENTER_ID} + subtype = {'buf': b'\x00\x0c', 'val': ofproto.NXAST_BUNDLE} + algorithm = {'buf': b'\x51\xa7', 'val': 20903} + fields = {'buf': b'\xf8\xef', 'val': 63727} + basis = {'buf': b'\xfd\x6f', 'val': 64879} + slave_type = {'buf': b'\x7c\x51\x0f\xe0', 'val': 2085687264} + n_slaves = {'buf': b'\x00\x02', 'val': 2} + ofs_nbits = {'buf': b'\x00\x00', 'val': 0} + dst = {'buf': b'\x00\x00\x00\x00', 'val': 0} + zfill = b'\x00' * 4 + + slaves_buf = (b'\x00\x01', b'\x00\x02') + slaves_val = (1, 2) + + _len = len_['val'] + len(slaves_val) * 2 + _len += (_len % 8) + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + algorithm['buf'] \ + + fields['buf'] \ + + basis['buf'] \ + + slave_type['buf'] \ + + n_slaves['buf'] \ + + ofs_nbits['buf'] \ + + dst['buf'] \ + + zfill \ + + slaves_buf[0] \ + + slaves_buf[1] + + c = NXActionBundle(algorithm['val'], + fields['val'], + basis['val'], + slave_type['val'], + n_slaves['val'], + ofs_nbits['val'], + dst['val'], + slaves_val) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + eq_(self.algorithm['val'], self.c.algorithm) + eq_(self.fields['val'], self.c.fields) + eq_(self.basis['val'], self.c.basis) + eq_(self.slave_type['val'], self.c.slave_type) + eq_(self.n_slaves['val'], self.c.n_slaves) + eq_(self.ofs_nbits['val'], self.c.ofs_nbits) + eq_(self.dst['val'], self.c.dst) + + # slaves + slaves = self.c.slaves + eq_(self.slaves_val[0], slaves[0]) + eq_(self.slaves_val[1], slaves[1]) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.subtype['val'], res.subtype) + eq_(self.algorithm['val'], res.algorithm) + eq_(self.fields['val'], res.fields) + eq_(self.basis['val'], res.basis) + eq_(self.slave_type['val'], res.slave_type) + eq_(self.n_slaves['val'], res.n_slaves) + eq_(self.ofs_nbits['val'], res.ofs_nbits) + eq_(self.dst['val'], res.dst) + + # slaves + slaves = res.slaves + eq_(self.slaves_val[0], slaves[0]) + eq_(self.slaves_val[1], slaves[1]) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = '!' \ + + ofproto.NX_ACTION_BUNDLE_PACK_STR.replace('!', '') \ + + 'HH4x' + + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + eq_(self.algorithm['val'], res[4]) + eq_(self.fields['val'], res[5]) + eq_(self.basis['val'], res[6]) + eq_(self.slave_type['val'], res[7]) + eq_(self.n_slaves['val'], res[8]) + eq_(self.ofs_nbits['val'], res[9]) + eq_(self.dst['val'], res[10]) + + +class TestNXActionBundleLoad(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionBundleLoad + """ + + # NX_ACTION_BUNDLE_PACK_STR + # '!HHIHHHHIHHI4x'...type, len, vendor, subtype, algorithm, + # fields, basis, slave_type, n_slaves, + # ofs_nbits, dst, zfill + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x28', 'val': (ofproto.NX_ACTION_BUNDLE_SIZE + 8)} + vendor = {'buf': b'\x00\x00\x23\x20', + 'val': ofproto_common.NX_EXPERIMENTER_ID} + subtype = {'buf': b'\x00\x0d', 'val': ofproto.NXAST_BUNDLE_LOAD} + algorithm = {'buf': b'\x83\x15', 'val': 33557} + fields = {'buf': b'\xc2\x7a', 'val': 49786} + basis = {'buf': b'\x86\x18', 'val': 34328} + slave_type = {'buf': b'\x18\x42\x0b\x55', 'val': 406981461} + n_slaves = {'buf': b'\x00\x02', 'val': 2} + ofs_nbits = {'buf': b'\xd2\x9d', 'val': 53917} + dst = {'buf': b'\x00\x01\x00\x04', 'val': "reg0", 'val2': 65540} + zfill = b'\x00' * 4 + + slaves_buf = (b'\x00\x01', b'\x00\x02') + slaves_val = (1, 2) + + _len = len_['val'] + len(slaves_val) * 2 + _len += (_len % 8) + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + algorithm['buf'] \ + + fields['buf'] \ + + basis['buf'] \ + + slave_type['buf'] \ + + n_slaves['buf'] \ + + ofs_nbits['buf'] \ + + dst['buf'] \ + + zfill \ + + slaves_buf[0] \ + + slaves_buf[1] + + c = NXActionBundleLoad(algorithm['val'], + fields['val'], + basis['val'], + slave_type['val'], + n_slaves['val'], + ofs_nbits['val'], + dst['val'], + slaves_val) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + eq_(self.algorithm['val'], self.c.algorithm) + eq_(self.fields['val'], self.c.fields) + eq_(self.basis['val'], self.c.basis) + eq_(self.slave_type['val'], self.c.slave_type) + eq_(self.n_slaves['val'], self.c.n_slaves) + eq_(self.ofs_nbits['val'], self.c.ofs_nbits) + eq_(self.dst['val'], self.c.dst) + + # slaves + slaves = self.c.slaves + eq_(self.slaves_val[0], slaves[0]) + eq_(self.slaves_val[1], slaves[1]) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.subtype['val'], res.subtype) + eq_(self.algorithm['val'], res.algorithm) + eq_(self.fields['val'], res.fields) + eq_(self.basis['val'], res.basis) + eq_(self.slave_type['val'], res.slave_type) + eq_(self.n_slaves['val'], res.n_slaves) + eq_(self.ofs_nbits['val'], res.ofs_nbits) + eq_(self.dst['val'], res.dst) + + # slaves + slaves = res.slaves + eq_(self.slaves_val[0], slaves[0]) + eq_(self.slaves_val[1], slaves[1]) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = '!' \ + + ofproto.NX_ACTION_BUNDLE_PACK_STR.replace('!', '') \ + + 'HH4x' + + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + eq_(self.algorithm['val'], res[4]) + eq_(self.fields['val'], res[5]) + eq_(self.basis['val'], res[6]) + eq_(self.slave_type['val'], res[7]) + eq_(self.n_slaves['val'], res[8]) + eq_(self.ofs_nbits['val'], res[9]) + eq_(self.dst['val2'], res[10]) + + +class TestNXActionOutputReg(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionOutputReg + """ + + # NX_ACTION_OUTPUT_REG_PACK_STR + # '!HHIHHIH6x'...type, len, vendor, subtype, ofs_nbits, + # src, max_len, zfill + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x18', 'val': ofproto.NX_ACTION_OUTPUT_REG_SIZE} + vendor = {'buf': b'\x00\x00\x23\x20', + 'val': ofproto_common.NX_EXPERIMENTER_ID} + subtype = {'buf': b'\x00\x0f', 'val': ofproto.NXAST_OUTPUT_REG} + ofs_nbits = {'buf': b'\xfe\x78', 'val': 65144} + src = {'buf': b'\x00\x01\x00\x04', 'val': "reg0", 'val2': 65540} + max_len = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} + zfill = b'\x00' * 6 + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + ofs_nbits['buf'] \ + + src['buf'] \ + + max_len['buf'] \ + + zfill + + c = NXActionOutputReg(ofs_nbits['val'], + src['val'], + max_len['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + eq_(self.ofs_nbits['val'], self.c.ofs_nbits) + eq_(self.src['val'], self.c.src) + eq_(self.max_len['val'], self.c.max_len) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.subtype['val'], res.subtype) + eq_(self.ofs_nbits['val'], self.c.ofs_nbits) + eq_(self.src['val'], res.src) + eq_(self.max_len['val'], res.max_len) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.NX_ACTION_OUTPUT_REG_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + eq_(self.ofs_nbits['val'], res[4]) + eq_(self.src['val2'], res[5]) + eq_(self.max_len['val'], res[6]) + + +class TestNXActionExit(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXActionExit + """ + + # NX_ACTION_HEADER_PACK_STR + # '!HHIH'...type, len, vendor, subtype + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPAT_VENDOR} + len_ = {'buf': b'\x00\x10', 'val': ofproto.NX_ACTION_HEADER_SIZE} + vendor = {'buf': b'\x00\x00\x23\x20', + 'val': ofproto_common.NX_EXPERIMENTER_ID} + subtype = {'buf': b'\x00\x11', 'val': ofproto.NXAST_EXIT} + zfill = b'\x00' * 6 + + buf = type_['buf'] \ + + len_['buf'] \ + + vendor['buf'] \ + + subtype['buf'] \ + + zfill + + c = NXActionExit() + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.subtype['val'], self.c.subtype) + + def test_parser(self): + res = OFPActionVendor.parser(self.buf, 0) + eq_(self.type_['val'], res.type) + eq_(self.len_['val'], res.len) + eq_(self.subtype['val'], res.subtype) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + fmt = ofproto.NX_ACTION_HEADER_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(self.type_['val'], res[0]) + eq_(self.len_['val'], res[1]) + eq_(self.vendor['val'], res[2]) + eq_(self.subtype['val'], res[3]) + + +class TestOFPDescStats(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPDescStats + """ + + # OFP_DESC_STATS_PACK_STR + # '!256s256s256s32s256s'...mfr_desc, hw_desc, sw_desc, serial_num, dp_desc + mfr_desc = b'mfr_desc'.ljust(256) + hw_desc = b'hw_desc'.ljust(256) + sw_desc = b'sw_desc'.ljust(256) + serial_num = b'serial_num'.ljust(32) + dp_desc = b'dp_desc'.ljust(256) + + buf = mfr_desc \ + + hw_desc \ + + sw_desc \ + + serial_num \ + + dp_desc + + c = OFPDescStats(mfr_desc, hw_desc, sw_desc, serial_num, dp_desc) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.mfr_desc, self.c.mfr_desc) + eq_(self.hw_desc, self.c.hw_desc) + eq_(self.sw_desc, self.c.sw_desc) + eq_(self.serial_num, self.c.serial_num) + eq_(self.dp_desc, self.c.dp_desc) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(self.mfr_desc, self.mfr_desc) + eq_(self.hw_desc, self.hw_desc) + eq_(self.sw_desc, self.sw_desc) + eq_(self.serial_num, self.serial_num) + eq_(self.dp_desc, self.dp_desc) + + +class TestOFPFlowStats(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPFlowStats + """ + + # OFP_FLOW_STATS_0_PACK_STR + # '!HBx'...length, table_id, zfill + length = {'buf': b'\x00\x58', 'val': 88} + length_append_action = {'buf': b'\x00\x60', 'val': 96} + table_id = {'buf': b'\x51', 'val': 81} + zfill_0 = b'\x00' + + # OFP_MATCH_PACK_STR + # '!IH6s6sHBxHBB2xIIHH'... + match = b'\x97\x7c\xa6\x1e' \ + + b'\x5e\xa0' \ + + b'\x7a\x3e\xed\x30\x4a\x90' \ + + b'\x96\x8e\x67\xbe\x2f\xe2' \ + + b'\xb1\x81' \ + + b'\xbe' \ + + b'\x00' \ + + b'\x01\xab' \ + + b'\x42' \ + + b'\xfe' \ + + b'\x00\x00' \ + + b'\xa4\x5d\x5c\x42' \ + + b'\xa2\x5c\x2e\x05' \ + + b'\x5a\x94' \ + + b'\x64\xd4' + + # OFP_FLOW_STATS_1_PACK_STR + # '!IIHHH6xQQQ'...duration_sec, duration_nsec, priority, + # idle_timeout, hard_timeout, zfill, + # cookie, packet_count, byte_count + duration_sec = {'buf': b'\x94\x19\xb3\xd2', 'val': 2484712402} + duration_nsec = {'buf': b'\xee\x66\xcf\x7c', 'val': 3999715196} + priority = {'buf': b'\xe1\xc0', 'val': 57792} + idle_timeout = {'buf': b'\x8e\x10', 'val': 36368} + hard_timeout = {'buf': b'\xd4\x99', 'val': 54425} + zfill_1 = b'\x00\x00\x00\x00\x00\x00' + cookie = {'buf': b'\x0b\x01\xe8\xe5\xf0\x84\x8a\xe0', + 'val': 793171083674290912} + packet_count = {'buf': b'\x47\x5c\xc6\x05\x28\xff\x7c\xdb', + 'val': 5142202600015232219} + byte_count = {'buf': b'\x24\xe9\x4b\xee\xcb\x57\xd9\xc3', + 'val': 2659740543924820419} + + # _PACK_STR...type_, len_ [others...] + type = {'buf': b'\x00\x00', 'val': ofproto.OFPAT_OUTPUT} + len = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} + port = {'buf': b'\x59\x2a', 'val': 22826} + max_len = {'buf': b'\x00\x08', 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} + action = (type, len, port, max_len) + + ACTION_TYPE = 0 + ACTION_LEN = 1 + ACTION_PORT = 2 + ACTION_MAX_LEN = 3 + + c = OFPFlowStats() + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def _parser(self, action=None): + buf = self.table_id['buf'] \ + + self.zfill_0 \ + + self.match \ + + self.duration_sec['buf'] \ + + self.duration_nsec['buf'] \ + + self.priority['buf'] \ + + self.idle_timeout['buf'] \ + + self.hard_timeout['buf'] \ + + self.zfill_1 \ + + self.cookie['buf'] \ + + self.packet_count['buf'] \ + + self.byte_count['buf'] + + if not action: + buf = self.length['buf'] + buf + else: + buf = self.length_append_action['buf'] + buf + + for a in self.action: + buf = buf + a['buf'] + + return self.c.parser(buf, 0) + + def test_parser(self): + res = self._parser() + + eq_(self.length['val'], res.length) + eq_(self.table_id['val'], res.table_id) + eq_(self.duration_sec['val'], res.duration_sec) + eq_(self.duration_nsec['val'], res.duration_nsec) + eq_(self.priority['val'], res.priority) + eq_(self.idle_timeout['val'], res.idle_timeout) + eq_(self.hard_timeout['val'], res.hard_timeout) + eq_(self.cookie['val'], res.cookie) + eq_(self.packet_count['val'], res.packet_count) + eq_(self.byte_count['val'], res.byte_count) + + def test_parser_append_actions(self): + res = self._parser(True).actions[0] + + eq_(self.action[self.ACTION_TYPE]['val'], res.type) + eq_(self.action[self.ACTION_LEN]['val'], res.len) + eq_(self.action[self.ACTION_PORT]['val'], res.port) + eq_(self.action[self.ACTION_MAX_LEN]['val'], res.max_len) + + +class TestOFPAggregateStats(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPAggregateStats + """ + + # OFP_AGGREGATE_STATS_REPLY_PACK_STR + # '!QQI4x'...packet_count, byte_count, flow_count, zfill + packet_count = {'buf': b'\x43\x95\x1b\xfb\x0f\xf6\xa7\xdd', + 'val': 4869829337189623773} + byte_count = {'buf': b'\x36\xda\x2d\x80\x2a\x95\x35\xdd', + 'val': 3952521651464517085} + flow_count = {'buf': b'\xc3\x0d\xc3\xed', 'val': 3272459245} + zfill = b'\x00' * 4 + + buf = packet_count['buf'] \ + + byte_count['buf'] \ + + flow_count['buf'] \ + + zfill + + c = OFPAggregateStats(packet_count['val'], + byte_count['val'], + flow_count['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.packet_count['val'], self.c.packet_count) + eq_(self.byte_count['val'], self.c.byte_count) + eq_(self.flow_count['val'], self.c.flow_count) + + def test_parser(self): + + res = self.c.parser(self.buf, 0) + + eq_(self.packet_count['val'], res.packet_count) + eq_(self.byte_count['val'], res.byte_count) + eq_(self.flow_count['val'], res.flow_count) + + +class TestOFPTableStats(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPTableStats + """ + + # OFP_TABLE_STATS_PACK_STR + # '!B3x32sIIIQQ'...table_id, zfill, name, wildcards, max_entries, + # active_count, lookup_count, matched_count + table_id = {'buf': b'\x5b', 'val': 91} + zfill = b'\x00' * 3 + name = b'name'.ljust(32) + wildcards = {'buf': b'\xc5\xaf\x6e\x12', 'val': 3316608530} + max_entries = {'buf': b'\x95\x6c\x78\x4d', 'val': 2506913869} + active_count = {'buf': b'\x78\xac\xa8\x1e', 'val': 2024581150} + lookup_count = {'buf': b'\x40\x1d\x9c\x39\x19\xec\xd4\x1c', + 'val': 4620020561814017052} + matched_count = {'buf': b'\x27\x35\x02\xb6\xc5\x5e\x17\x65', + 'val': 2825167325263435621} + + buf = table_id['buf'] \ + + zfill \ + + name \ + + wildcards['buf'] \ + + max_entries['buf'] \ + + active_count['buf'] \ + + lookup_count['buf'] \ + + matched_count['buf'] + + c = OFPTableStats(table_id['val'], + name, + wildcards['val'], + max_entries['val'], + active_count['val'], + lookup_count['val'], + matched_count['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.table_id['val'], self.c.table_id) + eq_(self.name, self.c.name) + eq_(self.wildcards['val'], self.c.wildcards) + eq_(self.max_entries['val'], self.c.max_entries) + eq_(self.active_count['val'], self.c.active_count) + eq_(self.lookup_count['val'], self.c.lookup_count) + eq_(self.matched_count['val'], self.c.matched_count) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(self.table_id['val'], res.table_id) + eq_(self.name, res.name) + eq_(self.wildcards['val'], res.wildcards) + eq_(self.max_entries['val'], res.max_entries) + eq_(self.active_count['val'], res.active_count) + eq_(self.lookup_count['val'], res.lookup_count) + eq_(self.matched_count['val'], res.matched_count) + + +class TestOFPPortStats(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPPortStats + """ + + # OFP_PORT_STATS_PACK_STR + # '!H6xQQQQQQQQQQQQ'... port_no, zfill, rx_packets, tx_packets, + # rx_bytes, tx_bytes, rx_dropped, tx_dropped, + # rx_errors, tx_errors, rx_frame_err, + # rx_over_err, rx_crc_err, collisions + port_no = {'buf': b'\xe7\x6b', 'val': 59243} + zfill = b'\x00' * 6 + rx_packets = {'buf': b'\x53\x44\x36\x61\xc4\x86\xc0\x37', + 'val': 5999980397101236279} + tx_packets = {'buf': b'\x27\xa4\x41\xd7\xd4\x53\x9e\x42', + 'val': 2856480458895760962} + rx_bytes = {'buf': b'\x55\xa1\x38\x60\x43\x97\x0d\x89', + 'val': 6170274950576278921} + tx_bytes = {'buf': b'\x77\xe1\xd5\x63\x18\xae\x63\xaa', + 'val': 8638420181865882538} + rx_dropped = {'buf': b'\x60\xe6\x20\x01\x24\xda\x4e\x5a', + 'val': 6982303461569875546} + tx_dropped = {'buf': b'\x09\x2d\x5d\x71\x71\xb6\x8e\xc7', + 'val': 661287462113808071} + rx_errors = {'buf': b'\x2f\x7e\x35\xb3\x66\x3c\x19\x0d', + 'val': 3422231811478788365} + tx_errors = {'buf': b'\x57\x32\x08\x2f\x88\x32\x40\x6b', + 'val': 6283093430376743019} + rx_frame_err = {'buf': b'\x0c\x28\x6f\xad\xce\x66\x6e\x8b', + 'val': 876072919806406283} + rx_over_err = {'buf': b'\x5a\x90\x8f\x9b\xfc\x82\x2e\xa0', + 'val': 6525873760178941600} + rx_crc_err = {'buf': b'\x73\x3a\x71\x17\xd6\x74\x69\x47', + 'val': 8303073210207070535} + collisions = {'buf': b'\x2f\x52\x0c\x79\x96\x03\x6e\x79', + 'val': 3409801584220270201} + + buf = port_no['buf'] \ + + zfill \ + + rx_packets['buf'] \ + + tx_packets['buf'] \ + + rx_bytes['buf'] \ + + tx_bytes['buf'] \ + + rx_dropped['buf'] \ + + tx_dropped['buf'] \ + + rx_errors['buf'] \ + + tx_errors['buf'] \ + + rx_frame_err['buf'] \ + + rx_over_err['buf'] \ + + rx_crc_err['buf'] \ + + collisions['buf'] + + c = OFPPortStats(port_no['val'], + rx_packets['val'], + tx_packets['val'], + rx_bytes['val'], + tx_bytes['val'], + rx_dropped['val'], + tx_dropped['val'], + rx_errors['val'], + tx_errors['val'], + rx_frame_err['val'], + rx_over_err['val'], + rx_crc_err['val'], + collisions['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.port_no['val'], self.c.port_no) + eq_(self.rx_packets['val'], self.c.rx_packets) + eq_(self.tx_packets['val'], self.c.tx_packets) + eq_(self.rx_bytes['val'], self.c.rx_bytes) + eq_(self.tx_bytes['val'], self.c.tx_bytes) + eq_(self.rx_dropped['val'], self.c.rx_dropped) + eq_(self.tx_dropped['val'], self.c.tx_dropped) + eq_(self.rx_errors['val'], self.c.rx_errors) + eq_(self.tx_errors['val'], self.c.tx_errors) + eq_(self.rx_frame_err['val'], self.c.rx_frame_err) + eq_(self.rx_over_err['val'], self.c.rx_over_err) + eq_(self.rx_crc_err['val'], self.c.rx_crc_err) + eq_(self.collisions['val'], self.c.collisions) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(self.port_no['val'], res.port_no) + eq_(self.rx_packets['val'], res.rx_packets) + eq_(self.tx_packets['val'], res.tx_packets) + eq_(self.rx_bytes['val'], res.rx_bytes) + eq_(self.tx_bytes['val'], res.tx_bytes) + eq_(self.rx_dropped['val'], res.rx_dropped) + eq_(self.tx_dropped['val'], res.tx_dropped) + eq_(self.rx_errors['val'], res.rx_errors) + eq_(self.tx_errors['val'], res.tx_errors) + eq_(self.rx_frame_err['val'], res.rx_frame_err) + eq_(self.rx_over_err['val'], res.rx_over_err) + eq_(self.rx_crc_err['val'], res.rx_crc_err) + eq_(self.collisions['val'], res.collisions) + + +class TestOFPQueueStats(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPQueueStats + """ + + # OFP_QUEUE_STATS_PACK_STR + # '!H2xIQQQ...port_no, queue_id, tx_bytes, tx_packets, tx_errors + port_no = {'buf': b'\xe7\x6b', 'val': 59243} + zfill = b'\x00' * 2 + queue_id = {'buf': b'\x2a\xa8\x7f\x32', 'val': 715685682} + tx_bytes = {'buf': b'\x77\xe1\xd5\x63\x18\xae\x63\xaa', + 'val': 8638420181865882538} + tx_packets = {'buf': b'\x27\xa4\x41\xd7\xd4\x53\x9e\x42', + 'val': 2856480458895760962} + tx_errors = {'buf': b'\x57\x32\x08\x2f\x88\x32\x40\x6b', + 'val': 6283093430376743019} + + c = OFPQueueStats(port_no['val'], + queue_id['val'], + tx_bytes['val'], + tx_packets['val'], + tx_errors['val']) + + buf = port_no['buf'] \ + + zfill \ + + queue_id['buf'] \ + + tx_bytes['buf'] \ + + tx_packets['buf'] \ + + tx_errors['buf'] + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.port_no['val'], self.c.port_no) + eq_(self.queue_id['val'], self.c.queue_id) + eq_(self.tx_bytes['val'], self.c.tx_bytes) + eq_(self.tx_packets['val'], self.c.tx_packets) + eq_(self.tx_errors['val'], self.c.tx_errors) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(self.port_no['val'], res.port_no) + eq_(self.queue_id['val'], res.queue_id) + eq_(self.tx_bytes['val'], res.tx_bytes) + eq_(self.tx_packets['val'], res.tx_packets) + eq_(self.tx_errors['val'], res.tx_errors) + + +class TestOFPVendorStats(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPVendorStats + """ + + specific_data = 'specific_data' + specific_data_after = 'data' + offset = specific_data.find(specific_data_after) + + c = OFPVendorStats(specific_data) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.specific_data, self.c.specific_data) + + def test_parser(self): + res = self.c.parser(self.specific_data, self.offset) + eq_(self.specific_data_after, res.specific_data) + + +class TestOFPQueuePropNone(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPQueuePropNone + """ + + # OFP_QUEUE_PROP_HEADER_PACK_STR + # '!HH4x'...property_, len_ + property = {'buf': b'\x00\x00', 'val': ofproto.OFPQT_NONE} + len = {'buf': b'\x00\x08', 'val': ofproto.OFP_QUEUE_PROP_HEADER_SIZE} + zfill = b'\x00' * 4 + + c = OFPQueuePropNone() + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + cls = OFPQueuePropHeader._QUEUE_PROPERTIES[self.c.cls_prop_type] + + eq_(self.property['val'], self.c.cls_prop_type) + eq_(self.property['val'], self.c.property) + eq_(self.property['val'], cls.cls_prop_type) + + eq_(self.len['val'], self.c.cls_prop_len) + eq_(self.len['val'], self.c.len) + eq_(self.len['val'], cls.cls_prop_len) + + def test_parser(self): + buf = self.property['buf'] \ + + self.len['buf'] \ + + self.zfill + + ok_(self.c.parser(buf, 0)) + + +class TestOFPQueuePropMinRate(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPQueuePropMinRate + """ + + # OFP_QUEUE_PROP_MIN_RATE_PACK_STR + # '!H6x'...rate + rate = {'buf': b'\x00\x01', 'val': ofproto.OFPQT_MIN_RATE} + len = {'buf': b'\x00\x10', 'val': ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE} + zfill = b'\x00' * 6 + + buf = rate['buf'] \ + + zfill + + c = OFPQueuePropMinRate(rate['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + cls = OFPQueuePropHeader._QUEUE_PROPERTIES[self.c.cls_prop_type] + + eq_(self.rate['val'], self.c.cls_prop_type) + eq_(self.rate['val'], self.c.rate) + eq_(self.rate['val'], cls.cls_prop_type) + + eq_(self.len['val'], self.c.cls_prop_len) + eq_(self.len['val'], cls.cls_prop_len) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + eq_(self.rate['val'], res.rate) + + +class TestOFPPacketQueue(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPPacketQueue + """ + + # OFP_PACKET_QUEUE_PQCK_STR + # '!IH2x'...queue_id, len_, zfill + queue_id = {'buf': b'\x4d\x4b\x3a\xd1', 'val': 1296775889} + len_ = {'buf': b'\x00\x08', + 'val': ofproto.OFP_QUEUE_PROP_HEADER_SIZE} + zfill = b'\x00' * 2 + + buf = queue_id['buf'] \ + + len_['buf'] \ + + zfill + + c = OFPPacketQueue(queue_id['val'], + len_['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.queue_id['val'], self.c.queue_id) + eq_(self.len_['val'], self.c.len) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + eq_(self.queue_id['val'], res.queue_id) + eq_(self.len_['val'], res.len) + + def test_parser_append_prop(self): + # OFP_QUEUE_PROP_HEADER_PACK_STR + OFP_QUEUE_PROP_MIN_RATE_PACK_STR + # '!HH4xH6x'...type, len, zfill, rate, zfill + len_ = {'buf': b'\x00\x10', + 'val': ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE} + a_type = {'buf': b'\x00\x01', 'val': ofproto.OFPQT_MIN_RATE} + a_len = {'buf': b'\x00\x10', + 'val': ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE} + a_zfill0 = b'\x00' * 4 + a_rate = {'buf': b'\x00\x01', 'val': ofproto.OFPQT_MIN_RATE} + a_zfill1 = b'\x00' * 6 + + buf = self.queue_id['buf'] \ + + len_['buf'] \ + + self.zfill \ + + a_type['buf'] \ + + a_len['buf'] \ + + a_zfill0 \ + + a_rate['buf'] \ + + a_zfill1 + + res = self.c.parser(buf, 0) + + eq_(self.queue_id['val'], res.queue_id) + eq_(len_['val'], res.len) + + append_cls = res.properties[0] + + eq_(a_type['val'], append_cls.property) + eq_(a_len['val'], append_cls.len) + eq_(a_rate['val'], append_cls.rate) + + +class TestOFPHello(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPHello + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_HELLO + msg_len = ofproto.OFP_HEADER_SIZE + xid = 2183948390 + data = b'\x00\x01\x02\x03' + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = struct.pack(fmt, version, msg_type, msg_len, xid) \ + + data + + res = OFPHello.parser(object, version, msg_type, msg_len, xid, + bytearray(buf)) + + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(six.binary_type(buf), six.binary_type(res.buf)) + + def test_serialize(self): + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPHello(Datapath) + c.serialize() + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_HELLO, c.msg_type) + eq_(0, c.xid) + + +class TestOFPErrorMsg(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPErrorMsg + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x01', 'val': ofproto.OFPT_ERROR} + msg_len = {'buf': b'\x00\x0c', + 'val': ofproto.OFP_ERROR_MSG_SIZE} + xid = {'buf': b'\x87\x8b\x26\x7c', 'val': 2274043516} + type = {'buf': b'\xab\x3e', 'val': 43838} + code = {'buf': b'\x5d\x3c', 'val': 23868} + data = b'Error Message.' + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] \ + + type['buf'] \ + + code['buf'] \ + + data + + res = OFPErrorMsg.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(type['val'], res.type) + eq_(code['val'], res.code) + eq_(data, res.data) + + def test_serialize(self): + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + type = 1306 + code = 13774 + data = b'Error Message.' + + c = OFPErrorMsg(Datapath) + c.type = type + c.code = code + c.data = data + + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_ERROR, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_ERROR_MSG_PACK_STR.replace('!', '') \ + + str(len(data)) + 's' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_ERROR, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, res[3]) + eq_(type, res[4]) + eq_(code, res[5]) + eq_(data, res[6]) + + +class TestOFPEchoRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPEchoRequest + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x02', 'val': ofproto.OFPT_ECHO_REQUEST} + msg_len = {'buf': b'\x00\x08', + 'val': ofproto.OFP_HEADER_SIZE} + xid = {'buf': b'\x84\x47\xef\x3f', 'val': 2219306815} + data = b'Request Message.' + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] \ + + data + + res = OFPEchoRequest.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(data, res.data) + + def test_serialize(self): + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + data = b'Request Message.' + + c = OFPEchoRequest(Datapath) + c.data = data + + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_ECHO_REQUEST, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + str(len(data)) + 's' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_ECHO_REQUEST, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, res[3]) + eq_(data, res[4]) + + +class TestOFPEchoReply(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPEchoReply + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x03', 'val': ofproto.OFPT_ECHO_REPLY} + msg_len = {'buf': b'\x00\x08', + 'val': ofproto.OFP_HEADER_SIZE} + xid = {'buf': b'\x6e\x21\x3e\x62', 'val': 1847672418} + data = b'Reply Message.' + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] \ + + data + + res = OFPEchoReply.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(data, res.data) + + def test_serialize(self): + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + data = b'Reply Message.' + + c = OFPEchoReply(Datapath) + c.data = data + + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_ECHO_REPLY, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + str(len(data)) + 's' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_ECHO_REPLY, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, res[3]) + eq_(data, res[4]) + + +class TestOFPVendor(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPVendor + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x04', 'val': ofproto.OFPT_VENDOR} + msg_len = {'buf': b'\x00\x0c', + 'val': ofproto.OFP_VENDOR_HEADER_SIZE} + xid = {'buf': b'\x05\x45\xdf\x18', 'val': 88465176} + vendor = {'buf': b'\x53\xea\x25\x3e', 'val': 1407853886} + data = b'Vendor Message.' + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] \ + + vendor['buf'] \ + + data + + res = OFPVendor.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(vendor['val'], res.vendor) + eq_(data, res.data) + + def test_serialize(self): + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + vendor = {'buf': b'\x38\x4b\xf9\x6c', 'val': 944503148} + data = b'Reply Message.' + + c = OFPVendor(Datapath) + c.vendor = vendor['val'] + c.data = data + + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_VENDOR, c.msg_type) + eq_(0, c.xid) + eq_(vendor['val'], c.vendor) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_VENDOR_HEADER_PACK_STR.replace('!', '') \ + + str(len(data)) + 's' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_VENDOR, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, res[3]) + eq_(vendor['val'], res[4]) + eq_(data, res[5]) + + +# class TestNXTRequest(unittest.TestCase): +class TestNiciraHeader(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NiciraHeader + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + subtype = ofproto.NXT_FLOW_MOD_TABLE_ID + + c = NiciraHeader(object, subtype) + eq_(subtype, c.subtype) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + data = b'Reply Message.' + subtype = ofproto.NXT_FLOW_MOD_TABLE_ID + + c = NiciraHeader(Datapath, subtype) + c.data = data + + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_VENDOR, c.msg_type) + eq_(0, c.xid) + eq_(ofproto_common.NX_EXPERIMENTER_ID, c.vendor) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ + + str(len(data)) + 's' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_VENDOR, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, res[3]) + eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) + eq_(subtype, res[5]) + eq_(data, res[6]) + + +class TestNXTSetFlowFormat(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXTSetFlowFormat + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + flow_format = {'buf': b'\xdc\x6b\xf5\x24', 'val': 3698062628} + + c = NXTSetFlowFormat(object, flow_format['val']) + eq_(flow_format['val'], c.format) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + flow_format = {'buf': b'\x5a\x4e\x59\xad', 'val': 1515084205} + + c = NXTSetFlowFormat(Datapath, flow_format['val']) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_VENDOR, c.msg_type) + eq_(0, c.xid) + eq_(ofproto_common.NX_EXPERIMENTER_ID, c.vendor) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ + + ofproto.NX_SET_FLOW_FORMAT_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_VENDOR, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, res[3]) + eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) + eq_(ofproto.NXT_SET_FLOW_FORMAT, res[5]) + eq_(flow_format['val'], res[6]) + + +class TestNXTFlowMod(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXTFlowMod + """ + + # NX_FLOW_MOD_PACK_STR + # '!Q4HI3H6x'...cokkie, command, idle_timeout, head_timeout, + # priority, buffer_id, out_port, flags, rule, zfill + cookie = {'buf': b'\x04\x56\x27\xad\xbd\x43\xd6\x83', + 'val': 312480851306993283} + command = {'buf': b'\x61\xaa', 'val': 25002} + idle_timeout = {'buf': b'\x4e\xff', 'val': 20223} + hard_timeout = {'buf': b'\x80\x16', 'val': 32790} + priority = {'buf': b'\x70\x5f', 'val': 28767} + buffer_id = {'buf': b'\x7b\x97\x3a\x09', 'val': 2073508361} + out_port = {'buf': b'\x11\x7d', 'val': 4477} + flags = {'buf': b'\x5c\xb9', 'val': 23737} + rule = nx_match.ClsRule() + zfill = b'\x00' * 6 + + port = {'buf': b'\x2a\xe0', 'val': 10976} + actions = [OFPActionOutput(port['val'])] + + def _get_obj(self, append_action=False): + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + actions = None + if append_action: + actions = self.actions + + c = NXTFlowMod(Datapath, + self.cookie['val'], + self.command['val'], + self.idle_timeout['val'], + self.hard_timeout['val'], + self.priority['val'], + self.buffer_id['val'], + self.out_port['val'], + self.flags['val'], + self.rule, + actions) + + return c + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + c = self._get_obj() + + eq_(self.cookie['val'], c.cookie) + eq_(self.command['val'], c.command) + eq_(self.idle_timeout['val'], c.idle_timeout) + eq_(self.hard_timeout['val'], c.hard_timeout) + eq_(self.priority['val'], c.priority) + eq_(self.buffer_id['val'], c.buffer_id) + eq_(self.out_port['val'], c.out_port) + eq_(self.flags['val'], c.flags) + eq_(self.rule.__hash__(), c.rule.__hash__()) + + def test_init_append_actions(self): + c = self._get_obj(True) + + action = c.actions[0] + eq_(ofproto.OFPAT_OUTPUT, action.type) + eq_(ofproto.OFP_ACTION_OUTPUT_SIZE, action.len) + eq_(self.port['val'], action.port) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + c = self._get_obj() + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_VENDOR, c.msg_type) + eq_(0, c.xid) + eq_(ofproto_common.NX_EXPERIMENTER_ID, c.vendor) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ + + ofproto.NX_FLOW_MOD_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_VENDOR, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, res[3]) + eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) + eq_(ofproto.NXT_FLOW_MOD, res[5]) + eq_(self.cookie['val'], res[6]) + eq_(self.command['val'], res[7]) + eq_(self.idle_timeout['val'], res[8]) + eq_(self.hard_timeout['val'], res[9]) + eq_(self.priority['val'], res[10]) + eq_(self.buffer_id['val'], res[11]) + eq_(self.out_port['val'], res[12]) + eq_(self.flags['val'], res[13]) + + def test_serialize_append_actions(self): + c = self._get_obj(True) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_VENDOR, c.msg_type) + eq_(0, c.xid) + eq_(ofproto_common.NX_EXPERIMENTER_ID, c.vendor) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ + + ofproto.NX_FLOW_MOD_PACK_STR.replace('!', '') \ + + ofproto.OFP_ACTION_OUTPUT_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_VENDOR, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, res[3]) + eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) + eq_(ofproto.NXT_FLOW_MOD, res[5]) + eq_(self.cookie['val'], res[6]) + eq_(self.command['val'], res[7]) + eq_(self.idle_timeout['val'], res[8]) + eq_(self.hard_timeout['val'], res[9]) + eq_(self.priority['val'], res[10]) + eq_(self.buffer_id['val'], res[11]) + eq_(self.out_port['val'], res[12]) + eq_(self.flags['val'], res[13]) + + # action + eq_(0, res[14]) + eq_(ofproto.OFPAT_OUTPUT, res[15]) + eq_(ofproto.OFP_ACTION_OUTPUT_SIZE, res[16]) + eq_(self.port['val'], res[17]) + eq_(0xffe5, res[18]) + + +class TestNXTRoleRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXTRoleRequest + """ + + # NX_ROLE_PACK_STR + # '!I'...role + role = {'buf': b'\x62\x81\x27\x61', 'val': 1652631393} + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = NXTRoleRequest(Datapath, role['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.role['val'], self.c.role) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_VENDOR, self.c.msg_type) + eq_(0, self.c.xid) + eq_(ofproto_common.NX_EXPERIMENTER_ID, self.c.vendor) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ + + ofproto.NX_ROLE_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_VENDOR, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) + eq_(ofproto.NXT_ROLE_REQUEST, res[5]) + eq_(self.role['val'], res[6]) + + +class TestNXTFlowModTableId(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.NXTFlowModTableId + """ + + # NX_FLOW_MOD_TABLE_ID_PACK_STR + # '!B7x'...set_, zfill + set_ = {'buf': b'\x71', 'val': 113} + zfill = b'\x00' * 7 + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = NXTFlowModTableId(Datapath, set_['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.set_['val'], self.c.set) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_VENDOR, self.c.msg_type) + eq_(0, self.c.xid) + eq_(ofproto_common.NX_EXPERIMENTER_ID, self.c.vendor) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.NICIRA_HEADER_PACK_STR.replace('!', '') \ + + ofproto.NX_FLOW_MOD_TABLE_ID_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_VENDOR, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + eq_(ofproto_common.NX_EXPERIMENTER_ID, res[4]) + eq_(ofproto.NXT_FLOW_MOD_TABLE_ID, res[5]) + eq_(self.set_['val'], res[6]) + + +class TestOFPSwitchFeatures(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPSwitchFeatures + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPSwitchFeatures(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x06', 'val': ofproto.OFPT_FEATURES_REPLY} + msg_len_val = ofproto.OFP_SWITCH_FEATURES_SIZE \ + + ofproto.OFP_PHY_PORT_SIZE + msg_len = {'buf': b'\x00\x4c', 'val': msg_len_val} + xid = {'buf': b'\xcc\x0a\x41\xd4', 'val': 3423224276} + + # OFP_SWITCH_FEATURES_PACK_STR + # '!QIB3xII'...datapath_id, n_buffers, n_tables, + # zfill, capabilities, actions + datapath_id = {'buf': b'\x11\xa3\x72\x63\x61\xde\x39\x81', + 'val': 1270985291017894273} + n_buffers = {'buf': b'\x80\x14\xd7\xf6', 'val': 2148849654} + n_tables = {'buf': b'\xe4', 'val': 228} + zfill = b'\x00' * 3 + capabilities = {'buf': b'\x69\x4f\xe4\xc2', 'val': 1766843586} + actions = {'buf': b'\x78\x06\xd9\x0c', 'val': 2013714700} + + # OFP_PHY_PORT_PACK_STR + # '!H6s16sIIIIII'... port_no, hw_addr, name, config, state + # curr, advertised, supported, peer + port_no = {'buf': b'\xe7\x6b', 'val': 59243} + hw_addr = '3c:d1:2b:8d:3f:d6' + name = b'name'.ljust(16) + config = {'buf': b'\x84\xb6\x8c\x53', 'val': 2226555987} + state = {'buf': b'\x64\x07\xfb\xc9', 'val': 1678244809} + curr = {'buf': b'\xa9\xe8\x0a\x2b', 'val': 2850556459} + advertised = {'buf': b'\x78\xb9\x7b\x72', 'val': 2025421682} + supported = {'buf': b'\x7e\x65\x68\xad', 'val': 2120575149} + peer = {'buf': b'\xa4\x5b\x8b\xed', 'val': 2757463021} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] \ + + datapath_id['buf'] \ + + n_buffers['buf'] \ + + n_tables['buf'] \ + + zfill \ + + capabilities['buf'] \ + + actions['buf'] \ + + port_no['buf'] \ + + addrconv.mac.text_to_bin(hw_addr) \ + + name \ + + config['buf'] \ + + state['buf'] \ + + curr['buf'] \ + + advertised['buf'] \ + + supported['buf'] \ + + peer['buf'] + + res = OFPSwitchFeatures.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(datapath_id['val'], res.datapath_id) + eq_(n_buffers['val'], res.n_buffers) + eq_(n_tables['val'], res.n_tables) + eq_(capabilities['val'], res.capabilities) + eq_(actions['val'], res.actions) + + # port + port = res.ports[port_no['val']] + eq_(port_no['val'], port.port_no) + eq_(hw_addr, hw_addr) + eq_(name, port.name) + eq_(config['val'], port.config) + eq_(state['val'], port.state) + eq_(curr['val'], port.curr) + eq_(advertised['val'], port.advertised) + eq_(supported['val'], port.supported) + eq_(peer['val'], port.peer) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPPortStatus(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPPortStatus + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPPortStatus(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x0c', 'val': ofproto.OFPT_PORT_STATUS} + msg_len = {'buf': b'\x00\x40', + 'val': ofproto.OFP_PORT_STATUS_SIZE} + xid = {'buf': b'\x06\x27\x8b\x7b', 'val': 103254907} + + # OFP_PORT_STATUS_PACK_STR + # '!B7xH6s16sIIIIII'...reason, zfill, port_no, hw_addr, + # name, config, state, curr, + # advertised, supported, peer + reason = {'buf': b'\x71', 'val': 113} + zfill = b'\x00' * 7 + port_no = {'buf': b'\x48\xd8', 'val': 18648} + hw_addr = '41:f7:a3:52:8f:6b' + name = b'name'.ljust(16) + config = {'buf': b'\xae\x73\x90\xec', 'val': 2926809324} + state = {'buf': b'\x41\x37\x32\x1d', 'val': 1094136349} + curr = {'buf': b'\xa9\x47\x13\x2c', 'val': 2840007468} + advertised = {'buf': b'\xce\x6b\x4a\x87', 'val': 3463137927} + supported = {'buf': b'\xb8\x06\x65\xa1', 'val': 3087426977} + peer = {'buf': b'\x6a\x11\x52\x39', 'val': 1779520057} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] \ + + reason['buf'] \ + + zfill \ + + port_no['buf'] \ + + addrconv.mac.text_to_bin(hw_addr) \ + + name \ + + config['buf'] \ + + state['buf'] \ + + curr['buf'] \ + + advertised['buf'] \ + + supported['buf'] \ + + peer['buf'] + + res = OFPPortStatus.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(reason['val'], res.reason) + + # desc + desc = res.desc + eq_(port_no['val'], desc.port_no) + eq_(hw_addr, desc.hw_addr) + eq_(name, desc.name) + eq_(config['val'], desc.config) + eq_(state['val'], desc.state) + eq_(curr['val'], desc.curr) + eq_(advertised['val'], desc.advertised) + eq_(supported['val'], desc.supported) + eq_(peer['val'], desc.peer) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPPacketIn(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPPacketIn + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPPacketIn(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def _test_parser(self, padding=False): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x0a', 'val': ofproto.OFPT_PACKET_IN} + msg_len = {'buf': b'\x00\x14', + 'val': ofproto.OFP_PACKET_IN_SIZE} + xid = {'buf': b'\xd0\x23\x8c\x34', 'val': 3491990580} + + # OFP_PACKET_IN_PACK_STR + # '!IHHBx2x'...buffer_id, total_len, + # in_port, reason, zfill, data + buffer_id = {'buf': b'\xae\x73\x90\xec', 'val': 2926809324} + total_len = {'buf': b'\x00\x10', 'val': 16} + in_port = {'buf': b'\x08\x42', 'val': 2114} + reason = {'buf': b'\x43', 'val': 67} + zfill = b'\x00' * 1 + if padding: + data = b'PACKET IN'.ljust(20) + else: + data = b'PACKET IN'.ljust(16) + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] \ + + buffer_id['buf'] \ + + total_len['buf'] \ + + in_port['buf'] \ + + reason['buf'] \ + + zfill \ + + data + + res = OFPPacketIn.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(buffer_id['val'], res.buffer_id) + eq_(total_len['val'], res.total_len) + eq_(in_port['val'], res.in_port) + eq_(reason['val'], res.reason) + eq_(data[0:16], res.data) + + return True + + def test_parser(self): + ok_(self._test_parser()) + + def test_parser_padding(self): + ok_(self._test_parser(True)) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPGetConfigReply(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPGetConfigReply + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPGetConfigReply(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x0a', 'val': ofproto.OFPT_GET_CONFIG_REPLY} + msg_len = {'buf': b'\x00\x14', + 'val': ofproto.OFP_SWITCH_CONFIG_SIZE} + xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} + + # OFP_SWITCH_CONFIG_PACK_STR + # '!HH'...flags, miss_send_len + flags = {'buf': b'\xa0\xe2', 'val': 41186} + miss_send_len = {'buf': b'\x36\x0e', 'val': 13838} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] \ + + flags['buf'] \ + + miss_send_len['buf'] + + res = OFPGetConfigReply.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(flags['val'], res.flags) + eq_(miss_send_len['val'], res.miss_send_len) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPBarrierReply(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPBarrierReply + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPBarrierReply(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x13', 'val': ofproto.OFPT_BARRIER_REPLY} + msg_len = {'buf': b'\x00\x08', + 'val': ofproto.OFP_HEADER_SIZE} + xid = {'buf': b'\x66\xc4\xc3\xac', 'val': 1724171180} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] + + res = OFPBarrierReply.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPFlowRemoved(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPFlowRemoved + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPFlowRemoved(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x0a', 'val': ofproto.OFPT_FLOW_REMOVED} + msg_len = {'buf': b'\x00\x14', + 'val': ofproto.OFP_FLOW_REMOVED_SIZE} + xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] + + # OFP_MATCH_PACK_STR + # '!IH6s6sHBxHBB2xIIHH'...wildcards, in_port, dl_src, dl_dst, dl_vlan, + # dl_vlan_pcp, dl_type, nw_tos, nw_proto, + # nw_src, nw_dst, tp_src, tp_dst + wildcards = {'buf': b'\xd2\x71\x25\x23', 'val': 3530630435} + in_port = {'buf': b'\x37\x8b', 'val': 14219} + dl_src = b'\x7f\x85\xc4\x70\x12\xda' + dl_dst = b'\x0a\x51\x17\x58\xb0\xbb' + dl_vlan = {'buf': b'\xc1\xf9', 'val': 49657} + dl_vlan_pcp = {'buf': b'\x79', 'val': 121} + zfill0 = b'\x00' + dl_type = {'buf': b'\xa6\x9e', 'val': 42654} + nw_tos = {'buf': b'\xde', 'val': 222} + nw_proto = {'buf': b'\xe5', 'val': 229} + zfil11 = b'\x00' * 2 + nw_src = {'buf': b'\x1b\x6d\x8d\x4b', 'val': 460164427} + nw_dst = {'buf': b'\xab\x25\xe1\x20', 'val': 2871386400} + tp_src = {'buf': b'\xd5\xc3', 'val': 54723} + tp_dst = {'buf': b'\x78\xb9', 'val': 30905} + + buf += wildcards['buf'] \ + + in_port['buf'] \ + + dl_src \ + + dl_dst \ + + dl_vlan['buf'] \ + + dl_vlan_pcp['buf'] \ + + zfill0 \ + + dl_type['buf'] \ + + nw_tos['buf'] \ + + nw_proto['buf'] \ + + zfil11 \ + + nw_src['buf'] \ + + nw_dst['buf'] \ + + tp_src['buf'] \ + + tp_dst['buf'] + + # OFP_FLOW_REMOVED_PACK_STR0 + # '!QHBxIIH2xQQ'...cookie, priority, reason, zfill, + # duration_sec, duration_nsec, idle_timeout, + # zfill, packet_count, byte_count + cookie = {'buf': b'\x02\x79\xba\x00\xef\xab\xee\x44', + 'val': 178378173441633860} + priority = {'buf': b'\x02\xce', 'val': 718} + reason = {'buf': b'\xa9', 'val': 169} + zfill0 = b'\x00' * 1 + duration_sec = {'buf': b'\x86\x24\xa3\xba', 'val': 2250548154} + duration_nsec = {'buf': b'\x94\x94\xc2\x23', 'val': 2492776995} + idle_timeout = {'buf': b'\xeb\x7c', 'val': 60284} + zfill1 = b'\x00' * 2 + packet_count = {'buf': b'\x5a\x0d\xf2\x03\x8e\x0a\xbb\x8d', + 'val': 6489108735192644493} + byte_count = {'buf': b'\x65\xc8\xd3\x72\x51\xb5\xbb\x7c', + 'val': 7334344481123449724} + + buf += cookie['buf'] \ + + priority['buf'] \ + + reason['buf'] \ + + zfill0 \ + + duration_sec['buf'] \ + + duration_nsec['buf'] \ + + idle_timeout['buf'] \ + + zfill1 \ + + packet_count['buf'] \ + + byte_count['buf'] + + res = OFPFlowRemoved.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(cookie['val'], res.cookie) + eq_(priority['val'], res.priority) + eq_(reason['val'], res.reason) + eq_(duration_sec['val'], res.duration_sec) + eq_(duration_nsec['val'], res.duration_nsec) + eq_(idle_timeout['val'], res.idle_timeout) + eq_(packet_count['val'], res.packet_count) + eq_(byte_count['val'], res.byte_count) + + # match + match = res.match + eq_(wildcards['val'], match.wildcards) + eq_(in_port['val'], match.in_port) + eq_(dl_src, match.dl_src) + eq_(dl_dst, match.dl_dst) + eq_(dl_vlan['val'], match.dl_vlan) + eq_(dl_vlan_pcp['val'], match.dl_vlan_pcp) + eq_(dl_type['val'], match.dl_type) + eq_(nw_tos['val'], match.nw_tos) + eq_(nw_proto['val'], match.nw_proto) + eq_(nw_src['val'], match.nw_src) + eq_(nw_dst['val'], match.nw_dst) + eq_(tp_src['val'], match.tp_src) + eq_(tp_dst['val'], match.tp_dst) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPQueueGetConfigReply(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPQueueGetConfigReply + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPQueueGetConfigReply(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x0a', + 'val': ofproto.OFPT_QUEUE_GET_CONFIG_REPLY} + msg_len_val = ofproto.OFP_QUEUE_GET_CONFIG_REPLY_SIZE \ + + ofproto.OFP_PACKET_QUEUE_SIZE + msg_len = {'buf': b'\x00\x14', 'val': msg_len_val} + xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] + + # OFP_QUEUE_GET_CONFIG_REPLY_PACK_STR + # '!H6x'...port, zfill + port = {'buf': b'\xfe\x66', 'val': 65126} + zfill = b'\x00' * 6 + + buf += port['buf'] \ + + zfill + + # OFP_PACKET_QUEUE_PQCK_STR + # '!IH2x'...queue_id, len_, zfill + queue_id = {'buf': b'\x4d\x4b\x3a\xd1', 'val': 1296775889} + len_ = {'buf': b'\x00\x08', + 'val': ofproto.OFP_QUEUE_PROP_HEADER_SIZE} + zfill = b'\x00' * 2 + + buf += queue_id['buf'] \ + + len_['buf'] \ + + zfill + + res = OFPQueueGetConfigReply.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(port['val'], res.port) + + # queue + queue = res.queues[0] + eq_(queue_id['val'], queue.queue_id) + eq_(len_['val'], queue.len) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPDescStatsReply(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPDescStatsReply + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPDescStatsReply(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} + msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ + + ofproto.OFP_DESC_STATS_SIZE + msg_len = {'buf': b'\x04\x38', 'val': msg_len_val} + xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] + + # OFP_STATS_MSG_PACK_STR + # '!HH'...type_, flags + type_ = {'buf': b'\x00\x00', 'val': ofproto.OFPST_DESC} + flags = {'buf': b'\x30\xd9', 'val': 12505} + + buf += type_['buf'] \ + + flags['buf'] + + # stats_type_cls = OFPDescStats + # OFP_DESC_STATS_PACK_STR + # '!256s256s256s32s256s'...mfr_desc, hw_desc, sw_desc, + # serial_num, dp_desc + mfr_desc = b'mfr_desc'.ljust(256) + hw_desc = b'hw_desc'.ljust(256) + sw_desc = b'sw_desc'.ljust(256) + serial_num = b'serial_num'.ljust(32) + dp_desc = b'dp_desc'.ljust(256) + + buf += mfr_desc \ + + hw_desc \ + + sw_desc \ + + serial_num \ + + dp_desc + + res = OFPDescStatsReply.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(type_['val'], res.type) + eq_(flags['val'], res.flags) + + # body + body = res.body + eq_(mfr_desc, body.mfr_desc) + eq_(hw_desc, body.hw_desc) + eq_(sw_desc, body.sw_desc) + eq_(serial_num, body.serial_num) + eq_(dp_desc, body.dp_desc) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPFlowStatsReply(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPFlowStatsReply + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPFlowStatsReply(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} + msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ + + ofproto.OFP_FLOW_STATS_SIZE + msg_len = {'buf': b'\x00\x64', 'val': msg_len_val} + xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] + + # OFP_STATS_MSG_PACK_STR + # '!HH'...type_, flags + type_ = {'buf': b'\x00\x01', 'val': ofproto.OFPST_FLOW} + flags = {'buf': b'\x95\xf4', 'val': 38388} + + buf += type_['buf'] \ + + flags['buf'] + + # stats_type_cls = OFPFlowStats + # OFP_FLOW_STATS_0_PACK_STR + # '!HBx'...length, table_id, zfill + length = {'buf': b'\x00\x60', 'val': 96} + table_id = {'buf': b'\x51', 'val': 81} + zfill = b'\x00' + + buf += length['buf'] \ + + table_id['buf'] \ + + zfill + + # OFP_MATCH_PACK_STR + # '!IH6s6sHBxHBB2xIIHH'... + match = b'\x97\x7c\xa6\x1e' \ + + b'\x5e\xa0' \ + + b'\x70\x17\xdc\x80\x59\x9e' \ + + b'\x79\xc6\x56\x87\x92\x28' \ + + b'\xb1\x81' \ + + b'\xbe' \ + + b'\x00' \ + + b'\x01\xab' \ + + b'\x42' \ + + b'\xfe' \ + + b'\x00\x00' \ + + b'\xa4\x5d\x5c\x42' \ + + b'\xa2\x5c\x2e\x05' \ + + b'\x5a\x94' \ + + b'\x64\xd4' + + buf += match + + # OFP_FLOW_STATS_1_PACK_STR + # '!IIHHH6xQQQ'...duration_sec, duration_nsec, priority, + # idle_timeout, hard_timeout, zfill, + # cookie, packet_count, byte_count + duration_sec = {'buf': b'\x94\x19\xb3\xd2', 'val': 2484712402} + duration_nsec = {'buf': b'\xee\x66\xcf\x7c', 'val': 3999715196} + priority = {'buf': b'\xe1\xc0', 'val': 57792} + idle_timeout = {'buf': b'\x8e\x10', 'val': 36368} + hard_timeout = {'buf': b'\xd4\x99', 'val': 54425} + zfill = b'\x00' * 6 + cookie = {'buf': b'\x0b\x01\xe8\xe5\xf0\x84\x8a\xe0', + 'val': 793171083674290912} + packet_count = {'buf': b'\x47\x5c\xc6\x05\x28\xff\x7c\xdb', + 'val': 5142202600015232219} + byte_count = {'buf': b'\x24\xe9\x4b\xee\xcb\x57\xd9\xc3', + 'val': 2659740543924820419} + + buf += duration_sec['buf'] + buf += duration_nsec['buf'] + buf += priority['buf'] + buf += idle_timeout['buf'] + buf += hard_timeout['buf'] + buf += zfill + buf += cookie['buf'] + buf += packet_count['buf'] + buf += byte_count['buf'] + + # _PACK_STR...type_, len_ [others...] + type = {'buf': b'\x00\x00', 'val': ofproto.OFPAT_OUTPUT} + len = {'buf': b'\x00\x08', + 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} + port = {'buf': b'\x59\x2a', 'val': 22826} + max_len = {'buf': b'\x00\x08', + 'val': ofproto.OFP_ACTION_OUTPUT_SIZE} + + buf += type['buf'] \ + + len['buf'] \ + + port['buf'] \ + + max_len['buf'] + + res = OFPFlowStatsReply.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(type_['val'], res.type) + eq_(flags['val'], res.flags) + + # body + body = res.body[0] + eq_(length['val'], body.length) + eq_(table_id['val'], body.table_id) + eq_(duration_sec['val'], body.duration_sec) + eq_(duration_nsec['val'], body.duration_nsec) + eq_(priority['val'], body.priority) + eq_(idle_timeout['val'], body.idle_timeout) + eq_(hard_timeout['val'], body.hard_timeout) + eq_(cookie['val'], body.cookie) + eq_(packet_count['val'], body.packet_count) + eq_(byte_count['val'], body.byte_count) + + # action + action = body.actions[0] + eq_(type['val'], action.type) + eq_(len['val'], action.len) + eq_(port['val'], action.port) + eq_(max_len['val'], action.max_len) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPAggregateStatsReply(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPAggregateStatsReply + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPAggregateStatsReply(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} + msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ + + ofproto.OFP_AGGREGATE_STATS_REPLY_SIZE + msg_len = {'buf': b'\x00\x4c', 'val': msg_len_val} + xid = {'buf': b'\xc6\xd6\xce\x38', 'val': 3335966264} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] + + # OFP_STATS_MSG_PACK_STR + # '!HH'...type_, flags + type_ = {'buf': b'\x00\x02', 'val': ofproto.OFPST_AGGREGATE} + flags = {'buf': b'\x65\x66', 'val': 25958} + + buf += type_['buf'] \ + + flags['buf'] + + # stats_type_cls = OFPAggregateStats + # OFP_AGGREGATE_STATS_REPLY_PACK_STR + # '!QQI4x'...packet_count, byte_count, flow_count, zfill + packet_count = {'buf': b'\x43\x95\x1b\xfb\x0f\xf6\xa7\xdd', + 'val': 4869829337189623773} + byte_count = {'buf': b'\x36\xda\x2d\x80\x2a\x95\x35\xdd', + 'val': 3952521651464517085} + flow_count = {'buf': b'\xc3\x0d\xc3\xed', 'val': 3272459245} + zfill = b'\x00' * 4 + + buf += packet_count['buf'] \ + + byte_count['buf'] \ + + flow_count['buf'] \ + + zfill + + res = OFPAggregateStatsReply.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(type_['val'], res.type) + eq_(flags['val'], res.flags) + + # body + body = res.body[0] + eq_(packet_count['val'], body.packet_count) + eq_(byte_count['val'], body.byte_count) + eq_(flow_count['val'], body.flow_count) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPTableStatsReply(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPTableStatsReply + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPTableStatsReply(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} + msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ + + ofproto.OFP_TABLE_STATS_SIZE + msg_len = {'buf': b'\x00\x4c', 'val': msg_len_val} + xid = {'buf': b'\xd6\xb4\x8d\xe6', 'val': 3602157030} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] + + # OFP_STATS_MSG_PACK_STR + # '!HH'...type_, flags + type_ = {'buf': b'\x00\x03', 'val': ofproto.OFPST_TABLE} + flags = {'buf': b'\xb3\xf0', 'val': 46064} + + buf += type_['buf'] \ + + flags['buf'] + + # stats_type_cls = OFPTableStats + # OFP_TABLE_STATS_PACK_STR + # '!B3x32sIIIQQ'...table_id, zfill, name, wildcards, max_entries, + # active_count, lookup_count, matched_count + table_id = {'buf': b'\x5b', 'val': 91} + zfill = b'\x00' * 3 + name = b'name'.ljust(32) + wildcards = {'buf': b'\xc5\xaf\x6e\x12', 'val': 3316608530} + max_entries = {'buf': b'\x95\x6c\x78\x4d', 'val': 2506913869} + active_count = {'buf': b'\x78\xac\xa8\x1e', 'val': 2024581150} + lookup_count = {'buf': b'\x40\x1d\x9c\x39\x19\xec\xd4\x1c', + 'val': 4620020561814017052} + matched_count = {'buf': b'\x27\x35\x02\xb6\xc5\x5e\x17\x65', + 'val': 2825167325263435621} + + buf += table_id['buf'] \ + + zfill \ + + name \ + + wildcards['buf'] \ + + max_entries['buf'] \ + + active_count['buf'] \ + + lookup_count['buf'] \ + + matched_count['buf'] + + res = OFPTableStatsReply.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(type_['val'], res.type) + eq_(flags['val'], res.flags) + + # body + body = res.body[0] + eq_(table_id['val'], body.table_id) + eq_(name, body.name) + eq_(wildcards['val'], body.wildcards) + eq_(max_entries['val'], body.max_entries) + eq_(active_count['val'], body.active_count) + eq_(lookup_count['val'], body.lookup_count) + eq_(matched_count['val'], body.matched_count) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPPortStatsReply(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPPortStatsReply + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPPortStatsReply(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} + msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ + + ofproto.OFP_PORT_STATS_SIZE + msg_len = {'buf': b'\x00\x74', 'val': msg_len_val} + xid = {'buf': b'\xc2\xaf\x3d\xff', 'val': 3266264575} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] + + # OFP_STATS_MSG_PACK_STR + # '!HH'...type_, flags + type_ = {'buf': b'\x00\x04', 'val': ofproto.OFPST_PORT} + flags = {'buf': b'\xda\xde', 'val': 56030} + + buf += type_['buf'] \ + + flags['buf'] + + # stats_type_cls = OFPPortStats + # OFP_PORT_STATS_PACK_STR + # '!H6xQQQQQQQQQQQQ'... port_no, zfill, rx_packets, tx_packets, + # rx_bytes, tx_bytes, rx_dropped, tx_dropped, + # rx_errors, tx_errors, rx_frame_err, + # rx_over_err, rx_crc_err, collisions + port_no = {'buf': b'\xe7\x6b', 'val': 59243} + zfill = b'\x00' * 6 + rx_packets = {'buf': b'\x53\x44\x36\x61\xc4\x86\xc0\x37', + 'val': 5999980397101236279} + tx_packets = {'buf': b'\x27\xa4\x41\xd7\xd4\x53\x9e\x42', + 'val': 2856480458895760962} + rx_bytes = {'buf': b'\x55\xa1\x38\x60\x43\x97\x0d\x89', + 'val': 6170274950576278921} + tx_bytes = {'buf': b'\x77\xe1\xd5\x63\x18\xae\x63\xaa', + 'val': 8638420181865882538} + rx_dropped = {'buf': b'\x60\xe6\x20\x01\x24\xda\x4e\x5a', + 'val': 6982303461569875546} + tx_dropped = {'buf': b'\x09\x2d\x5d\x71\x71\xb6\x8e\xc7', + 'val': 661287462113808071} + rx_errors = {'buf': b'\x2f\x7e\x35\xb3\x66\x3c\x19\x0d', + 'val': 3422231811478788365} + tx_errors = {'buf': b'\x57\x32\x08\x2f\x88\x32\x40\x6b', + 'val': 6283093430376743019} + rx_frame_err = {'buf': b'\x0c\x28\x6f\xad\xce\x66\x6e\x8b', + 'val': 876072919806406283} + rx_over_err = {'buf': b'\x5a\x90\x8f\x9b\xfc\x82\x2e\xa0', + 'val': 6525873760178941600} + rx_crc_err = {'buf': b'\x73\x3a\x71\x17\xd6\x74\x69\x47', + 'val': 8303073210207070535} + collisions = {'buf': b'\x2f\x52\x0c\x79\x96\x03\x6e\x79', + 'val': 3409801584220270201} + + buf += port_no['buf'] \ + + zfill \ + + rx_packets['buf'] \ + + tx_packets['buf'] \ + + rx_bytes['buf'] \ + + tx_bytes['buf'] \ + + rx_dropped['buf'] \ + + tx_dropped['buf'] \ + + rx_errors['buf'] \ + + tx_errors['buf'] \ + + rx_frame_err['buf'] \ + + rx_over_err['buf'] \ + + rx_crc_err['buf'] \ + + collisions['buf'] + + res = OFPPortStatsReply.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(type_['val'], res.type) + eq_(flags['val'], res.flags) + + # body + body = res.body[0] + eq_(port_no['val'], body.port_no) + eq_(rx_packets['val'], body.rx_packets) + eq_(tx_packets['val'], body.tx_packets) + eq_(rx_bytes['val'], body.rx_bytes) + eq_(tx_bytes['val'], body.tx_bytes) + eq_(rx_dropped['val'], body.rx_dropped) + eq_(tx_dropped['val'], body.tx_dropped) + eq_(rx_errors['val'], body.rx_errors) + eq_(tx_errors['val'], body.tx_errors) + eq_(rx_frame_err['val'], body.rx_frame_err) + eq_(rx_over_err['val'], body.rx_over_err) + eq_(rx_crc_err['val'], body.rx_crc_err) + eq_(collisions['val'], body.collisions) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPQueueStatsReply(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPQueueStatsReply + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPQueueStatsReply(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} + msg_len_val = ofproto.OFP_STATS_MSG_SIZE \ + + ofproto.OFP_QUEUE_STATS_SIZE + msg_len = {'buf': b'\x00\x2c', 'val': msg_len_val} + xid = {'buf': b'\x19\xfc\x28\x6c', 'val': 435955820} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] + + # OFP_STATS_MSG_PACK_STR + # '!HH'...type_, flags + type_ = {'buf': b'\x00\x05', 'val': ofproto.OFPST_QUEUE} + flags = {'buf': b'\x3b\x2b', 'val': 15147} + + buf += type_['buf'] \ + + flags['buf'] + + # stats_type_cls = OFPQueueStats + # OFP_QUEUE_STATS_PACK_STR + # '!H2xIQQQ...port_no, queue_id, tx_bytes, tx_packets, tx_errors + port_no = {'buf': b'\xe7\x6b', 'val': 59243} + zfill = b'\x00' * 2 + queue_id = {'buf': b'\x2a\xa8\x7f\x32', 'val': 715685682} + tx_bytes = {'buf': b'\x77\xe1\xd5\x63\x18\xae\x63\xaa', + 'val': 8638420181865882538} + tx_packets = {'buf': b'\x27\xa4\x41\xd7\xd4\x53\x9e\x42', + 'val': 2856480458895760962} + tx_errors = {'buf': b'\x57\x32\x08\x2f\x88\x32\x40\x6b', + 'val': 6283093430376743019} + + buf += port_no['buf'] \ + + zfill \ + + queue_id['buf'] \ + + tx_bytes['buf'] \ + + tx_packets['buf'] \ + + tx_errors['buf'] + + res = OFPQueueStatsReply.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(type_['val'], res.type) + eq_(flags['val'], res.flags) + + # body + body = res.body[0] + eq_(port_no['val'], body.port_no) + eq_(queue_id['val'], body.queue_id) + eq_(tx_bytes['val'], body.tx_bytes) + eq_(tx_packets['val'], body.tx_packets) + eq_(tx_errors['val'], body.tx_errors) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPVendorStatsReply(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPVendorStatsReply + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPVendorStatsReply(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + version = {'buf': b'\x01', 'val': ofproto.OFP_VERSION} + msg_type = {'buf': b'\x11', 'val': ofproto.OFPT_STATS_REPLY} + # ofproto.OFP_STATS_MSG_SIZE + len(specific_data) + msg_len = {'buf': b'\x00\x18', + 'val': ofproto.OFP_STATS_MSG_SIZE + 12} + xid = {'buf': b'\x94\xc4\xd2\xcd', 'val': 2495926989} + + buf = version['buf'] \ + + msg_type['buf'] \ + + msg_len['buf'] \ + + xid['buf'] + + # OFP_STATS_MSG_PACK_STR + # '!HH'...type_, flags + type_ = {'buf': b'\xff\xff', 'val': ofproto.OFPST_VENDOR} + flags = {'buf': b'\x30\xd9', 'val': 12505} + + buf += type_['buf'] \ + + flags['buf'] + + # stats_type_cls = OFPVendorStats + specific_data = b'specific_data' + + buf += specific_data + + res = OFPVendorStatsReply.parser(object, + version['val'], + msg_type['val'], + msg_len['val'], + xid['val'], + buf) + + eq_(version['val'], res.version) + eq_(msg_type['val'], res.msg_type) + eq_(msg_len['val'], res.msg_len) + eq_(xid['val'], res.xid) + eq_(type_['val'], res.type) + eq_(flags['val'], res.flags) + + # body + body = res.body[0] + eq_(specific_data, body) + + def test_serialize(self): + # Not used. + pass + + +class TestOFPFeaturesRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPFeaturesRequest + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPFeaturesRequest(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_FEATURES_REQUEST, self.c.msg_type) + eq_(0, self.c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_FEATURES_REQUEST, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + + +class TestOFPGetConfigRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPGetConfigRequest + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPGetConfigRequest(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_GET_CONFIG_REQUEST, self.c.msg_type) + eq_(0, self.c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_GET_CONFIG_REQUEST, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + + +class TestOFPSetConfig(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPSetConfig + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + # OFP_SWITCH_CONFIG_PACK_STR + # '!HH'...flags, miss_send_len + flags = {'buf': b'\xa0\xe2', 'val': 41186} + miss_send_len = {'buf': b'\x36\x0e', 'val': 13838} + + c = OFPSetConfig(Datapath, + flags['val'], + miss_send_len['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.flags['val'], self.c.flags) + eq_(self.miss_send_len['val'], self.c.miss_send_len) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_SET_CONFIG, self.c.msg_type) + eq_(0, self.c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_SWITCH_CONFIG_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_SET_CONFIG, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + eq_(self.flags['val'], res[4]) + eq_(self.miss_send_len['val'], res[5]) + + +class TestOFPPacketOut(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPPacketOut + """ + + port = 0x2ae0 + actions = [OFPActionOutput(port, max_len=0)] + + def setUp(self): + pass + + def tearDown(self): + pass + + def _get_obj(self, buffer_id, in_port, data=None): + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPPacketOut(Datapath, + buffer_id, + in_port, + self.actions, + data) + return c + + def test_init(self): + buffer_id = 0xffffffff + in_port = 0x40455 + data = 'Message' + + c = self._get_obj(buffer_id, in_port, data) + + eq_(buffer_id, c.buffer_id) + eq_(in_port, c.in_port) + eq_(data, c.data) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + buffer_id = 0xffffffff + in_port = 0x9e07 + data = b'Message' + + c = self._get_obj(buffer_id, in_port, data) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_PACKET_OUT, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_PACKET_OUT_PACK_STR.replace('!', '') \ + + ofproto.OFP_ACTION_OUTPUT_PACK_STR.replace('!', '') \ + + str(len(data)) + 's' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + # OFP_HEADER_PACK_STR + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_PACKET_OUT, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, res[3]) + + # OFP_PACKET_OUT_PACK_STR + eq_(buffer_id, res[4]) + eq_(in_port, res[5]) + eq_(ofproto.OFP_ACTION_OUTPUT_SIZE, res[6]) + + # OFP_ACTION_OUTPUT_PACK_STR + eq_(ofproto.OFPAT_OUTPUT, res[7]) + eq_(ofproto.OFP_ACTION_OUTPUT_SIZE, res[8]) + eq_(self.port, res[9]) + eq_(0, res[10]) + + # data + eq_(data, res[11]) + + @raises(AssertionError) + def test_serialize_check_buffer_id(self): + buffer_id = 0xffffff00 + in_port = 0xaa92 + data = 'Message' + + c = self._get_obj(buffer_id, in_port, data) + c.serialize() + + +class TestOFPFlowMod(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPFlowMod + """ + + # OFP_FLOW_MOD_PACK_STR0 + # '!QHHHHIHH'...cookie, command, idle_timeout, hard_timeout, + # priority, buffer_id, out_port, flags + cookie = {'buf': b'\x1d\x86\xce\x6e\x8d\xc0\xbe\xa8', + 'val': 2127614848199081640} + command = {'buf': b'\xe1\x55', 'val': 57685} + idle_timeout = {'buf': b'\xf3\x6d', 'val': 62317} + hard_timeout = {'buf': b'\x1c\xc5', 'val': 7365} + priority = {'buf': b'\x9c\xe3', 'val': 40163} + buffer_id = {'buf': b'\xf0\xa1\x80\x33', 'val': 4037115955} + out_port = {'buf': b'\xfe\x0d', 'val': 65037} + flags = {'buf': b'\x00\x87', 'val': 135} + + # OFP_MATCH_PACK_STR + # '!IH6s6sHBxHBB2xIIHH'...wildcards, in_port, dl_src, dl_dst, dl_vlan, + # dl_vlan_pcp, dl_type, nw_tos, nw_proto, + # nw_src, nw_dst, tp_src, tp_dst + wildcards = {'buf': b'\xd2\x71\x25\x23', 'val': 3530630435} + in_port = {'buf': b'\x37\x8b', 'val': 14219} + dl_src = b'\xdf\xcf\xe1\x5d\xcf\xc0' + dl_dst = b'\x76\xb3\xfb\xc6\x21\x2f' + dl_vlan = {'buf': b'\xc1\xf9', 'val': 49657} + dl_vlan_pcp = {'buf': b'\x79', 'val': 121} + zfill0 = b'\x00' + dl_type = {'buf': b'\xa6\x9e', 'val': 42654} + nw_tos = {'buf': b'\xde', 'val': 222} + nw_proto = {'buf': b'\xe5', 'val': 229} + zfil11 = b'\x00' * 2 + nw_src = {'buf': b'\x1b\x6d\x8d\x4b', 'val': 460164427} + nw_dst = {'buf': b'\xab\x25\xe1\x20', 'val': 2871386400} + tp_src = {'buf': b'\xd5\xc3', 'val': 54723} + tp_dst = {'buf': b'\x78\xb9', 'val': 30905} + + match = OFPMatch(wildcards['val'], + in_port['val'], + dl_src, + dl_dst, + dl_vlan['val'], + dl_vlan_pcp['val'], + dl_type['val'], + nw_tos['val'], + nw_proto['val'], + nw_src['val'], + nw_dst['val'], + tp_src['val'], + tp_dst['val']) + + port = 0x2ae0 + actions = [OFPActionOutput(port, max_len=1000)] + + def setUp(self): + pass + + def tearDown(self): + pass + + def _get_obj(self, actions=None): + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPFlowMod(Datapath, + self.match, + self.cookie['val'], + self.command['val'], + self.idle_timeout['val'], + self.hard_timeout['val'], + self.priority['val'], + self.buffer_id['val'], + self.out_port['val'], + self.flags['val'], + actions) + + return c + + def test_init(self): + c = self._get_obj() + + eq_(self.cookie['val'], c.cookie) + eq_(self.command['val'], c.command) + eq_(self.idle_timeout['val'], c.idle_timeout) + eq_(self.hard_timeout['val'], c.hard_timeout) + eq_(self.priority['val'], c.priority) + eq_(self.buffer_id['val'], c.buffer_id) + eq_(self.out_port['val'], c.out_port) + eq_(self.flags['val'], c.flags) + + def test_init_actions(self): + c = self._get_obj(self.actions) + action = c.actions[0] + + eq_(self.port, action.port) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + c = self._get_obj(self.actions) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_FLOW_MOD, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_MATCH_PACK_STR.replace('!', '') \ + + ofproto.OFP_FLOW_MOD_PACK_STR0.replace('!', '') \ + + ofproto.OFP_ACTION_OUTPUT_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + # OFP_HEADER_PACK_STR + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_FLOW_MOD, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, res[3]) + + # OFP_MATCH_PACK_STR + eq_(self.wildcards['val'], res[4]) + eq_(self.in_port['val'], res[5]) + eq_(self.dl_src, res[6]) + eq_(self.dl_dst, res[7]) + eq_(self.dl_vlan['val'], res[8]) + eq_(self.dl_vlan_pcp['val'], res[9]) + eq_(self.dl_type['val'], res[10]) + eq_(self.nw_tos['val'], res[11]) + eq_(self.nw_proto['val'], res[12]) + eq_(self.nw_src['val'], res[13]) + eq_(self.nw_dst['val'], res[14]) + eq_(self.tp_src['val'], res[15]) + eq_(self.tp_dst['val'], res[16]) + + # OFP_FLOW_MOD_PACK_STR0 + eq_(self.cookie['val'], res[17]) + eq_(self.command['val'], res[18]) + eq_(self.idle_timeout['val'], res[19]) + eq_(self.hard_timeout['val'], res[20]) + eq_(self.priority['val'], res[21]) + eq_(self.buffer_id['val'], res[22]) + eq_(self.out_port['val'], res[23]) + eq_(self.flags['val'], res[24]) + + # OFP_ACTION_OUTPUT_PACK_STR + eq_(ofproto.OFPAT_OUTPUT, res[25]) + eq_(ofproto.OFP_ACTION_OUTPUT_SIZE, res[26]) + eq_(self.port, res[27]) + eq_(1000, res[28]) + + +class TestOFPBarrierRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPBarrierRequest + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + c = OFPBarrierRequest(Datapath) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + pass + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_BARRIER_REQUEST, self.c.msg_type) + eq_(0, self.c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_BARRIER_REQUEST, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + + +class TestOFPQueueGetConfigRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPQueueGetConfigRequest + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + # OFP_QUEUE_GET_CONFIG_REQUEST_PACK_STR + # '!H2x'...port, zfill + port = {'buf': b'\xa0\xe2', 'val': 41186} + zfill = b'\x00' * 2 + + c = OFPQueueGetConfigRequest(Datapath, + port['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.port['val'], self.c.port) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_QUEUE_GET_CONFIG_REQUEST, self.c.msg_type) + eq_(0, self.c.xid) + + a = ofproto.OFP_HEADER_PACK_STR.replace('!', '') + b = ofproto.OFP_QUEUE_GET_CONFIG_REQUEST_PACK_STR.replace('!', '') + fmt = '!' + a + b + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_QUEUE_GET_CONFIG_REQUEST, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + eq_(self.port['val'], res[4]) + + +class TestOFPDescStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPDescStatsRequest + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + flags = {'buf': b'\x00\x00', 'val': 0} + + c = OFPDescStatsRequest(Datapath, flags['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(ofproto.OFPST_DESC, self.c.type) + eq_(self.flags['val'], self.c.flags) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) + eq_(0, self.c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + + # OFP_HEADER_PACK_STR + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_STATS_REQUEST, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + + # OFP_STATS_MSG_PACK_STR + eq_(ofproto.OFPST_DESC, res[4]) + eq_(self.flags['val'], res[5]) + + +class TestOFPFlowStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPFlowStatsRequest + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + flags = {'buf': b'\x00\x00', 'val': 0} + + # OFP_MATCH_PACK_STR + # '!IH6s6sHBxHBB2xIIHH'...wildcards, in_port, dl_src, dl_dst, dl_vlan, + # dl_vlan_pcp, dl_type, nw_tos, nw_proto, + # nw_src, nw_dst, tp_src, tp_dst + wildcards = {'buf': b'\xd2\x71\x25\x23', 'val': 3530630435} + in_port = {'buf': b'\x37\x8b', 'val': 14219} + dl_src = b'\x58\xd0\x8a\x69\xa4\xfc' + dl_dst = b'\xb6\xe2\xef\xb1\xa6\x2d' + dl_vlan = {'buf': b'\xc1\xf9', 'val': 49657} + dl_vlan_pcp = {'buf': b'\x79', 'val': 121} + zfill0 = b'\x00' + dl_type = {'buf': b'\xa6\x9e', 'val': 42654} + nw_tos = {'buf': b'\xde', 'val': 222} + nw_proto = {'buf': b'\xe5', 'val': 229} + zfil11 = b'\x00' * 2 + nw_src = {'buf': b'\x1b\x6d\x8d\x4b', 'val': 460164427} + nw_dst = {'buf': b'\xab\x25\xe1\x20', 'val': 2871386400} + tp_src = {'buf': b'\xd5\xc3', 'val': 54723} + tp_dst = {'buf': b'\x78\xb9', 'val': 30905} + + match = OFPMatch(wildcards['val'], + in_port['val'], + dl_src, + dl_dst, + dl_vlan['val'], + dl_vlan_pcp['val'], + dl_type['val'], + nw_tos['val'], + nw_proto['val'], + nw_src['val'], + nw_dst['val'], + tp_src['val'], + tp_dst['val']) + + # OFP_FLOW_STATS_REQUEST_ID_PORT_STR + # '!BxH'...table_id, zfill, out_port + table_id = {'buf': b'\xd1', 'val': 209} + zfill = b'\x00' * 1 + out_port = {'buf': b'\xe4\x9a', 'val': 58522} + + c = OFPFlowStatsRequest(Datapath, + flags['val'], + match, + table_id['val'], + out_port['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(ofproto.OFPST_FLOW, self.c.type) + eq_(self.flags['val'], self.c.flags) + eq_(self.table_id['val'], self.c.table_id) + eq_(self.out_port['val'], self.c.out_port) + + # match + match = self.c.match + eq_(self.match.__hash__(), match.__hash__()) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) + eq_(0, self.c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') \ + + ofproto.OFP_MATCH_PACK_STR.replace('!', '') \ + + ofproto.OFP_FLOW_STATS_REQUEST_ID_PORT_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + + # OFP_HEADER_PACK_STR + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_STATS_REQUEST, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + + # OFP_STATS_MSG_PACK_STR + eq_(ofproto.OFPST_FLOW, res[4]) + eq_(self.flags['val'], res[5]) + + # OFP_MATCH_PACK_STR + eq_(self.wildcards['val'], res[6]) + eq_(self.in_port['val'], res[7]) + eq_(self.dl_src, res[8]) + eq_(self.dl_dst, res[9]) + eq_(self.dl_vlan['val'], res[10]) + eq_(self.dl_vlan_pcp['val'], res[11]) + eq_(self.dl_type['val'], res[12]) + eq_(self.nw_tos['val'], res[13]) + eq_(self.nw_proto['val'], res[14]) + eq_(self.nw_src['val'], res[15]) + eq_(self.nw_dst['val'], res[16]) + eq_(self.tp_src['val'], res[17]) + eq_(self.tp_dst['val'], res[18]) + + # OFP_FLOW_STATS_REQUEST_ID_PORT_STR + eq_(self.table_id['val'], res[19]) + eq_(self.out_port['val'], res[20]) + + +class TestOFPAggregateStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPAggregateStatsRequest + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + flags = {'buf': b'\x00\x00', 'val': 0} + + # OFP_MATCH_PACK_STR + # '!IH6s6sHBxHBB2xIIHH'...wildcards, in_port, dl_src, dl_dst, dl_vlan, + # dl_vlan_pcp, dl_type, nw_tos, nw_proto, + # nw_src, nw_dst, tp_src, tp_dst + wildcards = {'buf': b'\xea\x66\x4a\xd4', 'val': 3932572372} + in_port = {'buf': b'\x64\xac', 'val': 25772} + dl_src = b'\x90\x13\x60\x5e\x20\x4d' + dl_dst = b'\xb5\x5d\x14\x5e\xb9\x22' + dl_vlan = {'buf': b'\x8b\xeb', 'val': 35819} + dl_vlan_pcp = {'buf': b'\xe8', 'val': 232} + zfill0 = b'\x00' + dl_type = {'buf': b'\62\xc9', 'val': 25289} + nw_tos = {'buf': b'\xb5', 'val': 181} + nw_proto = {'buf': b'\xc4', 'val': 196} + zfil11 = b'\x00' * 2 + nw_src = {'buf': b'\xb7\xd1\xb7\xef', 'val': 3083974639} + nw_dst = {'buf': b'\x7c\xc6\x18\x15', 'val': 2093357077} + tp_src = {'buf': b'\x26\x9a', 'val': 9882} + tp_dst = {'buf': b'\x7a\x89', 'val': 31369} + + match = OFPMatch(wildcards['val'], + in_port['val'], + dl_src, + dl_dst, + dl_vlan['val'], + dl_vlan_pcp['val'], + dl_type['val'], + nw_tos['val'], + nw_proto['val'], + nw_src['val'], + nw_dst['val'], + tp_src['val'], + tp_dst['val']) + + # OFP_FLOW_STATS_REQUEST_ID_PORT_STR + # '!BxH'...table_id, zfill, out_port + table_id = {'buf': b'\xd1', 'val': 209} + zfill = b'\x00' * 1 + out_port = {'buf': b'\xb5\xe8', 'val': 46568} + + c = OFPAggregateStatsRequest(Datapath, + flags['val'], + match, + table_id['val'], + out_port['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(ofproto.OFPST_AGGREGATE, self.c.type) + eq_(self.flags['val'], self.c.flags) + eq_(self.table_id['val'], self.c.table_id) + eq_(self.out_port['val'], self.c.out_port) + + # match + match = self.c.match + eq_(self.match.__hash__(), match.__hash__()) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) + eq_(0, self.c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') \ + + ofproto.OFP_MATCH_PACK_STR.replace('!', '') \ + + ofproto.OFP_FLOW_STATS_REQUEST_ID_PORT_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + + # OFP_HEADER_PACK_STR + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_STATS_REQUEST, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + + # OFP_STATS_MSG_PACK_STR + eq_(ofproto.OFPST_AGGREGATE, res[4]) + eq_(self.flags['val'], res[5]) + + # OFP_MATCH_PACK_STR + eq_(self.wildcards['val'], res[6]) + eq_(self.in_port['val'], res[7]) + eq_(self.dl_src, res[8]) + eq_(self.dl_dst, res[9]) + eq_(self.dl_vlan['val'], res[10]) + eq_(self.dl_vlan_pcp['val'], res[11]) + eq_(self.dl_type['val'], res[12]) + eq_(self.nw_tos['val'], res[13]) + eq_(self.nw_proto['val'], res[14]) + eq_(self.nw_src['val'], res[15]) + eq_(self.nw_dst['val'], res[16]) + eq_(self.tp_src['val'], res[17]) + eq_(self.tp_dst['val'], res[18]) + + # OFP_FLOW_STATS_REQUEST_ID_PORT_STR + eq_(self.table_id['val'], res[19]) + eq_(self.out_port['val'], res[20]) + + +class TestOFPTableStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPTableStatsRequest + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + flags = {'buf': b'\x00\x00', 'val': 0} + + c = OFPTableStatsRequest(Datapath, flags['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(ofproto.OFPST_TABLE, self.c.type) + eq_(self.flags['val'], self.c.flags) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) + eq_(0, self.c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + + # OFP_HEADER_PACK_STR + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_STATS_REQUEST, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + + # OFP_STATS_MSG_PACK_STR + eq_(ofproto.OFPST_TABLE, res[4]) + eq_(self.flags['val'], res[5]) + + +class TestOFPPortStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPPortStatsRequest + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + flags = {'buf': b'\x00\x00', 'val': 0} + + # OFP_PORT_STATS_REQUEST_PACK_STR + # '!H6x'...port_no, zfill + port_no = {'buf': b'\x6d\x27', 'val': 27943} + + c = OFPPortStatsRequest(Datapath, + flags['val'], + port_no['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(ofproto.OFPST_PORT, self.c.type) + eq_(self.flags['val'], self.c.flags) + eq_(self.port_no['val'], self.c.port_no) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) + eq_(0, self.c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') \ + + ofproto.OFP_PORT_STATS_REQUEST_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + + # OFP_HEADER_PACK_STR + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_STATS_REQUEST, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + + # OFP_STATS_MSG_PACK_STR + eq_(ofproto.OFPST_PORT, res[4]) + eq_(self.flags['val'], res[5]) + + # OFP_PORT_STATS_REQUEST_PACK_STR + eq_(self.port_no['val'], res[6]) + + +class TestOFPQueueStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPQueueStatsRequest + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + flags = {'buf': b'\x00\x00', 'val': 0} + + # OFP_QUEUE_STATS_REQUEST_PACK_STR + # '!HxxI'...port_no, zfill, zfill, queue_id + port_no = {'buf': b'\x0c\x2d', 'val': 3117} + queue_id = {'buf': b'\x1b\xe6\xba\x36', 'val': 468105782} + + c = OFPQueueStatsRequest(Datapath, + flags['val'], + port_no['val'], + queue_id['val']) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(ofproto.OFPST_QUEUE, self.c.type) + eq_(self.flags['val'], self.c.flags) + eq_(self.port_no['val'], self.c.port_no) + eq_(self.queue_id['val'], self.c.queue_id) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) + eq_(0, self.c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') \ + + ofproto.OFP_QUEUE_STATS_REQUEST_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + + # OFP_HEADER_PACK_STR + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_STATS_REQUEST, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + + # OFP_STATS_MSG_PACK_STR + eq_(ofproto.OFPST_QUEUE, res[4]) + eq_(self.flags['val'], res[5]) + + # OFP_QUEUE_STATS_REQUEST_PACK_STR + eq_(self.port_no['val'], res[6]) + eq_(self.queue_id['val'], res[7]) + + +class TestOFPVendorStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_0_parser.OFPVendorStatsRequest + """ + + class Datapath(object): + ofproto = ofproto # copy to class attribute + ofproto_parser = ofproto_v1_0_parser + + flags = {'buf': b'\x00\x00', 'val': 0} + + # OFP_VENDOR_STATS_MSG_PACK_STR + # '!I'...vendor + vendor = {'buf': b'\xff\xff\xff\xff', 'val': ofproto.OFPAT_VENDOR} + + specific_data = b'specific_data' + + c = OFPVendorStatsRequest(Datapath, + flags['val'], + vendor['val'], + specific_data) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(ofproto.OFPST_VENDOR, self.c.type) + eq_(self.flags['val'], self.c.flags) + eq_(self.vendor['val'], self.c.vendor) + eq_(self.specific_data, self.c.specific_data) + + def test_parser(self): + # Not used. + pass + + def test_serialize(self): + self.c.serialize() + + eq_(ofproto.OFP_VERSION, self.c.version) + eq_(ofproto.OFPT_STATS_REQUEST, self.c.msg_type) + eq_(0, self.c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_MSG_PACK_STR.replace('!', '') \ + + ofproto.OFP_VENDOR_STATS_MSG_PACK_STR.replace('!', '') \ + + str(len(self.specific_data)) + 's' + + res = struct.unpack(fmt, six.binary_type(self.c.buf)) + + # OFP_HEADER_PACK_STR + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_STATS_REQUEST, res[1]) + eq_(len(self.c.buf), res[2]) + eq_(0, res[3]) + + # OFP_STATS_MSG_PACK_STR + eq_(ofproto.OFPST_VENDOR, res[4]) + eq_(self.flags['val'], res[5]) + + # OFP_VENDOR_STATS_MSG_PACK_STR + eq_(self.vendor['val'], res[6]) + + # specific_data + eq_(self.specific_data, res[7]) diff --git a/tests/unit/ofproto/test_parser_v12.py b/tests/unit/ofproto/test_parser_v12.py new file mode 100644 index 00000000..cf04803d --- /dev/null +++ b/tests/unit/ofproto/test_parser_v12.py @@ -0,0 +1,7560 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import six +import socket +from struct import * +from nose.tools import * +from ryu.ofproto.ofproto_v1_2_parser import * +from ryu.ofproto import ofproto_v1_2_parser +from ryu.ofproto import ofproto_v1_2 +from ryu.ofproto import ofproto_protocol +from ryu.ofproto import ether +from ryu.ofproto.ofproto_parser import MsgBase +from ryu import utils +from ryu.lib import addrconv +from ryu.lib import pack_utils + +LOG = logging.getLogger('test_ofproto_v12') + + +_Datapath = ofproto_protocol.ProtocolDesc(version=ofproto_v1_2.OFP_VERSION) + + +class TestRegisterParser(unittest.TestCase): + """ Test case for ofproto_v1_2_parser._register_parser + """ + + class _OFPDummy(MsgBase): + def __init__(self, datapath): + self.dummy = 'dummy' + + def parser(self): + return self.dummy + + def test_cls_msg_type(self): + msg_type = 0xff + cls = self._OFPDummy(_Datapath) + cls.cls_msg_type = msg_type + + res = ofproto_v1_2_parser._register_parser(cls) + res_parser = ofproto_v1_2_parser._MSG_PARSERS[msg_type] + del ofproto_v1_2_parser._MSG_PARSERS[msg_type] + + eq_(res.cls_msg_type, msg_type) + ok_(res.dummy) + eq_(res_parser(), 'dummy') + + @raises(AssertionError) + def test_cls_msg_type_none(self): + cls = OFPHello(_Datapath) + cls.cls_msg_type = None + ofproto_v1_2_parser._register_parser(cls) + + @raises(AssertionError) + def test_cls_msg_type_already_registed(self): + cls = OFPHello(_Datapath) + ofproto_v1_2_parser._register_parser(cls) + + +class TestMsgParser(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.msg_parser + """ + + def _test_msg_parser(self, xid, msg_len): + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_HELLO + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + c = msg_parser(_Datapath, version, msg_type, msg_len, xid, buf) + + eq_(version, c.version) + eq_(msg_type, c.msg_type) + eq_(msg_len, c.msg_len) + eq_(xid, c.xid) + + # buf + fmt = ofproto.OFP_HEADER_PACK_STR + res = struct.unpack(fmt, c.buf) + + eq_(version, res[0]) + eq_(msg_type, res[1]) + eq_(msg_len, res[2]) + eq_(xid, res[3]) + + def test_parser_mid(self): + xid = 2147483648 + msg_len = 8 + self._test_msg_parser(xid, msg_len) + + def test_parser_max(self): + xid = 4294967295 + msg_len = 65535 + self._test_msg_parser(xid, msg_len) + + def test_parser_min(self): + xid = 0 + msg_len = 0 + self._test_msg_parser(xid, msg_len) + + +class TestOFPHello(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPHello + """ + + def _test_parser(self, xid): + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_HELLO + msg_len = ofproto.OFP_HEADER_SIZE + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + res = OFPHello.parser(object, version, msg_type, msg_len, xid, + bytearray(buf)) + + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(six.binary_type(buf), six.binary_type(res.buf)) + + def test_parser_xid_min(self): + xid = 0 + self._test_parser(xid) + + def test_parser_xid_mid(self): + xid = 2183948390 + self._test_parser(xid) + + def test_parser_xid_max(self): + xid = 4294967295 + self._test_parser(xid) + + def test_serialize(self): + c = OFPHello(_Datapath) + c.serialize() + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_HELLO, c.msg_type) + eq_(0, c.xid) + + +class TestOFPErrorMsg(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPErrorMsg + """ + + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_ERROR + msg_len = ofproto.OFP_ERROR_MSG_SIZE + xid = 2495926989 + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + def test_init(self): + c = OFPErrorMsg(_Datapath) + eq_(c.code, None) + eq_(c.type, None) + eq_(c.data, None) + + def _test_parser(self, type_, code, data=None): + + # OFP_ERROR_MSG_PACK_STR = '!HH' + fmt = ofproto.OFP_ERROR_MSG_PACK_STR + buf = self.buf + pack(fmt, type_, code) + + if data is not None: + buf += data + + res = OFPErrorMsg.parser(object, self.version, self.msg_type, + self.msg_len, self.xid, buf) + + eq_(res.version, self.version) + eq_(res.msg_type, self.msg_type) + eq_(res.msg_len, self.msg_len) + eq_(res.xid, self.xid) + eq_(res.type, type_) + eq_(res.code, code) + + if data is not None: + eq_(res.data, data) + + def test_parser_mid(self): + type_ = 32768 + code = 32768 + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_max(self): + type_ = 65534 + code = 65535 + data = b'Error Message.'.ljust(65523) + self._test_parser(type_, code, data) + + def test_parser_min(self): + type_ = 0 + code = 0 + data = None + self._test_parser(type_, code, data) + + def test_parser_p0_1(self): + type_ = ofproto.OFPET_HELLO_FAILED + code = ofproto.OFPHFC_EPERM + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_0(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_BAD_VERSION + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_1(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_BAD_TYPE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_2(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_BAD_STAT + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_3(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_BAD_EXPERIMENTER + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_4(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_BAD_EXP_TYPE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_5(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_EPERM + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_6(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_BAD_LEN + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_7(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_BUFFER_EMPTY + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_8(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_BUFFER_UNKNOWN + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_9(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_BAD_TABLE_ID + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_10(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_IS_SLAVE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_11(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_BAD_PORT + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p1_12(self): + type_ = ofproto.OFPET_BAD_REQUEST + code = ofproto.OFPBRC_BAD_PACKET + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_0(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_TYPE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_1(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_LEN + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_2(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_EXPERIMENTER + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_3(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_EXP_TYPE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_4(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_OUT_PORT + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_5(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_ARGUMENT + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_6(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_EPERM + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_7(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_TOO_MANY + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_8(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_QUEUE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_9(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_OUT_GROUP + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_10(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_MATCH_INCONSISTENT + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_11(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_UNSUPPORTED_ORDER + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_12(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_TAG + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_13(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_SET_TYPE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_14(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_SET_LEN + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p2_15(self): + type_ = ofproto.OFPET_BAD_ACTION + code = ofproto.OFPBAC_BAD_SET_ARGUMENT + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p3_0(self): + type_ = ofproto.OFPET_BAD_INSTRUCTION + code = ofproto.OFPBIC_UNKNOWN_INST + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p3_1(self): + type_ = ofproto.OFPET_BAD_INSTRUCTION + code = ofproto.OFPBIC_UNSUP_INST + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p3_2(self): + type_ = ofproto.OFPET_BAD_INSTRUCTION + code = ofproto.OFPBIC_BAD_TABLE_ID + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p3_3(self): + type_ = ofproto.OFPET_BAD_INSTRUCTION + code = ofproto.OFPBIC_UNSUP_METADATA + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p3_4(self): + type_ = ofproto.OFPET_BAD_INSTRUCTION + code = ofproto.OFPBIC_UNSUP_METADATA_MASK + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p3_5(self): + type_ = ofproto.OFPET_BAD_INSTRUCTION + code = ofproto.OFPBIC_BAD_EXPERIMENTER + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p3_6(self): + type_ = ofproto.OFPET_BAD_INSTRUCTION + code = ofproto.OFPBIC_BAD_EXP_TYPE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p3_7(self): + type_ = ofproto.OFPET_BAD_INSTRUCTION + code = ofproto.OFPBIC_BAD_LEN + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p3_8(self): + type_ = ofproto.OFPET_BAD_INSTRUCTION + code = ofproto.OFPBIC_EPERM + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_0(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_BAD_TYPE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_1(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_BAD_LEN + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_2(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_BAD_TAG + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_3(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_BAD_DL_ADDR_MASK + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_4(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_BAD_NW_ADDR_MASK + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_5(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_BAD_WILDCARDS + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_6(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_BAD_FIELD + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_7(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_BAD_VALUE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_8(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_BAD_MASK + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_9(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_BAD_PREREQ + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_10(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_DUP_FIELD + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p4_11(self): + type_ = ofproto.OFPET_BAD_MATCH + code = ofproto.OFPBMC_EPERM + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p5_0(self): + type_ = ofproto.OFPET_FLOW_MOD_FAILED + code = ofproto.OFPFMFC_UNKNOWN + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p5_1(self): + type_ = ofproto.OFPET_FLOW_MOD_FAILED + code = ofproto.OFPFMFC_TABLE_FULL + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p5_2(self): + type_ = ofproto.OFPET_FLOW_MOD_FAILED + code = ofproto.OFPFMFC_BAD_TABLE_ID + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p5_3(self): + type_ = ofproto.OFPET_FLOW_MOD_FAILED + code = ofproto.OFPFMFC_OVERLAP + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p5_4(self): + type_ = ofproto.OFPET_FLOW_MOD_FAILED + code = ofproto.OFPFMFC_EPERM + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p5_5(self): + type_ = ofproto.OFPET_FLOW_MOD_FAILED + code = ofproto.OFPFMFC_BAD_TIMEOUT + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p5_6(self): + type_ = ofproto.OFPET_FLOW_MOD_FAILED + code = ofproto.OFPFMFC_BAD_COMMAND + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p5_7(self): + type_ = ofproto.OFPET_FLOW_MOD_FAILED + code = ofproto.OFPFMFC_BAD_FLAGS + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_0(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_GROUP_EXISTS + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_1(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_INVALID_GROUP + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_2(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_WEIGHT_UNSUPPORTED + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_3(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_OUT_OF_GROUPS + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_4(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_OUT_OF_BUCKETS + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_5(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_CHAINING_UNSUPPORTED + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_6(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_WATCH_UNSUPPORTED + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_7(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_LOOP + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_8(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_UNKNOWN_GROUP + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_9(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_CHAINED_GROUP + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_10(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_BAD_TYPE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_11(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_BAD_COMMAND + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_12(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_BAD_BUCKET + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_13(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_BAD_WATCH + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p6_14(self): + type_ = ofproto.OFPET_GROUP_MOD_FAILED + code = ofproto.OFPGMFC_EPERM + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p7_0(self): + type_ = ofproto.OFPET_PORT_MOD_FAILED + code = ofproto.OFPPMFC_BAD_PORT + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p7_1(self): + type_ = ofproto.OFPET_PORT_MOD_FAILED + code = ofproto.OFPPMFC_BAD_HW_ADDR + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p7_2(self): + type_ = ofproto.OFPET_PORT_MOD_FAILED + code = ofproto.OFPPMFC_BAD_CONFIG + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p7_3(self): + type_ = ofproto.OFPET_PORT_MOD_FAILED + code = ofproto.OFPPMFC_BAD_ADVERTISE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p7_4(self): + type_ = ofproto.OFPET_PORT_MOD_FAILED + code = ofproto.OFPPMFC_EPERM + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p8_0(self): + type_ = ofproto.OFPET_TABLE_MOD_FAILED + code = ofproto.OFPTMFC_BAD_TABLE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p8_1(self): + type_ = ofproto.OFPET_TABLE_MOD_FAILED + code = ofproto.OFPTMFC_BAD_CONFIG + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p8_2(self): + type_ = ofproto.OFPET_TABLE_MOD_FAILED + code = ofproto.OFPTMFC_EPERM + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p9_0(self): + type_ = ofproto.OFPET_QUEUE_OP_FAILED + code = ofproto.OFPQOFC_BAD_PORT + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p9_1(self): + type_ = ofproto.OFPET_QUEUE_OP_FAILED + code = ofproto.OFPQOFC_BAD_QUEUE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p9_2(self): + type_ = ofproto.OFPET_QUEUE_OP_FAILED + code = ofproto.OFPQOFC_EPERM + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p10_0(self): + type_ = ofproto.OFPET_SWITCH_CONFIG_FAILED + code = ofproto.OFPSCFC_BAD_FLAGS + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p10_1(self): + type_ = ofproto.OFPET_SWITCH_CONFIG_FAILED + code = ofproto.OFPSCFC_BAD_LEN + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p10_2(self): + type_ = ofproto.OFPET_SWITCH_CONFIG_FAILED + code = ofproto.OFPSCFC_EPERM + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p11_0(self): + type_ = ofproto.OFPET_ROLE_REQUEST_FAILED + code = ofproto.OFPRRFC_STALE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p11_1(self): + type_ = ofproto.OFPET_ROLE_REQUEST_FAILED + code = ofproto.OFPRRFC_UNSUP + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_p11_2(self): + type_ = ofproto.OFPET_ROLE_REQUEST_FAILED + code = ofproto.OFPRRFC_BAD_ROLE + data = b'Error Message.' + self._test_parser(type_, code, data) + + def test_parser_experimenter(self): + type_ = 0xffff + exp_type = 1 + experimenter = 1 + data = b'Error Experimenter Message.' + + # OFP_ERROR_EXPERIMENTER_MSG_PACK_STR = '!HHI' + fmt = ofproto.OFP_ERROR_EXPERIMENTER_MSG_PACK_STR + buf = self.buf + pack(fmt, type_, exp_type, experimenter) \ + + data + + res = OFPErrorMsg.parser(object, self.version, self.msg_type, + self.msg_len, self.xid, buf) + + eq_(res.version, self.version) + eq_(res.msg_type, self.msg_type) + eq_(res.msg_len, self.msg_len) + eq_(res.xid, self.xid) + eq_(res.type, type_) + eq_(res.exp_type, exp_type) + eq_(res.experimenter, experimenter) + eq_(res.data, data) + + def _test_serialize(self, type_, code, data): + # OFP_ERROR_MSG_PACK_STR = '!HH' + fmt = ofproto.OFP_ERROR_MSG_PACK_STR + buf = self.buf + pack(fmt, type_, code) + data + + # initialization + c = OFPErrorMsg(_Datapath) + c.type = type_ + c.code = code + c.data = data + + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_ERROR, c.msg_type) + eq_(0, c.xid) + eq_(len(buf), c.msg_len) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_ERROR_MSG_PACK_STR.replace('!', '') \ + + str(len(c.data)) + 's' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_ERROR) + eq_(res[2], len(buf)) + eq_(res[3], 0) + eq_(res[4], type_) + eq_(res[5], code) + eq_(res[6], data) + + def test_serialize_mid(self): + type_ = 32768 + code = 32768 + data = b'Error Message.' + self._test_serialize(type_, code, data) + + def test_serialize_max(self): + type_ = 65535 + code = 65535 + data = b'Error Message.'.ljust(65523) + self._test_serialize(type_, code, data) + + def test_serialize_min_except_data(self): + type_ = ofproto.OFPET_HELLO_FAILED + code = ofproto.OFPHFC_INCOMPATIBLE + data = b'Error Message.' + self._test_serialize(type_, code, data) + + @raises(AssertionError) + def test_serialize_check_data(self): + c = OFPErrorMsg(_Datapath) + c.serialize() + + def _test_serialize_p(self, type_, code): + self._test_serialize(type_, code, b'Error Message.') + + def test_serialize_p0_1(self): + self._test_serialize_p(ofproto.OFPET_HELLO_FAILED, + ofproto.OFPHFC_EPERM) + + def test_serialize_p1_0(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_BAD_VERSION) + + def test_serialize_p1_1(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_BAD_TYPE) + + def test_serialize_p1_2(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_BAD_STAT) + + def test_serialize_p1_3(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_BAD_EXPERIMENTER) + + def test_serialize_p1_4(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_BAD_EXP_TYPE) + + def test_serialize_p1_5(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_EPERM) + + def test_serialize_p1_6(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_BAD_LEN) + + def test_serialize_p1_7(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_BUFFER_EMPTY) + + def test_serialize_p1_8(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_BUFFER_UNKNOWN) + + def test_serialize_p1_9(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_BAD_TABLE_ID) + + def test_serialize_p1_10(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_IS_SLAVE) + + def test_serialize_p1_11(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_BAD_PORT) + + def test_serialize_p1_12(self): + self._test_serialize_p(ofproto.OFPET_BAD_REQUEST, + ofproto.OFPBRC_BAD_PACKET) + + def test_serialize_p2_0(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_TYPE) + + def test_serialize_p2_1(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_LEN) + + def test_serialize_p2_2(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_EXPERIMENTER) + + def test_serialize_p2_3(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_EXP_TYPE) + + def test_serialize_p2_4(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_OUT_PORT) + + def test_serialize_p2_5(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_ARGUMENT) + + def test_serialize_p2_6(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_EPERM) + + def test_serialize_p2_7(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_TOO_MANY) + + def test_serialize_p2_8(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_QUEUE) + + def test_serialize_p2_9(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_OUT_GROUP) + + def test_serialize_p2_10(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_MATCH_INCONSISTENT) + + def test_serialize_p2_11(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_UNSUPPORTED_ORDER) + + def test_serialize_p2_12(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_TAG) + + def test_serialize_p2_13(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_SET_TYPE) + + def test_serialize_p2_14(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_SET_LEN) + + def test_serialize_p2_15(self): + self._test_serialize_p(ofproto.OFPET_BAD_ACTION, + ofproto.OFPBAC_BAD_SET_ARGUMENT) + + def test_serialize_p3_0(self): + self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, + ofproto.OFPBIC_UNKNOWN_INST) + + def test_serialize_p3_1(self): + self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, + ofproto.OFPBIC_UNSUP_INST) + + def test_serialize_p3_2(self): + self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, + ofproto.OFPBIC_BAD_TABLE_ID) + + def test_serialize_p3_3(self): + self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, + ofproto.OFPBIC_UNSUP_METADATA) + + def test_serialize_p3_4(self): + self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, + ofproto.OFPBIC_UNSUP_METADATA_MASK) + + def test_serialize_p3_5(self): + self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, + ofproto.OFPBIC_BAD_EXPERIMENTER) + + def test_serialize_p3_6(self): + self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, + ofproto.OFPBIC_BAD_EXP_TYPE) + + def test_serialize_p3_7(self): + self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, + ofproto.OFPBIC_BAD_LEN) + + def test_serialize_p3_8(self): + self._test_serialize_p(ofproto.OFPET_BAD_INSTRUCTION, + ofproto.OFPBIC_EPERM) + + def test_serialize_p4_0(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_BAD_TYPE) + + def test_serialize_p4_1(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_BAD_LEN) + + def test_serialize_p4_2(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_BAD_TAG) + + def test_serialize_p4_3(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_BAD_DL_ADDR_MASK) + + def test_serialize_p4_4(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_BAD_NW_ADDR_MASK) + + def test_serialize_p4_5(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_BAD_WILDCARDS) + + def test_serialize_p4_6(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_BAD_FIELD) + + def test_serialize_p4_7(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_BAD_VALUE) + + def test_serialize_p4_8(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_BAD_MASK) + + def test_serialize_p4_9(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_BAD_PREREQ) + + def test_serialize_p4_10(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_DUP_FIELD) + + def test_serialize_p4_11(self): + self._test_serialize_p(ofproto.OFPET_BAD_MATCH, + ofproto.OFPBMC_EPERM) + + def test_serialize_p5_0(self): + self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, + ofproto.OFPFMFC_UNKNOWN) + + def test_serialize_p5_1(self): + self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, + ofproto.OFPFMFC_TABLE_FULL) + + def test_serialize_p5_2(self): + self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, + ofproto.OFPFMFC_BAD_TABLE_ID) + + def test_serialize_p5_3(self): + self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, + ofproto.OFPFMFC_OVERLAP) + + def test_serialize_p5_4(self): + self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, + ofproto.OFPFMFC_EPERM) + + def test_serialize_p5_5(self): + self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, + ofproto.OFPFMFC_BAD_TIMEOUT) + + def test_serialize_p5_6(self): + self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, + ofproto.OFPFMFC_BAD_COMMAND) + + def test_serialize_p5_7(self): + self._test_serialize_p(ofproto.OFPET_FLOW_MOD_FAILED, + ofproto.OFPFMFC_BAD_FLAGS) + + def test_serialize_p6_0(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_GROUP_EXISTS) + + def test_serialize_p6_1(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_INVALID_GROUP) + + def test_serialize_p6_2(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_WEIGHT_UNSUPPORTED) + + def test_serialize_p6_3(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_OUT_OF_GROUPS) + + def test_serialize_p6_4(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_OUT_OF_BUCKETS) + + def test_serialize_p6_5(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_CHAINING_UNSUPPORTED) + + def test_serialize_p6_6(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_WATCH_UNSUPPORTED) + + def test_serialize_p6_7(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_LOOP) + + def test_serialize_p6_8(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_UNKNOWN_GROUP) + + def test_serialize_p6_9(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_CHAINED_GROUP) + + def test_serialize_p6_10(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_BAD_TYPE) + + def test_serialize_p6_11(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_BAD_COMMAND) + + def test_serialize_p6_12(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_BAD_BUCKET) + + def test_serialize_p6_13(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_BAD_WATCH) + + def test_serialize_p6_14(self): + self._test_serialize_p(ofproto.OFPET_GROUP_MOD_FAILED, + ofproto.OFPGMFC_EPERM) + + def test_serialize_p7_0(self): + self._test_serialize_p(ofproto.OFPET_PORT_MOD_FAILED, + ofproto.OFPPMFC_BAD_PORT) + + def test_serialize_p7_1(self): + self._test_serialize_p(ofproto.OFPET_PORT_MOD_FAILED, + ofproto.OFPPMFC_BAD_HW_ADDR) + + def test_serialize_p7_2(self): + self._test_serialize_p(ofproto.OFPET_PORT_MOD_FAILED, + ofproto.OFPPMFC_BAD_CONFIG) + + def test_serialize_p7_3(self): + self._test_serialize_p(ofproto.OFPET_PORT_MOD_FAILED, + ofproto.OFPPMFC_BAD_ADVERTISE) + + def test_serialize_p7_4(self): + self._test_serialize_p(ofproto.OFPET_PORT_MOD_FAILED, + ofproto.OFPPMFC_EPERM) + + def test_serialize_p8_0(self): + self._test_serialize_p(ofproto.OFPET_TABLE_MOD_FAILED, + ofproto.OFPTMFC_BAD_TABLE) + + def test_serialize_p8_1(self): + self._test_serialize_p(ofproto.OFPET_TABLE_MOD_FAILED, + ofproto.OFPTMFC_BAD_CONFIG) + + def test_serialize_p8_2(self): + self._test_serialize_p(ofproto.OFPET_TABLE_MOD_FAILED, + ofproto.OFPTMFC_EPERM) + + def test_serialize_p9_0(self): + self._test_serialize_p(ofproto.OFPET_QUEUE_OP_FAILED, + ofproto.OFPQOFC_BAD_PORT) + + def test_serialize_p9_1(self): + self._test_serialize_p(ofproto.OFPET_QUEUE_OP_FAILED, + ofproto.OFPQOFC_BAD_QUEUE) + + def test_serialize_p9_2(self): + self._test_serialize_p(ofproto.OFPET_QUEUE_OP_FAILED, + ofproto.OFPQOFC_EPERM) + + def test_serialize_p10_0(self): + self._test_serialize_p(ofproto.OFPET_SWITCH_CONFIG_FAILED, + ofproto.OFPSCFC_BAD_FLAGS) + + def test_serialize_p10_1(self): + self._test_serialize_p(ofproto.OFPET_SWITCH_CONFIG_FAILED, + ofproto.OFPSCFC_BAD_LEN) + + def test_serialize_p10_2(self): + self._test_serialize_p(ofproto.OFPET_SWITCH_CONFIG_FAILED, + ofproto.OFPSCFC_EPERM) + + def test_serialize_p11_0(self): + self._test_serialize_p(ofproto.OFPET_ROLE_REQUEST_FAILED, + ofproto.OFPRRFC_STALE) + + def test_serialize_p11_1(self): + self._test_serialize_p(ofproto.OFPET_ROLE_REQUEST_FAILED, + ofproto.OFPRRFC_UNSUP) + + def test_serialize_p11_2(self): + self._test_serialize_p(ofproto.OFPET_ROLE_REQUEST_FAILED, + ofproto.OFPRRFC_BAD_ROLE) + + +class TestOFPErrorExperimenterMsg(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPErrorExperimenterMsg + """ + + def test_init(self): + c = OFPErrorExperimenterMsg(_Datapath) + eq_(c.type, 65535) + eq_(c.exp_type, None) + eq_(c.experimenter, None) + eq_(c.data, None) + + def _test_parser(self, exp_type, experimenter, data=None): + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_ERROR + msg_len = ofproto.OFP_ERROR_MSG_SIZE + xid = 2495926989 + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_ERROR_EXPERIMENTER_MSG_PACK_STR = '!HHI' + type_ = 0xffff + fmt = ofproto.OFP_ERROR_EXPERIMENTER_MSG_PACK_STR + buf += pack(fmt, type_, exp_type, experimenter) + + if data is not None: + buf += data + + res = OFPErrorExperimenterMsg.parser( + object, version, msg_type, msg_len, xid, buf) + + eq_(res.version, version) + eq_(res.msg_type, msg_type) + eq_(res.msg_len, msg_len) + eq_(res.xid, xid) + eq_(res.type, type_) + eq_(res.exp_type, exp_type) + eq_(res.experimenter, experimenter) + + if data is not None: + eq_(res.data, data) + + def test_parser_mid(self): + exp_type = 32768 + experimenter = 2147483648 + data = b'Error Experimenter Message.' + self._test_parser(exp_type, experimenter, data) + + def test_parser_max(self): + exp_type = 65535 + experimenter = 4294967295 + data = b'Error Experimenter Message.'.ljust(65519) + self._test_parser(exp_type, experimenter, data) + + def test_parser_min(self): + exp_type = 0 + experimenter = 0 + self._test_parser(exp_type, experimenter) + + +class TestOFPEchoRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPEchoRequest + """ + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_ECHO_REQUEST + msg_len = ofproto.OFP_HEADER_SIZE + xid = 2495926989 + + def test_init(self): + c = OFPEchoRequest(_Datapath) + eq_(c.data, None) + + def _test_parser(self, data=None): + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, self.version, self.msg_type, + self.msg_len, self.xid) + + if data is not None: + buf += data + + res = OFPEchoRequest.parser(object, self.version, self.msg_type, + self.msg_len, self.xid, buf) + + eq_(res.version, self.version) + eq_(res.msg_type, self.msg_type) + eq_(res.msg_len, self.msg_len) + eq_(res.xid, self.xid) + + if data is not None: + eq_(res.data, data) + + def test_parser_mid(self): + data = b'Request Message.' + self._test_parser(data) + + def test_parser_max(self): + data = b'Request Message.'.ljust(65527) + self._test_parser(data) + + def test_parser_min(self): + data = None + self._test_parser(data) + + def _test_serialize(self, data): + c = OFPEchoRequest(_Datapath) + c.data = data + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_ECHO_REQUEST, c.msg_type) + eq_(0, c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR + + if data is not None: + fmt += str(len(c.data)) + 's' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_ECHO_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + + if data is not None: + eq_(res[4], data) + + def test_serialize_mid(self): + data = b'Request Message.' + self._test_serialize(data) + + def test_serialize_max(self): + data = b'Request Message.'.ljust(65527) + self._test_serialize(data) + + def test_serialize_min(self): + data = None + self._test_serialize(data) + + +class TestOFPEchoReply(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPEchoReply + """ + + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_ECHO_REPLY + msg_len = ofproto.OFP_HEADER_SIZE + xid = 2495926989 + + def test_init(self): + c = OFPEchoReply(_Datapath) + eq_(c.data, None) + + def _test_parser(self, data): + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, self.version, self.msg_type, + self.msg_len, self.xid) + + if data is not None: + buf += data + + res = OFPEchoReply.parser(object, self.version, self.msg_type, + self.msg_len, self.xid, buf) + + eq_(res.version, self.version) + eq_(res.msg_type, self.msg_type) + eq_(res.msg_len, self.msg_len) + eq_(res.xid, self.xid) + + if data is not None: + eq_(res.data, data) + + def test_parser_mid(self): + data = b'Reply Message.' + self._test_parser(data) + + def test_parser_max(self): + data = b'Reply Message.'.ljust(65527) + self._test_parser(data) + + def test_parser_min(self): + data = None + self._test_parser(data) + + def _test_serialize(self, data): + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, self.version, self.msg_type, + self.msg_len, self.xid) + data + + c = OFPEchoReply(_Datapath) + c.data = data + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_ECHO_REPLY, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + str(len(c.data)) + 's' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_ECHO_REPLY) + eq_(res[2], len(buf)) + eq_(res[3], 0) + eq_(res[4], data) + + def test_serialize_mid(self): + data = b'Reply Message.' + self._test_serialize(data) + + def test_serialize_max(self): + data = b'Reply Message.'.ljust(65527) + self._test_serialize(data) + + @raises(AssertionError) + def test_serialize_check_data(self): + c = OFPEchoReply(_Datapath) + c.serialize() + + +class TestOFPExperimenter(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPExperimenter + """ + + c = OFPExperimenter(_Datapath) + + def _test_parser(self, xid, experimenter, exp_type): + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_EXPERIMENTER + msg_len = ofproto.OFP_EXPERIMENTER_HEADER_SIZE + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_EXPERIMENTER_HEADER_PACK_STR + # '!II'...experimenter, exp_type + fmt = ofproto.OFP_EXPERIMENTER_HEADER_PACK_STR + buf += pack(fmt, experimenter, exp_type) + + res = OFPExperimenter.parser(object, version, msg_type, + msg_len, xid, buf) + + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(experimenter, res.experimenter) + eq_(exp_type, res.exp_type) + + def test_parser_mid(self): + xid = 2495926989 + experimenter = 2147483648 + exp_type = 1 + self._test_parser(xid, experimenter, exp_type) + + def test_parser_max(self): + xid = 4294967295 + experimenter = 4294967295 + exp_type = 65535 + self._test_parser(xid, experimenter, exp_type) + + def test_parser_min(self): + xid = 0 + experimenter = 0 + exp_type = 0 + self._test_parser(xid, experimenter, exp_type) + + +class TestOFPPort(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPPort + """ + + def test_init(self): + # OFP_PORT_PACK_STR + # '!I4x6s2x16sIIIIIIII'... port_no, pad(4), hw_addr, pad(2), + # name, config, state, curr, advertised, + # peer, curr_speed, max_speed + port_no = 1119692796 + hw_addr = 'c0:26:53:c4:29:e2' + name = b'name'.ljust(16) + config = 2226555987 + state = 1678244809 + curr = 2850556459 + advertised = 2025421682 + supported = 2120575149 + peer = 2757463021 + curr_speed = 2641353507 + max_speed = 1797291672 + + fmt = ofproto.OFP_PORT_PACK_STR + + c = OFPPort(port_no, hw_addr, name, config, state, curr, + advertised, supported, peer, curr_speed, max_speed) + + eq_(port_no, c.port_no) + eq_(hw_addr, c.hw_addr) + eq_(name, c.name) + eq_(config, c.config) + eq_(state, c.state) + eq_(curr, c.curr) + eq_(advertised, c.advertised) + eq_(supported, c.supported) + eq_(peer, c.peer) + eq_(curr_speed, c.curr_speed) + eq_(max_speed, c.max_speed) + + def _test_parser(self, port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed): + name = b'name'.ljust(16) + fmt = ofproto.OFP_PORT_PACK_STR + buf = pack(fmt, port_no, addrconv.mac.text_to_bin(hw_addr), name, + config, state, curr, + advertised, supported, peer, curr_speed, max_speed) + + res = OFPPort.parser(buf, 0) + + eq_(port_no, res.port_no) + eq_(hw_addr, res.hw_addr) + eq_(name, res.name) + eq_(config, res.config) + eq_(state, res.state) + eq_(curr, res.curr) + eq_(advertised, res.advertised) + eq_(supported, res.supported) + eq_(peer, res.peer) + eq_(curr_speed, res.curr_speed) + eq_(max_speed, res.max_speed) + + def test_parser_mid(self): + port_no = 1119692796 + hw_addr = 'c0:26:53:c4:29:e2' + config = 2226555987 + state = 1678244809 + curr = 2850556459 + advertised = 2025421682 + supported = 2120575149 + peer = 2757463021 + curr_speed = 2641353507 + max_speed = 1797291672 + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_max(self): + port_no = ofproto.OFPP_ANY + hw_addr = 'ff:ff:ff:ff:ff:ff' + config = 4294967295 + state = 4294967295 + curr = 4294967295 + advertised = 4294967295 + supported = 4294967295 + peer = 4294967295 + curr_speed = 4294967295 + max_speed = 4294967295 + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_min(self): + port_no = 0 + hw_addr = '00:00:00:00:00:00' + config = 0 + state = 0 + curr = 0 + advertised = 0 + supported = 0 + peer = 0 + curr_speed = 0 + max_speed = 0 + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p1(self): + port_no = ofproto.OFPP_MAX + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_PORT_DOWN + state = ofproto.OFPPS_LINK_DOWN + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_10MB_HD + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p2(self): + port_no = ofproto.OFPP_IN_PORT + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_RECV + state = ofproto.OFPPS_BLOCKED + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_10MB_FD + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p3(self): + port_no = ofproto.OFPP_TABLE + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_FWD + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_100MB_HD + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p4(self): + port_no = ofproto.OFPP_NORMAL + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_100MB_FD + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p5(self): + port_no = ofproto.OFPP_FLOOD + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_1GB_HD + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p6(self): + port_no = ofproto.OFPP_ALL + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_1GB_FD + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p7(self): + port_no = ofproto.OFPP_CONTROLLER + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_10GB_FD + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p8(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_40GB_FD + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p9(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_100GB_FD + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p10(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_1TB_FD + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p11(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_OTHER + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p12(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_COPPER + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p13(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_FIBER + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p14(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_AUTONEG + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p15(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_PAUSE + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p16(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = 'c0:26:53:c4:29:e2' + config = ofproto.OFPPC_NO_PACKET_IN + state = ofproto.OFPPS_LIVE + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_PAUSE_ASYM + self._test_parser(port_no, hw_addr, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + +class TestOFPFeaturesRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPFeaturesRequest + """ + + def test_serialize(self): + c = OFPFeaturesRequest(_Datapath) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_FEATURES_REQUEST, c.msg_type) + eq_(0, c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_FEATURES_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + + +class TestOFPSwitchFeatures(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPSwitchFeatures + """ + + def _test_parser(self, xid, datapath_id, n_buffers, + n_tables, capabilities, reserved, port_cnt=0): + + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_FEATURES_REPLY + msg_len = ofproto.OFP_SWITCH_FEATURES_SIZE \ + + ofproto.OFP_PORT_SIZE * port_cnt + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_SWITCH_FEATURES_PACK_STR + # '!QIB3xII'...datapath_id, n_buffers, n_tables, + # pad(3), capabilities, reserved + + fmt = ofproto.OFP_SWITCH_FEATURES_PACK_STR + buf += pack(fmt, datapath_id, n_buffers, n_tables, + capabilities, reserved) + + for i in range(port_cnt): + # OFP_PORT_PACK_STR + # '!I4x6s2x16sIIIIIIII'... port_no, pad(4), hw_addr, pad(2), + # name, config, state, curr, advertised, + # peer, curr_speed, max_speed + port_no = i + + fmt = ofproto.OFP_PORT_PACK_STR + buf += pack(fmt, port_no, b'\x00' * 6, b'\x00' * 16, 0, 0, 0, + 0, 0, 0, 0, 0) + + res = OFPSwitchFeatures.parser(object, version, msg_type, + msg_len, xid, buf) + + eq_(res.version, version) + eq_(res.msg_type, msg_type) + eq_(res.msg_len, msg_len) + eq_(res.xid, xid) + + eq_(res.datapath_id, datapath_id) + eq_(res.n_buffers, n_buffers) + eq_(res.n_tables, n_tables) + eq_(res.capabilities, capabilities) + eq_(res._reserved, reserved) + + for i in range(port_cnt): + eq_(res.ports[i].port_no, i) + + def test_parser_mid(self): + xid = 2495926989 + datapath_id = 1270985291017894273 + n_buffers = 2148849654 + n_tables = 228 + capabilities = 1766843586 + reserved = 2013714700 + port_cnt = 1 + + self._test_parser(xid, datapath_id, n_buffers, n_tables, + capabilities, reserved, port_cnt) + + def test_parser_max(self): + xid = 4294967295 + datapath_id = 18446744073709551615 + n_buffers = 4294967295 + n_tables = 255 + capabilities = 4294967295 + reserved = 4294967295 + port_cnt = 1023 + + self._test_parser(xid, datapath_id, n_buffers, n_tables, + capabilities, reserved, port_cnt) + + def test_parser_min(self): + xid = 0 + datapath_id = 0 + n_buffers = 0 + n_tables = 0 + capabilities = 0 + reserved = 0 + port_cnt = 0 + + self._test_parser(xid, datapath_id, n_buffers, n_tables, + capabilities, reserved, port_cnt) + + +class TestOFPGetConfigRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPGetConfigRequest + """ + + def test_serialize(self): + c = OFPGetConfigRequest(_Datapath) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_GET_CONFIG_REQUEST, c.msg_type) + eq_(0, c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR + + res = struct.unpack(fmt, six.binary_type(c.buf)) + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_GET_CONFIG_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + + +class TestOFPGetConfigReply(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPGetConfigReply + """ + + def _test_parser(self, xid, flags, miss_send_len): + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_GET_CONFIG_REPLY + msg_len = ofproto.OFP_SWITCH_CONFIG_SIZE + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_SWITCH_CONFIG_PACK_STR + # '!HH'...flags, miss_send_len + fmt = ofproto.OFP_SWITCH_CONFIG_PACK_STR + buf += pack(fmt, flags, miss_send_len) + + res = OFPGetConfigReply.parser(object, version, msg_type, + msg_len, xid, buf) + + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(flags, res.flags) + eq_(miss_send_len, res.miss_send_len) + + def test_parser_mid(self): + xid = 3423224276 + flags = 41186 + miss_send_len = 13838 + self._test_parser(xid, flags, miss_send_len) + + def test_parser_max(self): + xid = 4294967295 + flags = 65535 + miss_send_len = 65535 + self._test_parser(xid, flags, miss_send_len) + + def test_parser_min(self): + xid = 0 + flags = ofproto.OFPC_FRAG_NORMAL + miss_send_len = 0 + self._test_parser(xid, flags, miss_send_len) + + def test_parser_p1(self): + xid = 3423224276 + flags = ofproto.OFPC_FRAG_DROP + miss_send_len = 13838 + self._test_parser(xid, flags, miss_send_len) + + def test_parser_p2(self): + xid = 3423224276 + flags = ofproto.OFPC_FRAG_REASM + miss_send_len = 13838 + self._test_parser(xid, flags, miss_send_len) + + def test_parser_p3(self): + xid = 3423224276 + flags = ofproto.OFPC_FRAG_MASK + miss_send_len = 13838 + self._test_parser(xid, flags, miss_send_len) + + def test_parser_p4(self): + xid = 3423224276 + flags = ofproto.OFPC_INVALID_TTL_TO_CONTROLLER + miss_send_len = 13838 + self._test_parser(xid, flags, miss_send_len) + + +class TestOFPSetConfig(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPSetConfig + """ + + def test_init(self): + # OFP_SWITCH_CONFIG_PACK_STR + # '!HH'...flags, miss_send_len + flags = 41186 + miss_send_len = 13838 + + c = OFPSetConfig(_Datapath, flags, miss_send_len) + + eq_(flags, c.flags) + eq_(miss_send_len, c.miss_send_len) + + def _test_serialize(self, flags, miss_send_len): + c = OFPSetConfig(_Datapath, flags, miss_send_len) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_SET_CONFIG, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_SWITCH_CONFIG_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_SET_CONFIG) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], flags) + eq_(res[5], miss_send_len) + + def test_serialize_mid(self): + flags = 41186 + miss_send_len = 13838 + self._test_serialize(flags, miss_send_len) + + def test_serialize_max(self): + flags = 65535 + miss_send_len = 65535 + self._test_serialize(flags, miss_send_len) + + def test_serialize_min(self): + flags = ofproto.OFPC_FRAG_NORMAL + miss_send_len = 0 + self._test_serialize(flags, miss_send_len) + + def test_serialize_p1(self): + flags = ofproto.OFPC_FRAG_DROP + miss_send_len = 13838 + self._test_serialize(flags, miss_send_len) + + def test_serialize_p2(self): + flags = ofproto.OFPC_FRAG_REASM + miss_send_len = 13838 + self._test_serialize(flags, miss_send_len) + + def test_serialize_p3(self): + flags = ofproto.OFPC_FRAG_MASK + miss_send_len = 13838 + self._test_serialize(flags, miss_send_len) + + def test_serialize_p4(self): + flags = ofproto.OFPC_INVALID_TTL_TO_CONTROLLER + miss_send_len = 13838 + self._test_serialize(flags, miss_send_len) + + @raises(AssertionError) + def test_serialize_check_flags(self): + flags = None + miss_send_len = 13838 + c = OFPSetConfig(_Datapath, flags, miss_send_len) + c.serialize() + + @raises(AssertionError) + def test_serialize_check_miss_send_len(self): + flags = 41186 + miss_send_len = None + c = OFPSetConfig(_Datapath, flags, miss_send_len) + c.serialize() + + +class TestOFPPacketIn(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPPacketIn + """ + + def _test_parser(self, xid, buffer_id, total_len=0, + reason=0, table_id=0, data=None): + if data is None: + data = b'' + + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_PACKET_IN + msg_len = ofproto.OFP_PACKET_IN_SIZE + len(data) + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_PACKET_IN_PACK_STR + fmt = ofproto.OFP_PACKET_IN_PACK_STR + buf += pack(fmt, buffer_id, total_len, reason, table_id) + + # match + buf_match = bytearray() + match = OFPMatch() + match.serialize(buf_match, 0) + buf += six.binary_type(buf_match) + + # data + buf += b'\x00' * 2 + buf += data + + res = OFPPacketIn.parser(object, version, msg_type, msg_len, + xid, buf) + + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(buffer_id, res.buffer_id) + eq_(total_len, res.total_len) + eq_(reason, res.reason) + eq_(table_id, res.table_id) + ok_(hasattr(res, 'match')) + eq_(ofproto.OFPMT_OXM, res.match.type) + + if data: + eq_(data[:total_len], res.data) + + def test_data_is_total_len(self): + xid = 3423224276 + buffer_id = 2926809324 + reason = 128 + table_id = 3 + data = b'PacketIn' + total_len = len(data) + self._test_parser(xid, buffer_id, total_len, reason, table_id, data) + + def test_data_is_not_total_len(self): + xid = 3423224276 + buffer_id = 2926809324 + reason = 128 + table_id = 3 + data = b'PacketIn' + total_len = len(data) - 1 + self._test_parser(xid, buffer_id, total_len, reason, table_id, data) + + def test_parser_max(self): + # 65535(!H max) - 24(without data) = 65511 + xid = 4294967295 + buffer_id = 4294967295 + reason = 255 + table_id = 255 + data = b'data'.ljust(65511) + total_len = len(data) + self._test_parser(xid, buffer_id, total_len, reason, table_id, data) + + def test_parser_min(self): + xid = 0 + buffer_id = 0 + reason = ofproto.OFPR_NO_MATCH + table_id = 0 + total_len = 0 + self._test_parser(xid, buffer_id, total_len, reason, table_id) + + def test_parser_p1(self): + data = b'data'.ljust(8) + xid = 3423224276 + buffer_id = 2926809324 + total_len = len(data) + reason = ofproto.OFPR_ACTION + table_id = 3 + self._test_parser(xid, buffer_id, total_len, reason, table_id, data) + + def test_parser_p2(self): + data = b'data'.ljust(8) + xid = 3423224276 + buffer_id = 2926809324 + total_len = len(data) + reason = ofproto.OFPR_INVALID_TTL + table_id = 3 + self._test_parser(xid, buffer_id, total_len, reason, table_id, data) + + +class TestOFPFlowRemoved(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPFlowRemoved + """ + + def _test_parser(self, xid, cookie, priority, + reason, table_id, duration_sec, + duration_nsec, idle_timeout, hard_timeout, + packet_count, byte_count): + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_FLOW_REMOVED + msg_len = ofproto.OFP_FLOW_REMOVED_SIZE + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_FLOW_REMOVED_PACK_STR0 + # '!QHBBIIHHQQ' ...cookie, priority, reason, table_id, + # duration_sec, duration_nsec, idle_timeout, + # hard_timeout, packet_count, byte_count + + fmt = ofproto.OFP_FLOW_REMOVED_PACK_STR0 + buf += pack(fmt, cookie, priority, reason, table_id, + duration_sec, duration_nsec, idle_timeout, + hard_timeout, packet_count, byte_count) + + # OFP_MATCH_PACK_STR + match = OFPMatch() + buf_match = bytearray() + match.serialize(buf_match, 0) + + buf += six.binary_type(buf_match) + + res = OFPFlowRemoved.parser(object, version, msg_type, + msg_len, xid, buf) + + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(cookie, res.cookie) + eq_(priority, res.priority) + eq_(reason, res.reason) + eq_(table_id, res.table_id) + eq_(duration_sec, res.duration_sec) + eq_(duration_nsec, res.duration_nsec) + eq_(idle_timeout, res.idle_timeout) + eq_(hard_timeout, res.hard_timeout) + eq_(packet_count, res.packet_count) + eq_(byte_count, res.byte_count) + ok_(hasattr(res, 'match')) + eq_(ofproto.OFPMT_OXM, res.match.type) + + def test_parser_mid(self): + xid = 3423224276 + cookie = 178378173441633860 + priority = 718 + reason = 128 + table_id = 169 + duration_sec = 2250548154 + duration_nsec = 2492776995 + idle_timeout = 60284 + hard_timeout = 60285 + packet_count = 6489108735192644493 + byte_count = 7334344481123449724 + self._test_parser(xid, cookie, priority, + reason, table_id, duration_sec, + duration_nsec, idle_timeout, hard_timeout, + packet_count, byte_count) + + def test_parser_max(self): + xid = 4294967295 + cookie = 18446744073709551615 + priority = 65535 + reason = 255 + table_id = 255 + duration_sec = 4294967295 + duration_nsec = 4294967295 + idle_timeout = 65535 + hard_timeout = 65535 + packet_count = 18446744073709551615 + byte_count = 18446744073709551615 + self._test_parser(xid, cookie, priority, + reason, table_id, duration_sec, + duration_nsec, idle_timeout, hard_timeout, + packet_count, byte_count) + + def test_parser_min(self): + xid = 0 + cookie = 0 + priority = 0 + reason = ofproto.OFPRR_IDLE_TIMEOUT + table_id = 0 + duration_sec = 0 + duration_nsec = 0 + idle_timeout = 0 + hard_timeout = 0 + packet_count = 0 + byte_count = 0 + self._test_parser(xid, cookie, priority, + reason, table_id, duration_sec, + duration_nsec, idle_timeout, hard_timeout, + packet_count, byte_count) + + def test_parser_p1(self): + xid = 3423224276 + cookie = 178378173441633860 + priority = 718 + reason = ofproto.OFPRR_HARD_TIMEOUT + table_id = 169 + duration_sec = 2250548154 + duration_nsec = 2492776995 + idle_timeout = 60284 + hard_timeout = 60285 + packet_count = 6489108735192644493 + byte_count = 7334344481123449724 + self._test_parser(xid, cookie, priority, + reason, table_id, duration_sec, + duration_nsec, idle_timeout, hard_timeout, + packet_count, byte_count) + + def test_parser_p2(self): + xid = 3423224276 + cookie = 178378173441633860 + priority = 718 + reason = ofproto.OFPRR_DELETE + table_id = 169 + duration_sec = 2250548154 + duration_nsec = 2492776995 + idle_timeout = 60284 + hard_timeout = 60285 + packet_count = 6489108735192644493 + byte_count = 7334344481123449724 + self._test_parser(xid, cookie, priority, + reason, table_id, duration_sec, + duration_nsec, idle_timeout, hard_timeout, + packet_count, byte_count) + + def test_parser_p3(self): + xid = 3423224276 + cookie = 178378173441633860 + priority = 718 + reason = ofproto.OFPRR_GROUP_DELETE + table_id = 169 + duration_sec = 2250548154 + duration_nsec = 2492776995 + idle_timeout = 60284 + hard_timeout = 60285 + packet_count = 6489108735192644493 + byte_count = 7334344481123449724 + self._test_parser(xid, cookie, priority, + reason, table_id, duration_sec, + duration_nsec, idle_timeout, hard_timeout, + packet_count, byte_count) + + +class TestOFPPortStatus(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPPortStatus + """ + + def _test_parser(self, xid, reason, + port_no, config, state, curr, advertised, + supported, peer, curr_speed, max_speed): + + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_PORT_STATUS + msg_len = ofproto.OFP_PORT_STATUS_SIZE + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_PORT_STATUS_PACK_STR = '!B7x' + _OFP_PORT_PACK_STR + # '!B7x'...reason, pad(7) + # OFP_PORT_PACK_STR + # '!I4x6s2x16sIIIIIIII'... port_no, pad(4), hw_addr, pad(2), + # name, config, state, curr, advertised, + # peer, curr_speed, max_speed + hw_addr = '80:ff:9a:e3:72:85' + name = b'name'.ljust(16) + + fmt = ofproto.OFP_PORT_STATUS_PACK_STR + buf += pack(fmt, reason, port_no, addrconv.mac.text_to_bin(hw_addr), + name, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + res = OFPPortStatus.parser(object, version, msg_type, msg_len, + xid, buf) + + eq_(reason, res.reason) + eq_(port_no, res.desc.port_no) + eq_(hw_addr, res.desc.hw_addr) + eq_(name, res.desc.name) + eq_(config, res.desc.config) + eq_(state, res.desc.state) + eq_(curr, res.desc.curr) + eq_(advertised, res.desc.advertised) + eq_(supported, res.desc.supported) + eq_(peer, res.desc.peer) + eq_(curr_speed, res.desc.curr_speed) + eq_(max_speed, res.desc.max_speed) + + def test_parser_mid(self): + xid = 3423224276 + reason = 128 + port_no = 1119692796 + config = 2226555987 + state = 1678244809 + curr = 2850556459 + advertised = 2025421682 + supported = 2120575149 + peer = 2757463021 + curr_speed = 2641353507 + max_speed = 1797291672 + self._test_parser(xid, reason, + port_no, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_max(self): + xid = 4294967295 + reason = 255 + port_no = ofproto.OFPP_ANY + config = 4294967295 + state = 4294967295 + curr = 4294967295 + advertised = 4294967295 + supported = 4294967295 + peer = 4294967295 + curr_speed = 4294967295 + max_speed = 4294967295 + self._test_parser(xid, reason, + port_no, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_min(self): + xid = 0 + reason = 0 + port_no = 0 + config = 0 + state = 0 + curr = 0 + advertised = 0 + supported = 0 + peer = 0 + curr_speed = 0 + max_speed = 0 + self._test_parser(xid, reason, + port_no, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p1(self): + xid = 3423224276 + reason = ofproto.OFPPR_DELETE + port_no = ofproto.OFPP_MAX + config = ofproto.OFPPC_PORT_DOWN + state = ofproto.OFPPS_LINK_DOWN + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_10MB_HD + self._test_parser(xid, reason, + port_no, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + def test_parser_p2(self): + xid = 3423224276 + reason = ofproto.OFPPR_MODIFY + port_no = ofproto.OFPP_MAX + config = ofproto.OFPPC_PORT_DOWN + state = ofproto.OFPPS_LINK_DOWN + curr = advertised = supported \ + = peer = curr_speed = max_speed \ + = ofproto.OFPPF_10MB_HD + self._test_parser(xid, reason, + port_no, config, state, curr, advertised, + supported, peer, curr_speed, max_speed) + + +class TestOFPPacketOut(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPPacketOut + """ + + def _test_init(self, in_port): + buffer_id = 0xffffffff + data = b'Message' + out_port = 0x00002ae0 + actions = [OFPActionOutput(out_port, 0)] + + c = OFPPacketOut(_Datapath, buffer_id, in_port, actions, data) + + eq_(buffer_id, c.buffer_id) + eq_(in_port, c.in_port) + eq_(0, c.actions_len) + eq_(data, c.data) + eq_(actions, c.actions) + + def test_init(self): + in_port = 0x00040455 + self._test_init(in_port) + + @raises(AssertionError) + def test_init_check_in_port(self): + in_port = None + self._test_init(in_port) + + def _test_serialize(self, buffer_id, in_port, action_cnt=0, data=None): + actions = [] + for i in range(action_cnt): + actions.append(ofproto_v1_2_parser.OFPActionOutput(i, 0)) + + c = OFPPacketOut(_Datapath, buffer_id, in_port, actions, data) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_PACKET_OUT, c.msg_type) + eq_(0, c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR \ + + ofproto.OFP_PACKET_OUT_PACK_STR[1:] \ + + ofproto.OFP_ACTION_OUTPUT_PACK_STR[1:] * action_cnt + + if data is not None: + fmt += str(len(data)) + 's' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_PACKET_OUT) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], buffer_id) + eq_(res[5], in_port) + eq_(res[6], ofproto.OFP_ACTION_OUTPUT_SIZE * action_cnt) + + for i in range(action_cnt): + index = 7 + i * 4 + eq_(res[index], ofproto.OFPAT_OUTPUT) + eq_(res[index + 1], ofproto.OFP_ACTION_OUTPUT_SIZE) + eq_(res[index + 2], i) + eq_(res[index + 3], 0) + + if data: + eq_(res[-1], data) + + def test_serialize_true(self): + buffer_id = 0xffffffff + in_port = 0x00040455 + action_cnt = 2 + data = b'Message' + self._test_serialize(buffer_id, in_port, action_cnt, data) + + def test_serialize_none(self): + buffer_id = 0xffffffff + in_port = 0x00040455 + self._test_serialize(buffer_id, in_port) + + def test_serialize_max(self): + buffer_id = 0xffffffff + in_port = 4294967295 + action_cnt = 1 + data = b'Message'.ljust(65495) + self._test_serialize(buffer_id, in_port, action_cnt, data) + + def test_serialize_min(self): + buffer_id = 0 + in_port = 0 + self._test_serialize(buffer_id, in_port) + + def test_serialize_p1(self): + buffer_id = 2147483648 + in_port = ofproto.OFPP_CONTROLLER + self._test_serialize(buffer_id, in_port) + + @raises(AssertionError) + def test_serialize_check_buffer_id(self): + buffer_id = 2147483648 + in_port = 1 + action_cnt = 0 + data = b'DATA' + self._test_serialize(buffer_id, in_port, action_cnt, data) + + +class TestOFPFlowMod(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPFlowMod + """ + + def test_init(self): + # OFP_FLOW_MOD_PACK_STR0 + # '!QQBBHHHIIIH2x'...cookie, cookie_mask, table_id, command, + # idle_timeout, hard_timeout, priority, buffer_id, + # out_port, out_group, flags + cookie = 2127614848199081640 + cookie_mask = 2127614848199081641 + table_id = 3 + command = 0 + idle_timeout = 62317 + hard_timeout = 7365 + priority = 40163 + buffer_id = 4037115955 + out_port = 65037 + out_group = 6606 + flags = 135 + instructions = [OFPInstructionGotoTable(table_id)] + + in_port = 1 + match = OFPMatch() + match.set_in_port(in_port) + + c = OFPFlowMod(_Datapath, cookie, cookie_mask, table_id, command, + idle_timeout, hard_timeout, priority, buffer_id, + out_port, out_group, flags, match, instructions) + + eq_(cookie, c.cookie) + eq_(cookie_mask, c.cookie_mask) + eq_(table_id, c.table_id) + eq_(command, c.command) + eq_(idle_timeout, c.idle_timeout) + eq_(hard_timeout, c.hard_timeout) + eq_(priority, c.priority) + eq_(buffer_id, c.buffer_id) + eq_(out_port, c.out_port) + eq_(out_group, c.out_group) + eq_(flags, c.flags) + eq_(in_port, c.match._flow.in_port) + eq_(instructions[0], c.instructions[0]) + + def _test_serialize(self, cookie, cookie_mask, table_id, + command, idle_timeout, hard_timeout, + priority, buffer_id, out_port, + out_group, flags, inst_cnt=0): + dl_type = 0x0800 + match = OFPMatch() + match.set_dl_type(dl_type) + + insts = [] + for i in range(inst_cnt): + insts.append(OFPInstructionGotoTable(i)) + + c = OFPFlowMod(_Datapath, cookie, cookie_mask, table_id, command, + idle_timeout, hard_timeout, priority, buffer_id, + out_port, out_group, flags, match, insts) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_FLOW_MOD, c.msg_type) + eq_(0, c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR \ + + ofproto.OFP_FLOW_MOD_PACK_STR0[1:] \ + + 'HHHBB' \ + + MTEthType.pack_str[1:] + '6x' \ + + ofproto.OFP_INSTRUCTION_GOTO_TABLE_PACK_STR[1:] * inst_cnt + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_FLOW_MOD) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], cookie) + eq_(res[5], cookie_mask) + eq_(res[6], table_id) + eq_(res[7], command) + eq_(res[8], idle_timeout) + eq_(res[9], hard_timeout) + eq_(res[10], priority) + eq_(res[11], buffer_id) + eq_(res[12], out_port) + eq_(res[13], out_group) + eq_(res[14], flags) + + # OFP_MATCH (type, length, class, [field, hashmask], n_byte, ip_proto) + eq_(res[15], ofproto.OFPMT_OXM) + eq_(res[16], 10) # OFP_MATCH_STR + MTEthType.pack_str + eq_(res[17], ofproto.OFPXMC_OPENFLOW_BASIC) + eq_(res[18] >> 1, ofproto.OFPXMT_OFB_ETH_TYPE) + eq_(res[18] & 0b0001, 0) + eq_(res[19], calcsize(MTEthType.pack_str)) + eq_(res[20], dl_type) + + # insts (type, length, table_id) + for i in range(inst_cnt): + index = 21 + 3 * i + eq_(res[index], ofproto.OFPIT_GOTO_TABLE) + eq_(res[index + 1], ofproto.OFP_INSTRUCTION_GOTO_TABLE_SIZE) + eq_(res[index + 2], i) + + def test_serialize_mid(self): + cookie = 2127614848199081640 + cookie_mask = 2127614848199081641 + table_id = 3 + command = 128 + idle_timeout = 62317 + hard_timeout = 7365 + priority = 40163 + buffer_id = 4037115955 + out_port = 65037 + out_group = 6606 + flags = 135 + inst_cnt = 1 + self._test_serialize(cookie, cookie_mask, table_id, + command, idle_timeout, hard_timeout, + priority, buffer_id, out_port, + out_group, flags, inst_cnt) + + def test_serialize_max(self): + cookie = 18446744073709551615 + cookie_mask = 18446744073709551615 + table_id = 255 + command = 255 + idle_timeout = 65535 + hard_timeout = 65535 + priority = 65535 + buffer_id = 0xffffffff + out_port = 0xffffffff + out_group = 0xffffffff + flags = 65535 + inst_cnt = 0xff + self._test_serialize(cookie, cookie_mask, table_id, + command, idle_timeout, hard_timeout, + priority, buffer_id, out_port, + out_group, flags, inst_cnt) + + def test_serialize_min(self): + cookie = 0 + cookie_mask = 0 + table_id = 0 + command = ofproto.OFPFC_ADD + idle_timeout = 0 + hard_timeout = 0 + priority = 0 + buffer_id = 0 + out_port = 0 + out_group = 0 + flags = 0 + self._test_serialize(cookie, cookie_mask, table_id, + command, idle_timeout, hard_timeout, + priority, buffer_id, out_port, + out_group, flags) + + def test_serialize_p1(self): + cookie = 2127614848199081640 + cookie_mask = 2127614848199081641 + table_id = 3 + command = 1 + idle_timeout = 62317 + hard_timeout = 7365 + priority = 40163 + buffer_id = 4037115955 + out_port = 65037 + out_group = 6606 + flags = 1 << 0 + self._test_serialize(cookie, cookie_mask, table_id, + command, idle_timeout, hard_timeout, + priority, buffer_id, out_port, + out_group, flags) + + def test_serialize_p2(self): + cookie = 2127614848199081640 + cookie_mask = 2127614848199081641 + table_id = 3 + command = 2 + idle_timeout = 62317 + hard_timeout = 7365 + priority = 40163 + buffer_id = 4037115955 + out_port = 65037 + out_group = 6606 + flags = 1 << 0 + self._test_serialize(cookie, cookie_mask, table_id, + command, idle_timeout, hard_timeout, + priority, buffer_id, out_port, + out_group, flags) + + def test_serialize_p3(self): + cookie = 2127614848199081640 + cookie_mask = 2127614848199081641 + table_id = 3 + command = 3 + idle_timeout = 62317 + hard_timeout = 7365 + priority = 40163 + buffer_id = 4037115955 + out_port = 65037 + out_group = 6606 + flags = 1 << 1 + self._test_serialize(cookie, cookie_mask, table_id, + command, idle_timeout, hard_timeout, + priority, buffer_id, out_port, + out_group, flags) + + def test_serialize_p4(self): + cookie = 2127614848199081640 + cookie_mask = 2127614848199081641 + table_id = 3 + command = 4 + idle_timeout = 62317 + hard_timeout = 7365 + priority = 40163 + buffer_id = 4037115955 + out_port = 65037 + out_group = 6606 + flags = 1 << 2 + self._test_serialize(cookie, cookie_mask, table_id, + command, idle_timeout, hard_timeout, + priority, buffer_id, out_port, + out_group, flags) + + +class TestOFPInstructionGotoTable(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPInstructionGotoTable + """ + + # OFP_INSTRUCTION_GOTO_TABLE_PACK_STR + # '!HHB3x'...type, len, table_id, pad(3) + type_ = ofproto.OFPIT_GOTO_TABLE + len_ = ofproto.OFP_INSTRUCTION_GOTO_TABLE_SIZE + + fmt = ofproto.OFP_INSTRUCTION_GOTO_TABLE_PACK_STR + + def test_init(self): + table_id = 3 + c = OFPInstructionGotoTable(table_id) + + eq_(self.type_, c.type) + eq_(self.len_, c.len) + eq_(table_id, c.table_id) + + def _test_parser(self, table_id): + buf = pack(self.fmt, self.type_, self.len_, table_id) + res = OFPInstructionGotoTable.parser(buf, 0) + + eq_(res.len, self.len_) + eq_(res.type, self.type_) + eq_(res.table_id, table_id) + + def test_parser_mid(self): + self._test_parser(3) + + def test_parser_max(self): + self._test_parser(255) + + def test_parser_min(self): + self._test_parser(0) + + def _test_serialize(self, table_id): + c = OFPInstructionGotoTable(table_id) + + buf = bytearray() + c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], table_id) + + def test_serialize_mid(self): + self._test_serialize(3) + + def test_serialize_max(self): + self._test_serialize(255) + + def test_serialize_min(self): + self._test_serialize(0) + + +class TestOFPInstructionWriteMetadata(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPInstructionWriteMetadata + """ + + # OFP_INSTRUCTION_WRITE_METADATA_PACK_STR + # '!HH4xQQ'...type, len, pad(4), metadata, metadata_mask + type_ = ofproto.OFPIT_WRITE_METADATA + len_ = ofproto.OFP_INSTRUCTION_WRITE_METADATA_SIZE + metadata = 0x1212121212121212 + metadata_mask = 0xff00ff00ff00ff00 + + fmt = ofproto.OFP_INSTRUCTION_WRITE_METADATA_PACK_STR + + def test_init(self): + c = OFPInstructionWriteMetadata(self.metadata, + self.metadata_mask) + + eq_(self.type_, c.type) + eq_(self.len_, c.len) + eq_(self.metadata, c.metadata) + eq_(self.metadata_mask, c.metadata_mask) + + def _test_parser(self, metadata, metadata_mask): + buf = pack(self.fmt, self.type_, self.len_, + metadata, metadata_mask) + + res = OFPInstructionWriteMetadata.parser(buf, 0) + eq_(res.len, self.len_) + eq_(res.type, self.type_) + eq_(res.metadata, metadata) + eq_(res.metadata_mask, metadata_mask) + + def test_parser_metadata_mid(self): + self._test_parser(self.metadata, self.metadata_mask) + + def test_parser_metadata_max(self): + metadata = 0xffffffffffffffff + self._test_parser(metadata, self.metadata_mask) + + def test_parser_metadata_min(self): + metadata = 0 + self._test_parser(metadata, self.metadata_mask) + + def test_parser_metadata_mask_max(self): + metadata_mask = 0xffffffffffffffff + self._test_parser(self.metadata, metadata_mask) + + def test_parser_metadata_mask_min(self): + metadata_mask = 0 + self._test_parser(self.metadata, metadata_mask) + + def _test_serialize(self, metadata, metadata_mask): + c = OFPInstructionWriteMetadata(metadata, + metadata_mask) + + buf = bytearray() + c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], metadata) + eq_(res[3], metadata_mask) + + def test_serialize_metadata_mid(self): + self._test_serialize(self.metadata, self.metadata_mask) + + def test_serialize_metadata_max(self): + metadata = 0xffffffffffffffff + self._test_serialize(metadata, self.metadata_mask) + + def test_serialize_metadata_min(self): + metadata = 0 + self._test_serialize(metadata, self.metadata_mask) + + def test_serialize_metadata_mask_max(self): + metadata_mask = 0xffffffffffffffff + self._test_serialize(self.metadata, metadata_mask) + + def test_serialize_metadata_mask_min(self): + metadata_mask = 0 + self._test_serialize(self.metadata, metadata_mask) + + +class TestOFPInstructionActions(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPInstructionActions + """ + # OFP_INSTRUCTION_ACTIONS_PACK_STR + # '!HH4x'...type, len, pad(4) + type_ = ofproto.OFPIT_WRITE_ACTIONS + len_ = ofproto.OFP_INSTRUCTION_ACTIONS_SIZE \ + + ofproto.OFP_ACTION_OUTPUT_SIZE + + fmt = ofproto.OFP_INSTRUCTION_ACTIONS_PACK_STR + buf = pack(fmt, type_, len_) + + # OFP_ACTION (OFP_ACTION_OUTPUT) + port = 0x00002ae0 + max_len = ofproto.OFP_ACTION_OUTPUT_SIZE + actions = [OFPActionOutput(port, max_len)] + buf_actions = bytearray() + actions[0].serialize(buf_actions, 0) + + buf += six.binary_type(buf_actions) + + def test_init(self): + c = OFPInstructionActions(self.type_, self.actions) + + eq_(self.type_, c.type) + eq_(self.actions, c.actions) + + def _test_parser(self, action_cnt): + # OFP_INSTRUCTION_ACTIONS_PACK_STR + # '!HH4x'...type, len, pad(4) + len_ = ofproto.OFP_INSTRUCTION_ACTIONS_SIZE \ + + (ofproto.OFP_ACTION_OUTPUT_SIZE * action_cnt) + + fmt = ofproto.OFP_INSTRUCTION_ACTIONS_PACK_STR + buf = pack(fmt, self.type_, len_) + + actions = [] + for a in range(action_cnt): + # OFP_ACTION (OFP_ACTION_OUTPUT) + port = a + action = OFPActionOutput(port, self.max_len) + actions.append(action) + buf_actions = bytearray() + actions[a].serialize(buf_actions, 0) + buf += six.binary_type(buf_actions) + + res = OFPInstructionActions.parser(buf, 0) + + # 8 + eq_(res.len, len_) + eq_(res.type, self.type_) + + # 8 + 16 * action_cnt < 65535 byte + # action_cnt <= 4095 + for a in range(action_cnt): + eq_(res.actions[a].type, actions[a].type) + eq_(res.actions[a].len, actions[a].len) + eq_(res.actions[a].port, actions[a].port) + eq_(res.actions[a].max_len, actions[a].max_len) + + def test_parser_mid(self): + self._test_parser(2047) + + def test_parser_max(self): + self._test_parser(4095) + + def test_parser_min(self): + self._test_parser(0) + + def _test_serialize(self, action_cnt): + # OFP_INSTRUCTION_ACTIONS_PACK_STR + # '!HH4x'...type, len, pad(4) + len_ = ofproto.OFP_INSTRUCTION_ACTIONS_SIZE \ + + (ofproto.OFP_ACTION_OUTPUT_SIZE * action_cnt) + + actions = [] + for a in range(action_cnt): + # OFP_ACTION (OFP_ACTION_OUTPUT) + port = a + action = OFPActionOutput(port, self.max_len) + actions.append(action) + + c = OFPInstructionActions(self.type_, actions) + + buf = bytearray() + c.serialize(buf, 0) + + fmt = '!' \ + + ofproto.OFP_INSTRUCTION_ACTIONS_PACK_STR.replace('!', '') + + for a in range(action_cnt): + fmt += ofproto.OFP_ACTION_OUTPUT_PACK_STR.replace('!', '') + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(res[0], self.type_) + eq_(res[1], len_) + + for a in range(action_cnt): + d = 2 + a * 4 + eq_(res[d], actions[a].type) + eq_(res[d + 1], actions[a].len) + eq_(res[d + 2], actions[a].port) + eq_(res[d + 3], actions[a].max_len) + + def test_serialize_mid(self): + self._test_serialize(2047) + + def test_serialize_max(self): + self._test_serialize(4095) + + def test_serialize_min(self): + self._test_serialize(0) + + +class TestOFPActionHeader(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionHeader + """ + + def test_init(self): + # OFP_ACTION_HEADER_PACK_STR + # '!HH4x'...type, len, pad(4) + type_ = ofproto.OFPAT_OUTPUT + len_ = ofproto.OFP_ACTION_HEADER_SIZE + + fmt = ofproto.OFP_ACTION_HEADER_PACK_STR + buf = pack(fmt, type_, len_) + + c = OFPActionHeader(type_, len_) + + eq_(type_, c.type) + eq_(len_, c.len) + + def _test_serialize(self, type_, len_): + # OFP_ACTION_HEADER_PACK_STR + # '!HH4x'...type, len, pad(4) + + fmt = ofproto.OFP_ACTION_HEADER_PACK_STR + buf = pack(fmt, type_, len_) + + c = OFPActionHeader(type_, len_) + + buf = bytearray() + c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_HEADER_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(res[0], type_) + eq_(res[1], len_) + + def test_serialize_mid(self): + type_ = 11 + len_ = 8 + self._test_serialize(type_, len_) + + def test_serialize_max(self): + type_ = 0xffff + len_ = 0xffff + self._test_serialize(type_, len_) + + def test_serialize_min(self): + type_ = 0 + len_ = 0 + self._test_serialize(type_, len_) + + +class TestOFPActionOutput(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionOutput + """ + + # OFP_ACTION_OUTPUT_PACK_STR + # '!HHIH6x'...type, len, port, max_len, pad(6) + type_ = ofproto.OFPAT_OUTPUT + len_ = ofproto.OFP_ACTION_OUTPUT_SIZE + + def test_init(self): + port = 6606 + max_len = 1500 + fmt = ofproto.OFP_ACTION_OUTPUT_PACK_STR + c = OFPActionOutput(port, max_len) + eq_(port, c.port) + eq_(max_len, c.max_len) + + def _test_parser(self, port, max_len): + fmt = ofproto.OFP_ACTION_OUTPUT_PACK_STR + buf = pack(fmt, self.type_, self.len_, port, max_len) + + c = OFPActionOutput(port, max_len) + + res = c.parser(buf, 0) + + eq_(res.len, self.len_) + eq_(res.type, self.type_) + eq_(res.port, port) + eq_(res.max_len, max_len) + + def test_parser_mid(self): + port = 6606 + max_len = 16 + self._test_parser(port, max_len) + + def test_parser_max(self): + port = 4294967295 + max_len = 0xffff + self._test_parser(port, max_len) + + def test_parser_min(self): + port = 0 + max_len = 0 + self._test_parser(port, max_len) + + def test_parser_p1(self): + port = 6606 + max_len = 0xffe5 + self._test_parser(port, max_len) + + def _test_serialize(self, port, max_len): + c = OFPActionOutput(port, max_len) + + buf = bytearray() + c.serialize(buf, 0) + + fmt = ofproto.OFP_ACTION_OUTPUT_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], port) + eq_(res[3], max_len) + + def test_serialize_mid(self): + port = 6606 + max_len = 16 + self._test_serialize(port, max_len) + + def test_serialize_max(self): + port = 4294967295 + max_len = 0xffff + self._test_serialize(port, max_len) + + def test_serialize_min(self): + port = 0 + max_len = 0 + self._test_serialize(port, max_len) + + def test_serialize_p1(self): + port = 6606 + max_len = 0xffe5 + self._test_serialize(port, max_len) + + +class TestOFPActionGroup(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionGroup + """ + + # OFP_ACTION_GROUP_PACK_STR + # '!HHI'...type, len, group_id + type_ = ofproto.OFPAT_GROUP + len_ = ofproto.OFP_ACTION_GROUP_SIZE + group_id = 6606 + + fmt = ofproto.OFP_ACTION_GROUP_PACK_STR + + def test_init(self): + c = OFPActionGroup(self.group_id) + eq_(self.group_id, c.group_id) + + def _test_parser(self, group_id): + buf = pack(self.fmt, self.type_, self.len_, group_id) + + res = OFPActionGroup.parser(buf, 0) + eq_(res.len, self.len_) + eq_(res.type, self.type_) + eq_(res.group_id, group_id) + + def test_parser_mid(self): + self._test_parser(self.group_id) + + def test_parser_max(self): + self._test_parser(4294967295) + + def test_parser_min(self): + self._test_parser(0) + + def _test_serialize(self, group_id): + c = OFPActionGroup(group_id) + + buf = bytearray() + c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], group_id) + + def test_serialize_mid(self): + self._test_serialize(self.group_id) + + def test_serialize_max(self): + self._test_serialize(4294967295) + + def test_serialize_min(self): + self._test_serialize(0) + + +class TestOFPActionSetQueue(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionSetQueue + """ + + # OFP_ACTION_SET_QUEUE_PACK_STR + # '!HHI'...type, len, queue_id + type_ = ofproto.OFPAT_SET_QUEUE + len_ = ofproto.OFP_ACTION_SET_QUEUE_SIZE + queue_id = 6606 + + fmt = ofproto.OFP_ACTION_SET_QUEUE_PACK_STR + + def test_init(self): + c = OFPActionSetQueue(self.queue_id) + eq_(self.queue_id, c.queue_id) + + def _test_parser(self, queue_id): + buf = pack(self.fmt, self.type_, self.len_, queue_id) + + res = OFPActionSetQueue.parser(buf, 0) + eq_(res.len, self.len_) + eq_(res.type, self.type_) + eq_(res.queue_id, queue_id) + + def test_parser_mid(self): + self._test_parser(self.queue_id) + + def test_parser_max(self): + self._test_parser(4294967295) + + def test_parser_min(self): + self._test_parser(0) + + def _test_serialize(self, queue_id): + c = OFPActionSetQueue(queue_id) + + buf = bytearray() + c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], queue_id) + + def test_serialize_mid(self): + self._test_serialize(self.queue_id) + + def test_serialize_max(self): + self._test_serialize(4294967295) + + def test_serialize_min(self): + self._test_serialize(0) + + +class TestOFPActionSetMplsTtl(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionSetMplsTtl + """ + + # OFP_ACTION_MPLS_TTL_PACK_STR + # '!HHB3x'...type, len, mpls_ttl, pad(3) + type_ = ofproto.OFPAT_SET_MPLS_TTL + len_ = ofproto.OFP_ACTION_MPLS_TTL_SIZE + mpls_ttl = 254 + + fmt = ofproto.OFP_ACTION_MPLS_TTL_PACK_STR + + def test_init(self): + c = OFPActionSetMplsTtl(self.mpls_ttl) + eq_(self.mpls_ttl, c.mpls_ttl) + + def _test_parser(self, mpls_ttl): + buf = pack(self.fmt, self.type_, self.len_, mpls_ttl) + + res = OFPActionSetMplsTtl.parser(buf, 0) + eq_(res.len, self.len_) + eq_(res.type, self.type_) + eq_(res.mpls_ttl, mpls_ttl) + + def test_parser_mid(self): + self._test_parser(self.mpls_ttl) + + def test_parser_max(self): + self._test_parser(255) + + def test_parser_min(self): + self._test_parser(0) + + def _test_serialize(self, mpls_ttl): + c = OFPActionSetMplsTtl(mpls_ttl) + + buf = bytearray() + c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], mpls_ttl) + + def test_serialize_mid(self): + self._test_serialize(self.mpls_ttl) + + def test_serialize_max(self): + self._test_serialize(255) + + def test_serialize_min(self): + self._test_serialize(0) + + +class TestOFPActionDecMplsTtl(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionDecMplsTtl + """ + + type_ = ofproto.OFPAT_DEC_MPLS_TTL + len_ = ofproto.OFP_ACTION_MPLS_TTL_SIZE + fmt = ofproto.OFP_ACTION_HEADER_PACK_STR + buf = pack(fmt, type_, len_) + c = OFPActionDecMplsTtl() + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(res.len, self.len_) + eq_(res.type, self.type_) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + + +class TestOFPActionSetNwTtl(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionSetNwTtl + """ + + # OFP_ACTION_NW_TTL_PACK_STR + # '!HHB3x'...type, len, nw_ttl, pad(3) + type_ = ofproto.OFPAT_SET_NW_TTL + len_ = ofproto.OFP_ACTION_NW_TTL_SIZE + nw_ttl = 240 + + fmt = ofproto.OFP_ACTION_NW_TTL_PACK_STR + + def test_init(self): + c = OFPActionSetNwTtl(self.nw_ttl) + eq_(self.nw_ttl, c.nw_ttl) + + def _test_parser(self, nw_ttl): + buf = pack(self.fmt, self.type_, self.len_, nw_ttl) + + res = OFPActionSetNwTtl.parser(buf, 0) + eq_(res.type, self.type_) + eq_(res.len, self.len_) + eq_(res.nw_ttl, nw_ttl) + + def test_parser_mid(self): + self._test_parser(self.nw_ttl) + + def test_parser_max(self): + self._test_parser(255) + + def test_parser_min(self): + self._test_parser(0) + + def _test_serialize(self, nw_ttl): + c = OFPActionSetNwTtl(nw_ttl) + + buf = bytearray() + c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], nw_ttl) + + def test_serialize_mid(self): + self._test_serialize(self.nw_ttl) + + def test_serialize_max(self): + self._test_serialize(255) + + def test_serialize_min(self): + self._test_serialize(0) + + +class TestOFPActionDecNwTtl(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionDecNwTtl + """ + + type_ = ofproto.OFPAT_DEC_NW_TTL + len_ = ofproto.OFP_ACTION_NW_TTL_SIZE + fmt = ofproto.OFP_ACTION_HEADER_PACK_STR + buf = pack(fmt, type_, len_) + c = OFPActionDecNwTtl() + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(res.len, self.len_) + eq_(res.type, self.type_) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + + +class TestOFPActionCopyTtlOut(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionCopyTtlOut + """ + + type_ = ofproto.OFPAT_COPY_TTL_OUT + len_ = ofproto.OFP_ACTION_HEADER_SIZE + fmt = ofproto.OFP_ACTION_HEADER_PACK_STR + buf = pack(fmt, type_, len_) + c = OFPActionCopyTtlOut() + + def test_parser(self): + res = self.c.parser(self.buf, 0) + eq_(res.len, self.len_) + eq_(res.type, self.type_) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + + +class TestOFPActionCopyTtlIn(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionCopyTtlIn + """ + + # OFP_ACTION_HEADER_PACK_STR + # '!HH'...type, len + type_ = ofproto.OFPAT_COPY_TTL_IN + len_ = ofproto.OFP_ACTION_HEADER_SIZE + fmt = ofproto.OFP_ACTION_HEADER_PACK_STR + buf = pack(fmt, type_, len_) + c = OFPActionCopyTtlIn() + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(res.len, self.len_) + eq_(res.type, self.type_) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + + +class TestOFPActionPushVlan(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionPushVlan + """ + + # OFP_ACTION_PUSH_PACK_STR + # '!HHH2x'...type, len, ethertype, pad(2) + type_ = ofproto.OFPAT_PUSH_VLAN + len_ = ofproto.OFP_ACTION_PUSH_SIZE + fmt = ofproto.OFP_ACTION_PUSH_PACK_STR + + def test_init(self): + ethertype = 0x8100 + c = OFPActionPushVlan(ethertype) + eq_(ethertype, c.ethertype) + + def _test_parser(self, ethertype): + buf = pack(self.fmt, self.type_, self.len_, ethertype) + + res = OFPActionPushVlan.parser(buf, 0) + eq_(res.type, self.type_) + eq_(res.len, self.len_) + eq_(res.ethertype, ethertype) + + def test_parser_mid(self): + self._test_parser(0x8100) + + def test_parser_max(self): + self._test_parser(0xffff) + + def test_parser_min(self): + self._test_parser(0) + + def _test_serialize(self, ethertype): + c = OFPActionPushVlan(ethertype) + buf = bytearray() + c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], ethertype) + + def test_serialize_mid(self): + self._test_serialize(0x8100) + + def test_serialize_max(self): + self._test_serialize(0xffff) + + def test_serialize_min(self): + self._test_serialize(0) + + +class TestOFPActionPushMpls(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionPushMpls + """ + + # OFP_ACTION_PUSH_PACK_STR + # '!HHH2x'...type, len, ethertype, pad(2) + type_ = ofproto.OFPAT_PUSH_MPLS + len_ = ofproto.OFP_ACTION_PUSH_SIZE + fmt = ofproto.OFP_ACTION_PUSH_PACK_STR + + def test_init(self): + ethertype = 0x8100 + c = OFPActionPushMpls(ethertype) + eq_(ethertype, c.ethertype) + + def _test_parser(self, ethertype): + buf = pack(self.fmt, self.type_, self.len_, ethertype) + + res = OFPActionPushMpls.parser(buf, 0) + eq_(res.type, self.type_) + eq_(res.len, self.len_) + eq_(res.ethertype, ethertype) + + def test_parser_mid(self): + self._test_parser(0x8100) + + def test_parser_max(self): + self._test_parser(0xffff) + + def test_parser_min(self): + self._test_parser(0) + + def _test_serialize(self, ethertype): + c = OFPActionPushMpls(ethertype) + buf = bytearray() + c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], ethertype) + + def test_serialize_mid(self): + self._test_serialize(0x8100) + + def test_serialize_max(self): + self._test_serialize(0xffff) + + def test_serialize_min(self): + self._test_serialize(0) + + +class TestOFPActionPopVlan(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionPopVlan + """ + + # OFP_ACTION_HEADER_PACK_STR + # '!HH'...type, len + type_ = ofproto.OFPAT_POP_VLAN + len_ = ofproto.OFP_ACTION_HEADER_SIZE + fmt = ofproto.OFP_ACTION_HEADER_PACK_STR + buf = pack(fmt, type_, len_) + c = OFPActionPopVlan() + + def test_parser(self): + res = self.c.parser(self.buf, 0) + eq_(self.type_, res.type) + eq_(self.len_, res.len) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + + +class TestOFPActionPopMpls(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionPopMpls + """ + + # OFP_ACTION_POP_MPLS_PACK_STR + # '!HHH2x'...type, len, ethertype, pad(2) + type_ = ofproto.OFPAT_POP_MPLS + len_ = ofproto.OFP_ACTION_POP_MPLS_SIZE + fmt = ofproto.OFP_ACTION_POP_MPLS_PACK_STR + + def test_init(self): + ethertype = 0x8100 + c = OFPActionPopMpls(ethertype) + eq_(ethertype, c.ethertype) + + def _test_parser(self, ethertype): + buf = pack(self.fmt, self.type_, self.len_, ethertype) + + res = OFPActionPopMpls.parser(buf, 0) + eq_(res.type, self.type_) + eq_(res.len, self.len_) + eq_(res.ethertype, ethertype) + + def test_parser_mid(self): + self._test_parser(0x8100) + + def test_parser_max(self): + self._test_parser(0xffff) + + def test_parser_min(self): + self._test_parser(0) + + def _test_serialize(self, ethertype): + c = OFPActionPopMpls(ethertype) + buf = bytearray() + c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], ethertype) + + def test_serialize_mid(self): + self._test_serialize(0x8100) + + def test_serialize_max(self): + self._test_serialize(0xffff) + + def test_serialize_min(self): + self._test_serialize(0) + + +class TestOFPActionSetField(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionSetField + """ + + type_ = ofproto.OFPAT_SET_FIELD + header = ofproto.OXM_OF_IN_PORT + in_port = 6606 + + field = MTInPort(header, in_port) + length = ofproto.OFP_ACTION_SET_FIELD_SIZE + field.oxm_len() + len_ = utils.round_up(length, 8) + + fmt = '!HHII4x' + buf = pack(fmt, type_, len_, header, in_port) + + c = OFPActionSetField(field) + + def test_init(self): + eq_(self.field, self.c.field) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(res.type, self.type_) + eq_(res.len, self.len_) + eq_(res.field.header, self.header) + eq_(res.field.value, self.in_port) + + def test_serialize(self): + buf = bytearray() + self.c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], self.header) + eq_(res[3], self.in_port) + + +class TestOFPActionExperimenter(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPActionExperimenter + """ + + # OFP_ACTION_EXPERIMENTER_HEADER_PACK_STR v1.2 + # '!HHI'...type, len, experimenter + type_ = ofproto.OFPAT_EXPERIMENTER + len_ = ofproto.OFP_ACTION_EXPERIMENTER_HEADER_SIZE + fmt = ofproto.OFP_ACTION_EXPERIMENTER_HEADER_PACK_STR + + def test_init(self): + experimenter = 4294967295 + c = OFPActionExperimenter(experimenter) + eq_(experimenter, c.experimenter) + + def _test_parser(self, experimenter): + buf = pack(self.fmt, self.type_, self.len_, experimenter) + + res = OFPActionExperimenter.parser(buf, 0) + eq_(res.type, self.type_) + eq_(res.len, self.len_) + eq_(res.experimenter, experimenter) + + def test_parser_mid(self): + experimenter = 2147483648 + self._test_parser(experimenter) + + def test_parser_max(self): + experimenter = 4294967295 + self._test_parser(experimenter) + + def test_parser_min(self): + experimenter = 0 + self._test_parser(experimenter) + + def _test_serialize(self, experimenter): + c = OFPActionExperimenter(experimenter) + + buf = bytearray() + c.serialize(buf, 0) + + res = struct.unpack(self.fmt, six.binary_type(buf)) + eq_(res[0], self.type_) + eq_(res[1], self.len_) + eq_(res[2], experimenter) + + def test_serialize_mid(self): + experimenter = 2147483648 + self._test_serialize(experimenter) + + def test_serialize_max(self): + experimenter = 4294967295 + self._test_serialize(experimenter) + + def test_serialize_min(self): + experimenter = 0 + self._test_serialize(experimenter) + + +class TestOFPBucket(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPBucket + """ + + def test_init(self): + # OFP_BUCKET_PACK_STR + # '!HHII4x'...len, weight, watch_port, watch_group, pad(4) + weight = 4386 + watch_port = 6606 + watch_group = 3 + + # OFP_ACTION (OFP_ACTION_OUTPUT) + port = 3 + max_len = 1500 + actions = [OFPActionOutput(port, max_len)] + + c = OFPBucket(weight, watch_port, watch_group, actions) + eq_(weight, c.weight) + eq_(watch_port, c.watch_port) + eq_(watch_group, c.watch_group) + eq_(1, len(c.actions)) + eq_(port, c.actions[0].port) + eq_(max_len, c.actions[0].max_len) + + def _test_parser(self, weight, watch_port, watch_group, action_cnt): + # OFP_BUCKET_PACK_STR + # '!HHII4x'...len, weight, watch_port, watch_group, pad(4) + len_ = ofproto.OFP_BUCKET_SIZE \ + + (ofproto.OFP_ACTION_OUTPUT_SIZE * action_cnt) + + fmt = ofproto.OFP_BUCKET_PACK_STR + buf = pack(fmt, len_, weight, watch_port, watch_group) + + actions = [] + for a in range(action_cnt): + # OFP_ACTION (OFP_ACTION_OUTPUT) + port = a + max_len = ofproto.OFP_ACTION_OUTPUT_SIZE + action = OFPActionOutput(port, max_len) + actions.append(action) + buf_actions = bytearray() + actions[a].serialize(buf_actions, 0) + buf += six.binary_type(buf_actions) + + res = OFPBucket.parser(buf, 0) + + # 16 + eq_(weight, res.weight) + eq_(watch_port, res.watch_port) + eq_(watch_group, res.watch_group) + + # 16 + 16 * action_cnt < 65535 byte + # action_cnt <= 4094 + for a in range(action_cnt): + eq_(actions[a].type, res.actions[a].type) + eq_(actions[a].len, res.actions[a].len) + eq_(actions[a].port, res.actions[a].port) + eq_(actions[a].max_len, res.actions[a].max_len) + + def test_parser_mid(self): + weight = 4386 + watch_port = 6606 + watch_group = 3 + action_cnt = 2047 + self._test_parser(weight, watch_port, + watch_group, action_cnt) + + def test_parser_max(self): + weight = 65535 + watch_port = 4294967295 + watch_group = 4294967295 + action_cnt = 4094 + self._test_parser(weight, watch_port, + watch_group, action_cnt) + + def test_parser_min(self): + weight = 0 + watch_port = 0 + watch_group = 0 + action_cnt = 0 + self._test_parser(weight, watch_port, + watch_group, action_cnt) + + def _test_serialize(self, weight, watch_port, watch_group, + action_cnt): + # OFP_BUCKET_PACK_STR + # '!HHII4x'...len, weight, watch_port, watch_group, pad(4) + len_ = ofproto.OFP_BUCKET_SIZE \ + + (ofproto.OFP_ACTION_OUTPUT_SIZE * action_cnt) + + actions = [] + for a in range(action_cnt): + # OFP_ACTION (OFP_ACTION_OUTPUT) + port = a + max_len = ofproto.OFP_ACTION_OUTPUT_SIZE + action = OFPActionOutput(port, max_len) + actions.append(action) + + c = OFPBucket(weight, watch_port, watch_group, actions) + + buf = bytearray() + c.serialize(buf, 0) + + fmt = ofproto.OFP_BUCKET_PACK_STR + for a in range(action_cnt): + fmt += ofproto.OFP_ACTION_OUTPUT_PACK_STR[1:] + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(res[0], len_) + eq_(res[1], weight) + eq_(res[2], watch_port) + eq_(res[3], watch_group) + + for a in range(action_cnt): + d = 4 + a * 4 + eq_(res[d], actions[a].type) + eq_(res[d + 1], actions[a].len) + eq_(res[d + 2], actions[a].port) + eq_(res[d + 3], actions[a].max_len) + + def test_serialize_mid(self): + weight = 4386 + watch_port = 6606 + watch_group = 3 + action_cnt = 2047 + self._test_serialize(weight, watch_port, + watch_group, action_cnt) + + def test_serialize_max(self): + weight = 65535 + watch_port = 4294967295 + watch_group = 4294967295 + action_cnt = 4094 + self._test_serialize(weight, watch_port, + watch_group, action_cnt) + + def test_serialize_min(self): + weight = 0 + watch_port = 0 + watch_group = 0 + action_cnt = 0 + self._test_serialize(weight, watch_port, + watch_group, action_cnt) + + +class TestOFPGroupMod(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPGroupMod + """ + + def test_init(self): + # OFP_GROUP_MOD_PACK_STR + # '!HBBI'...command, type, pad, group_id + command = ofproto.OFPFC_ADD + type_ = ofproto.OFPGT_SELECT + group_id = 6606 + + # OFP_BUCKET + weight = 4386 + watch_port = 8006 + watch_group = 3 + + # OFP_ACTION (OFP_ACTION_OUTPUT) + port = 10 + max_len = 2000 + actions = [OFPActionOutput(port, max_len)] + + buckets = [OFPBucket(weight, watch_port, watch_group, actions)] + + c = OFPGroupMod(_Datapath, command, type_, group_id, buckets) + eq_(command, c.command) + eq_(type_, c.type) + eq_(group_id, c.group_id) + eq_(1, len(c.buckets)) + eq_(1, len(c.buckets[0].actions)) + eq_(port, c.buckets[0].actions[0].port) + eq_(max_len, c.buckets[0].actions[0].max_len) + + def _test_serialize(self, command, type_, group_id, bucket_cnt): + len_ = ofproto.OFP_BUCKET_SIZE \ + + ofproto.OFP_ACTION_OUTPUT_SIZE + + buckets = [] + for b in range(bucket_cnt): + # OFP_BUCKET + weight = watch_port = watch_group = port = b + actions = [OFPActionOutput(port, 0)] + bucket = OFPBucket(weight, watch_port, watch_group, actions) + buckets.append(bucket) + + c = OFPGroupMod(_Datapath, command, type_, group_id, buckets) + + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_GROUP_MOD, c.msg_type) + eq_(0, c.xid) + eq_(len(c.buf), c.msg_len) + + # 16 byte + fmt = ofproto.OFP_HEADER_PACK_STR \ + + ofproto.OFP_GROUP_MOD_PACK_STR[1:] + + # 16 + (16 + 16) * bucket_cnt < 65535 byte + # bucket_cnt <= 2047 + for b in range(bucket_cnt): + fmt += ofproto.OFP_BUCKET_PACK_STR[1:] \ + + ofproto.OFP_ACTION_OUTPUT_PACK_STR[1:] + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + msg_len = ofproto.OFP_GROUP_MOD_SIZE \ + + (len_ * bucket_cnt) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_GROUP_MOD) + eq_(res[2], msg_len) + eq_(res[3], 0) + eq_(res[4], command) + eq_(res[5], type_) + eq_(res[6], group_id) + + for d in range(bucket_cnt): + e = 7 + d * 8 + eq_(res[e + 1], buckets[d].weight) + eq_(res[e + 2], buckets[d].watch_port) + eq_(res[e + 3], buckets[d].watch_group) + eq_(res[e + 4], buckets[d].actions[0].type) + eq_(res[e + 5], buckets[d].actions[0].len) + eq_(res[e + 6], buckets[d].actions[0].port) + eq_(res[e + 7], buckets[d].actions[0].max_len) + + def test_serialize_mid(self): + command = 32768 + type_ = 128 + group_id = 6606 + bucket_cnt = 1023 + self._test_serialize(command, type_, group_id, bucket_cnt) + + def test_serialize_max(self): + command = 65535 + type_ = 255 + group_id = 4294967295 + bucket_cnt = 2047 + self._test_serialize(command, type_, group_id, bucket_cnt) + + def test_serialize_min(self): + command = 0 + type_ = 0 + group_id = 0 + bucket_cnt = 0 + self._test_serialize(command, type_, group_id, bucket_cnt) + + def test_serialize_p1(self): + command = 1 + type_ = 1 + group_id = 6606 + bucket_cnt = 1023 + self._test_serialize(command, type_, group_id, bucket_cnt) + + def test_serialize_p2(self): + command = 1 + type_ = 2 + group_id = 6606 + bucket_cnt = 1023 + self._test_serialize(command, type_, group_id, bucket_cnt) + + def test_serialize_p3(self): + command = 2 + type_ = 3 + group_id = 6606 + bucket_cnt = 1023 + self._test_serialize(command, type_, group_id, bucket_cnt) + + +class TestOFPPortMod(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPPortMod + """ + + # OFP_PORT_MOD_PACK_STR v1.2 + # '!I4xs2xIII4x'...port_no, pad(4), hw_addr, pad(2), + # config, mask, advertise, pad(4) + port_no = 1119692796 + hw_addr = 'e8:fe:5e:a9:68:6c' + config = 2226555987 + mask = 1678244809 + advertise = 2025421682 + + def test_init(self): + c = OFPPortMod(_Datapath, self.port_no, self.hw_addr, + self.config, self.mask, self.advertise) + eq_(self.port_no, c.port_no) + eq_(self.hw_addr, c.hw_addr) + eq_(self.config, c.config) + eq_(self.mask, c.mask) + eq_(self.advertise, c.advertise) + + def _test_serialize(self, port_no, hw_addr, config, mask, advertise): + c = OFPPortMod(_Datapath, port_no, hw_addr, config, + mask, advertise) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_PORT_MOD, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_PORT_MOD_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_PORT_MOD) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], port_no) + eq_(res[5], addrconv.mac.text_to_bin(hw_addr)) + eq_(res[6], config) + eq_(res[7], mask) + eq_(res[8], advertise) + + def test_serialize_mid(self): + self._test_serialize(self.port_no, self.hw_addr, + self.config, self.mask, self.advertise) + + def test_serialize_max(self): + port_no = ofproto.OFPP_ANY + hw_addr = 'ff:ff:ff:ff:ff:ff' + config = 0xffffffff + mask = 0xffffffff + advertise = 0xffffffff + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_min(self): + port_no = 0 + hw_addr = '00:00:00:00:00:00' + config = 0 + mask = 0 + advertise = 0 + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p1(self): + port_no = ofproto.OFPP_MAX + hw_addr = self.hw_addr + config = ofproto.OFPPC_PORT_DOWN + mask = ofproto.OFPPC_PORT_DOWN + advertise = ofproto.OFPPF_10MB_HD + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p2(self): + port_no = ofproto.OFPP_IN_PORT + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_RECV + mask = ofproto.OFPPC_NO_RECV + advertise = ofproto.OFPPF_10MB_FD + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p3(self): + port_no = ofproto.OFPP_TABLE + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_FWD + mask = ofproto.OFPPC_NO_FWD + advertise = ofproto.OFPPF_100MB_HD + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p4(self): + port_no = ofproto.OFPP_NORMAL + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_100MB_FD + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p5(self): + port_no = ofproto.OFPP_FLOOD + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_1GB_HD + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p6(self): + port_no = ofproto.OFPP_ALL + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_1GB_FD + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p7(self): + port_no = ofproto.OFPP_CONTROLLER + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_10GB_FD + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p8(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_40GB_FD + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p9(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_100GB_FD + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p10(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_1TB_FD + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p11(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_OTHER + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p12(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_COPPER + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p13(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_FIBER + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p14(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_AUTONEG + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p15(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_PAUSE + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + def test_serialize_p16(self): + port_no = ofproto.OFPP_LOCAL + hw_addr = self.hw_addr + config = ofproto.OFPPC_NO_PACKET_IN + mask = ofproto.OFPPC_NO_PACKET_IN + advertise = ofproto.OFPPF_PAUSE_ASYM + self._test_serialize(port_no, hw_addr, config, mask, advertise) + + +class TestOFPTableMod(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPTableMod + """ + + # OFP_PORT_TABLE_PACK_STR v1.2 + # '!B3xI'...table_id, pad(3), config + table_id = 3 + config = 2226555987 + + def test_init(self): + c = OFPTableMod(_Datapath, self.table_id, self.config) + eq_(self.table_id, c.table_id) + eq_(self.config, c.config) + + def _test_serialize(self, table_id, config): + c = OFPTableMod(_Datapath, table_id, config) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_TABLE_MOD, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_TABLE_MOD_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_TABLE_MOD) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], table_id) + eq_(res[5], config) + + def test_serialize_mid(self): + self._test_serialize(self.table_id, self.config) + + def test_serialize_max(self): + table_id = ofproto.OFPTT_ALL + config = 0xffffffff + self._test_serialize(table_id, config) + + def test_serialize_min(self): + table_id = 0 + config = 0 + self._test_serialize(table_id, config) + + def test_serialize_p1(self): + table_id = ofproto.OFPTT_MAX + config = ofproto.OFPTC_TABLE_MISS_CONTINUE + self._test_serialize(table_id, config) + + def test_serialize_p2(self): + table_id = ofproto.OFPTT_MAX + config = ofproto.OFPTC_TABLE_MISS_DROP + self._test_serialize(table_id, config) + + def test_serialize_p3(self): + table_id = ofproto.OFPTT_MAX + config = ofproto.OFPTC_TABLE_MISS_MASK + self._test_serialize(table_id, config) + + +class TestOFPStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPStatsRequest + """ + + type_ = ofproto.OFPST_DESC + c = OFPStatsRequest(_Datapath, type_) + + def test_init(self): + eq_(self.type_, self.c.type) + eq_(0, self.c.flags) + + def test_serialize_body(self): + len_ = ofproto.OFP_HEADER_SIZE \ + + ofproto.OFP_STATS_REQUEST_SIZE + self.c.buf = bytearray(len_) + self.c._serialize_body() + + fmt = ofproto.OFP_STATS_REQUEST_PACK_STR + res = struct.unpack_from(fmt, six.binary_type(self.c.buf), + ofproto.OFP_HEADER_SIZE) + + eq_(res[0], self.type_) + eq_(res[1], 0) + + +class TestOFPStatsReply(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPStatsReply + """ + + c = OFPStatsReply(_Datapath) + + def test_parser_single_struct_true(self): + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_STATS_REPLY + msg_len = ofproto.OFP_STATS_REPLY_SIZE \ + + ofproto.OFP_AGGREGATE_STATS_REPLY_SIZE + xid = 2495926989 + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_STATS_REPLY_PACK_STR + # '!HH4x'...type, flags, pad(4) + type_ = ofproto.OFPST_AGGREGATE + flags = 41802 + + fmt = ofproto.OFP_STATS_REPLY_PACK_STR + buf += pack(fmt, type_, flags) + + # OFP_AGGREGATE_STATS_REPLY_PACK_STR + packet_count = 5142202600015232219 + byte_count = 2659740543924820419 + flow_count = 1344694860 + body = OFPAggregateStatsReply(packet_count, byte_count, flow_count) + + fmt = ofproto.OFP_AGGREGATE_STATS_REPLY_PACK_STR + buf += pack(fmt, packet_count, byte_count, flow_count) + + res = self.c.parser(object, version, msg_type, msg_len, xid, buf) + + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(type_, res.type) + eq_(flags, res.flags) + eq_(packet_count, res.body.packet_count) + eq_(byte_count, res.body.byte_count) + eq_(flow_count, res.body.flow_count) + + def test_parser_single_struct_flase(self): + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_STATS_REPLY + msg_len = ofproto.OFP_STATS_REPLY_SIZE \ + + ofproto.OFP_QUEUE_STATS_SIZE + xid = 2495926989 + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_STATS_REPLY_PACK_STR + # '!HH4x'...type, flags, pad(4) + type_ = ofproto.OFPST_QUEUE + flags = 11884 + + fmt = ofproto.OFP_STATS_REPLY_PACK_STR + buf += pack(fmt, type_, flags) + + # OFP_QUEUE_STATS_PACK_STR + port_no = 41186 + queue_id = 6606 + tx_bytes = 8638420181865882538 + tx_packets = 2856480458895760962 + tx_errors = 6283093430376743019 + body = [OFPQueueStats(port_no, queue_id, tx_bytes, tx_packets, + tx_errors)] + + fmt = ofproto.OFP_QUEUE_STATS_PACK_STR + buf += pack(fmt, port_no, queue_id, tx_bytes, tx_packets, tx_errors) + + res = self.c.parser(object, version, msg_type, msg_len, xid, buf) + + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(type_, res.type) + eq_(flags, res.flags) + eq_(port_no, res.body[0].port_no) + eq_(queue_id, res.body[0].queue_id) + eq_(tx_bytes, res.body[0].tx_bytes) + eq_(tx_packets, res.body[0].tx_packets) + eq_(tx_errors, res.body[0].tx_errors) + + def test_parser_max(self): + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_STATS_REPLY + msg_len = ofproto.OFP_STATS_REPLY_SIZE + xid = 0xffffffff + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_STATS_REPLY_PACK_STR + # '!HH4x'...type, flags, pad(4) + type_ = ofproto.OFPST_QUEUE + flags = 0xffff + + fmt = ofproto.OFP_STATS_REPLY_PACK_STR + buf += pack(fmt, type_, flags) + res = self.c.parser(object, version, msg_type, msg_len, xid, buf) + + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(type_, res.type) + eq_(flags, res.flags) + + def test_parser_min(self): + # OFP_HEADER_PACK_STR + # '!BBHI'...version, msg_type, msg_len, xid + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_STATS_REPLY + msg_len = ofproto.OFP_STATS_REPLY_SIZE + xid = 0 + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_STATS_REPLY_PACK_STR + # '!HH4x'...type, flags, pad(4) + type_ = ofproto.OFPST_QUEUE + flags = 0 + + fmt = ofproto.OFP_STATS_REPLY_PACK_STR + buf += pack(fmt, type_, flags) + res = self.c.parser(object, version, msg_type, msg_len, xid, buf) + + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(type_, res.type) + eq_(flags, res.flags) + + +class TestOFPDescStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPDescStatsRequest + """ + + def test_serialize(self): + c = OFPDescStatsRequest(_Datapath) + c.serialize() + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_STATS_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], ofproto.OFPST_DESC) + eq_(res[5], 0) + + +class TestOFPDescStats(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPDescStats + """ + + # OFP_DESC_STATS_PACK_STR + # '!256s256s256s32s256s'...mfr_desc, hw_desc, sw_desc, serial_num, dp_desc + mfr_desc = b'mfr_desc'.ljust(256) + hw_desc = b'hw_desc'.ljust(256) + sw_desc = b'sw_desc'.ljust(256) + serial_num = b'serial_num'.ljust(32) + dp_desc = b'dp_desc'.ljust(256) + + buf = mfr_desc \ + + hw_desc \ + + sw_desc \ + + serial_num \ + + dp_desc + + c = OFPDescStats(mfr_desc, hw_desc, sw_desc, serial_num, dp_desc) + + def test_init(self): + eq_(self.mfr_desc, self.c.mfr_desc) + eq_(self.hw_desc, self.c.hw_desc) + eq_(self.sw_desc, self.c.sw_desc) + eq_(self.serial_num, self.c.serial_num) + eq_(self.dp_desc, self.c.dp_desc) + + def test_parser(self): + res = self.c.parser(self.buf, 0) + + eq_(self.mfr_desc, res.mfr_desc) + eq_(self.hw_desc, res.hw_desc) + eq_(self.sw_desc, res.sw_desc) + eq_(self.serial_num, res.serial_num) + eq_(self.dp_desc, res.dp_desc) + + +class TestOFPFlowStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPFlowStatsRequest + """ + + # OFP_FLOW_STATS_REQUEST_PACK_STR + # '!B3xII4xQQ'...table_id, pad(3), out_port, out_group, pad(4), + # cookie, cookie_mask + table_id = 3 + out_port = 65037 + out_group = 6606 + cookie = 2127614848199081640 + cookie_mask = 2127614848199081641 + + def test_init(self): + match = OFPMatch() + in_port = 3 + match.set_in_port(in_port) + + c = OFPFlowStatsRequest(_Datapath, self.table_id, self.out_port, + self.out_group, self.cookie, self.cookie_mask, + match) + + eq_(self.table_id, c.table_id) + eq_(self.out_port, c.out_port) + eq_(self.out_group, c.out_group) + eq_(self.cookie, c.cookie) + eq_(self.cookie_mask, c.cookie_mask) + eq_(in_port, c.match._flow.in_port) + + def _test_serialize(self, table_id, out_port, out_group, + cookie, cookie_mask): + match = OFPMatch() + dl_type = 0x800 + match.set_dl_type(dl_type) + + c = OFPFlowStatsRequest(_Datapath, table_id, out_port, + out_group, cookie, cookie_mask, match) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_STATS_REQUEST, c.msg_type) + eq_(0, c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR \ + + ofproto.OFP_STATS_REQUEST_PACK_STR[1:] \ + + ofproto.OFP_FLOW_STATS_REQUEST_PACK_STR[1:] \ + + 'HHHBB' \ + + MTEthType.pack_str[1:] + '6x' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_STATS_REQUEST) + size = ofproto.OFP_STATS_REPLY_SIZE \ + + ofproto.OFP_FLOW_STATS_REQUEST_SIZE \ + + calcsize(MTEthType.pack_str + '6x') + eq_(res[2], size) + eq_(res[3], 0) + eq_(res[4], ofproto.OFPST_FLOW) + eq_(res[5], 0) + eq_(res[6], table_id) + eq_(res[7], out_port) + eq_(res[8], out_group) + eq_(res[9], cookie) + eq_(res[10], cookie_mask) + # match + eq_(res[11], ofproto.OFPMT_OXM) + eq_(res[12], 10) + eq_(res[13], ofproto.OFPXMC_OPENFLOW_BASIC) + eq_(res[14] >> 1, ofproto.OFPXMT_OFB_ETH_TYPE) + eq_(res[14] & 0b0001, 0) + eq_(res[15], calcsize(MTEthType.pack_str)) + eq_(res[16], dl_type) + + def test_serialize_mid(self): + self._test_serialize(self.table_id, self.out_port, self.out_group, + self.cookie, self.cookie_mask) + + def test_serialize_max(self): + table_id = 0xff + out_port = 0xffff + out_group = 0xffff + cookie = 0xffffffff + cookie_mask = 0xffffffff + self._test_serialize(table_id, out_port, out_group, + cookie, cookie_mask) + + def test_serialize_min(self): + table_id = 0 + out_port = 0 + out_group = 0 + cookie = 0 + cookie_mask = 0 + self._test_serialize(table_id, out_port, out_group, + cookie, cookie_mask) + + def test_serialize_p1(self): + table_id = ofproto.OFPTT_MAX + self._test_serialize(table_id, self.out_port, self.out_group, + self.cookie, self.cookie_mask) + + +class TestOFPFlowStats(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPFlowStats + """ + + def test_init(self): + length = ofproto.OFP_FLOW_STATS_SIZE + table_id = 81 + duration_sec = 2484712402 + duration_nsec = 3999715196 + priority = 57792 + idle_timeout = 36368 + hard_timeout = 54425 + cookie = 793171083674290912 + packet_count = 5142202600015232219 + byte_count = 2659740543924820419 + + match = OFPMatch() + in_port = 2 + match.set_in_port(in_port) + + goto_table = 3 + instructions = [OFPInstructionGotoTable(goto_table)] + c = OFPFlowStats(table_id, duration_sec, duration_nsec, + priority, idle_timeout, hard_timeout, cookie, + packet_count, byte_count, match, instructions) + + eq_(table_id, c.table_id) + eq_(duration_sec, c.duration_sec) + eq_(duration_nsec, c.duration_nsec) + eq_(priority, c.priority) + eq_(idle_timeout, c.idle_timeout) + eq_(hard_timeout, c.hard_timeout) + eq_(cookie, c.cookie) + eq_(packet_count, c.packet_count) + eq_(byte_count, c.byte_count) + eq_(in_port, c.match._flow.in_port) + eq_(goto_table, c.instructions[0].table_id) + + def _test_parser(self, table_id, duration_sec, duration_nsec, + priority, idle_timeout, hard_timeout, cookie, + packet_count, byte_count, inst_cnt=0): + + length = ofproto.OFP_FLOW_STATS_SIZE \ + + calcsize(MTEthType.pack_str[1:] + '6x') \ + + ofproto.OFP_INSTRUCTION_GOTO_TABLE_SIZE * inst_cnt + + # OFP_FLOW_STATS_PACK_STR + buf = pack(ofproto.OFP_FLOW_STATS_PACK_STR, + length, table_id, duration_sec, duration_nsec, + priority, idle_timeout, hard_timeout, cookie, + packet_count, byte_count) + + # match + match = OFPMatch() + dl_type = 0x0800 + match.set_dl_type(dl_type) + match_buf = bytearray() + match.serialize(match_buf, 0) + buf += six.binary_type(match_buf) + + # instructions + # 56 + 8 + 8 * inst_cnt <= 65535 + # inst_cnt <= 8183 + for i in range(inst_cnt): + inst = OFPInstructionGotoTable(1) + inst_buf = bytearray() + inst.serialize(inst_buf, 0) + buf += six.binary_type(inst_buf) + + # parse + res = OFPFlowStats.parser(buf, 0) + eq_(length, res.length) + eq_(table_id, res.table_id) + eq_(duration_sec, res.duration_sec) + eq_(duration_nsec, res.duration_nsec) + eq_(priority, res.priority) + eq_(idle_timeout, res.idle_timeout) + eq_(hard_timeout, res.hard_timeout) + eq_(cookie, res.cookie) + eq_(packet_count, res.packet_count) + eq_(byte_count, res.byte_count) + eq_(dl_type, res.match.fields[0].value) + for i in range(inst_cnt): + eq_(1, res.instructions[i].table_id) + + def test_parser_mid(self): + table_id = 81 + duration_sec = 2484712402 + duration_nsec = 3999715196 + priority = 57792 + idle_timeout = 36368 + hard_timeout = 54425 + cookie = 793171083674290912 + packet_count = 5142202600015232219 + byte_count = 2659740543924820419 + inst_cnt = 2 + + self._test_parser(table_id, duration_sec, duration_nsec, + priority, idle_timeout, hard_timeout, cookie, + packet_count, byte_count, inst_cnt) + + def test_parser_max(self): + table_id = 0xff + duration_sec = 0xffff + duration_nsec = 0xffff + priority = 0xffff + idle_timeout = 0xff + hard_timeout = 0xff + cookie = 0xffffffffffffffff + packet_count = 0xffffffffffffffff + byte_count = 0xffffffffffffffff + inst_cnt = 8183 + + self._test_parser(table_id, duration_sec, duration_nsec, + priority, idle_timeout, hard_timeout, cookie, + packet_count, byte_count, inst_cnt) + + def test_parser_min(self): + self._test_parser(0, 0, 0, 0, 0, 0, 0, 0, 0) + + +class TestOFPAggregateStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPAggregateStatsRequest + """ + + # OFP_AGGREGATE_STATS_REQUEST_PACK_STR + # '!B3xII4xQQ'...table_id, pad(3), out_port, out_group, pad(4), + # cookie, cookie_mask + table_id = 3 + out_port = 65037 + out_group = 6606 + cookie = 2127614848199081640 + cookie_mask = 2127614848199081641 + + def test_init(self): + match = OFPMatch() + dl_type = 0x800 + match.set_dl_type(dl_type) + c = OFPAggregateStatsRequest(_Datapath, self.table_id, + self.out_port, self.out_group, + self.cookie, self.cookie_mask, + match) + + eq_(self.table_id, c.table_id) + eq_(self.out_port, c.out_port) + eq_(self.out_group, c.out_group) + eq_(self.cookie, c.cookie) + eq_(self.cookie_mask, c.cookie_mask) + eq_(dl_type, c.match._flow.dl_type) + + def _test_serialize(self, table_id, out_port, out_group, + cookie, cookie_mask): + match = OFPMatch() + dl_type = 0x800 + match.set_dl_type(dl_type) + c = OFPAggregateStatsRequest(_Datapath, table_id, + out_port, out_group, cookie, + cookie_mask, match) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_STATS_REQUEST, c.msg_type) + eq_(0, c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR \ + + ofproto.OFP_STATS_REQUEST_PACK_STR[1:] \ + + ofproto.OFP_AGGREGATE_STATS_REQUEST_PACK_STR[1:] \ + + 'HHHBB' \ + + MTEthType.pack_str[1:] + '6x' + + res = struct.unpack(fmt, six.binary_type(c.buf)) + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_STATS_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], ofproto.OFPST_AGGREGATE) + eq_(res[5], 0) + eq_(res[6], table_id) + eq_(res[7], out_port) + eq_(res[8], out_group) + eq_(res[9], cookie) + eq_(res[10], cookie_mask) + # match + eq_(res[11], ofproto.OFPMT_OXM) + eq_(res[12], 10) + eq_(res[13], ofproto.OFPXMC_OPENFLOW_BASIC) + eq_(res[14] >> 1, ofproto.OFPXMT_OFB_ETH_TYPE) + eq_(res[14] & 0b0001, 0) + eq_(res[15], calcsize(MTEthType.pack_str)) + eq_(res[16], dl_type) + + def test_serialize_mid(self): + self._test_serialize(self.table_id, self.out_port, self.out_group, + self.cookie, self.cookie_mask) + + def test_serialize_max(self): + table_id = 0xff + out_port = 0xffffffff + out_group = 0xffffffff + cookie = 0xffffffff + cookie_mask = 0xffffffff + self._test_serialize(table_id, out_port, out_group, + cookie, cookie_mask) + + def test_serialize_min(self): + table_id = 0 + out_port = 0 + out_group = 0 + cookie = 0 + cookie_mask = 0 + self._test_serialize(table_id, out_port, out_group, + cookie, cookie_mask) + + def test_serialize_p1(self): + table_id = ofproto.OFPTT_MAX + self._test_serialize(table_id, self.out_port, self.out_group, + self.cookie, self.cookie_mask) + + +class TestOFPAggregateStatsReply(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPAggregateStatsReply + """ + + # OFP_AGGREGATE_STATS_REPLY_PACK_STR + # '!QQI4x'...packet_count, byte_count, flow_count, pad(4) + packet_count = 5142202600015232219 + byte_count = 2659740543924820419 + flow_count = 1344694860 + + def test_init(self): + c = OFPAggregateStatsReply(self.packet_count, self.byte_count, + self.flow_count) + + eq_(c.packet_count, self.packet_count) + eq_(c.byte_count, self.byte_count) + eq_(c.flow_count, self.flow_count) + + def _test_parser(self, packet_count, byte_count, flow_count): + fmt = ofproto.OFP_AGGREGATE_STATS_REPLY_PACK_STR + buf = pack(fmt, packet_count, byte_count, flow_count) + + res = OFPAggregateStatsReply.parser(buf, 0) + eq_(packet_count, res.packet_count) + eq_(byte_count, res.byte_count) + eq_(flow_count, res.flow_count) + + def test_parser_mid(self): + self._test_parser(self.packet_count, self.byte_count, + self.flow_count) + + def test_parser_max(self): + packet_count = 18446744073709551615 + byte_count = 18446744073709551615 + flow_count = 4294967295 + self._test_parser(packet_count, byte_count, + flow_count) + + def test_parser_min(self): + packet_count = 0 + byte_count = 0 + flow_count = 0 + self._test_parser(packet_count, byte_count, + flow_count) + + +class TestOFPTableStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPTableStatsRequest + """ + + def test_serialize(self): + c = OFPTableStatsRequest(_Datapath) + c.serialize() + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_STATS_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], ofproto.OFPST_TABLE) + eq_(res[5], 0) + + +class TestOFPTableStats(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPTableStats + """ + + def test_init(self): + table_id = 91 + name = 'name' + match = 1270985291017894273 + wildcards = 3316608530 + write_actions = 2484712402 + apply_actions = 3999715196 + write_setfields = 5142202600015232219 + apply_setfields = 2659740543924820419 + metadata_match = 2127614848199081640 + metadata_write = 2127614848199081641 + instructions = 1119692796 + config = 2226555987 + max_entries = 2506913869 + active_count = 2024581150 + lookup_count = 4620020561814017052 + matched_count = 2825167325263435621 + + res = OFPTableStats(table_id, name, match, wildcards, write_actions, + apply_actions, write_setfields, apply_setfields, + metadata_match, metadata_write, instructions, + config, max_entries, active_count, lookup_count, + matched_count) + + eq_(table_id, res.table_id) + eq_(name, res.name) + eq_(match, res.match) + eq_(wildcards, res.wildcards) + eq_(write_actions, res.write_actions) + eq_(apply_actions, res.apply_actions) + eq_(write_setfields, res.write_setfields) + eq_(apply_setfields, res.apply_setfields) + eq_(metadata_match, res.metadata_match) + eq_(metadata_write, res.metadata_write) + eq_(instructions, res.instructions) + eq_(config, res.config) + eq_(max_entries, res.max_entries) + eq_(active_count, res.active_count) + eq_(lookup_count, res.lookup_count) + eq_(matched_count, res.matched_count) + + def _test_parser(self, table_id, name, match, wildcards, write_actions, + apply_actions, write_setfields, apply_setfields, + metadata_match, metadata_write, instructions, config, + max_entries, active_count, lookup_count, matched_count): + # OFP_TABLE_STATS_PACK_STR + # '!B7x32sQQIIQQQQIIIIQQ' + # ...table_id, name, match, wildcards, write_actions, apply_actions, + # write_setfields, apply_setfields', metadata_match, metadata_write, + # instructions, config, max_entries, + # active_count, lookup_count, matched_count + fmt = ofproto.OFP_TABLE_STATS_PACK_STR + buf = pack(fmt, table_id, name, + match, wildcards, write_actions, + apply_actions, write_setfields, apply_setfields, + metadata_match, metadata_write, instructions, config, + max_entries, active_count, lookup_count, matched_count) + + res = OFPTableStats.parser(buf, 0) + + eq_(table_id, res.table_id) + eq_(name, res.name.replace(b'\x00', b'')) + eq_(match, res.match) + eq_(wildcards, res.wildcards) + eq_(write_actions, res.write_actions) + eq_(apply_actions, res.apply_actions) + eq_(write_setfields, res.write_setfields) + eq_(apply_setfields, res.apply_setfields) + eq_(metadata_match, res.metadata_match) + eq_(metadata_write, res.metadata_write) + eq_(instructions, res.instructions) + eq_(config, res.config) + eq_(max_entries, res.max_entries) + eq_(active_count, res.active_count) + eq_(lookup_count, res.lookup_count) + eq_(matched_count, res.matched_count) + + def test_parser_mid(self): + table_id = 91 + name = b'name' + match = 1270985291017894273 + wildcards = 3316608530 + write_actions = 2484712402 + apply_actions = 3999715196 + write_setfields = 5142202600015232219 + apply_setfields = 2659740543924820419 + metadata_match = 2127614848199081640 + metadata_write = 2127614848199081641 + instructions = 1119692796 + config = 2226555987 + max_entries = 2506913869 + active_count = 2024581150 + lookup_count = 4620020561814017052 + matched_count = 2825167325263435621 + + self._test_parser(table_id, name, match, wildcards, write_actions, + apply_actions, write_setfields, apply_setfields, + metadata_match, metadata_write, instructions, config, + max_entries, active_count, lookup_count, + matched_count) + + def test_parser_max(self): + # '!B7x32sQQIIQQQQIIIIQQ' + table_id = 0xff + name = b'a' * 32 + match = 0xffffffffffffffff + wildcards = 0xffffffffffffffff + write_actions = 0xffffffff + apply_actions = 0xffffffff + write_setfields = 0xffffffffffffffff + apply_setfields = 0xffffffffffffffff + metadata_match = 0xffffffffffffffff + metadata_write = 0xffffffffffffffff + instructions = 0xffffffff + config = 0xffffffff + max_entries = 0xffffffff + active_count = 0xffffffff + lookup_count = 0xffffffffffffffff + matched_count = 0xffffffffffffffff + + self._test_parser(table_id, name, match, wildcards, write_actions, + apply_actions, write_setfields, apply_setfields, + metadata_match, metadata_write, instructions, config, + max_entries, active_count, lookup_count, + matched_count) + + def test_parser_min(self): + table_id = 0 + name = b'' + match = 0 + wildcards = 0 + write_actions = 0 + apply_actions = 0 + write_setfields = 0 + apply_setfields = 0 + metadata_match = 0 + metadata_write = 0 + instructions = 0 + config = 0 + max_entries = 0 + active_count = 0 + lookup_count = 0 + matched_count = 0 + + self._test_parser(table_id, name, match, wildcards, write_actions, + apply_actions, write_setfields, apply_setfields, + metadata_match, metadata_write, instructions, config, + max_entries, active_count, lookup_count, + matched_count) + + def _test_parser_p(self, ofpxmt, ofpit, ofptc): + table_id = 91 + name = b'name' + match = ofpxmt + wildcards = ofpxmt + write_actions = 2484712402 + apply_actions = 3999715196 + write_setfields = ofpxmt + apply_setfields = ofpxmt + metadata_match = 2127614848199081640 + metadata_write = 2127614848199081641 + instructions = ofpit + config = ofptc + max_entries = 2506913869 + active_count = 2024581150 + lookup_count = 4620020561814017052 + matched_count = 2825167325263435621 + + self._test_parser(table_id, name, match, wildcards, write_actions, + apply_actions, write_setfields, apply_setfields, + metadata_match, metadata_write, instructions, config, + max_entries, active_count, lookup_count, + matched_count) + + def test_parser_p1(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IN_PORT, + ofproto.OFPIT_GOTO_TABLE, + ofproto.OFPTC_TABLE_MISS_CONTINUE) + + def test_parser_p2(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IN_PHY_PORT, + ofproto.OFPIT_WRITE_METADATA, + ofproto.OFPTC_TABLE_MISS_DROP) + + def test_parser_p3(self): + self._test_parser_p(ofproto.OFPXMT_OFB_METADATA, + ofproto.OFPIT_WRITE_ACTIONS, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p4(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ETH_DST, + ofproto.OFPIT_APPLY_ACTIONS, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p5(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ETH_SRC, + ofproto.OFPIT_CLEAR_ACTIONS, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p6(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ETH_TYPE, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p7(self): + self._test_parser_p(ofproto.OFPXMT_OFB_VLAN_VID, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p8(self): + self._test_parser_p(ofproto.OFPXMT_OFB_VLAN_PCP, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p9(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IP_DSCP, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p10(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IP_ECN, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p11(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IP_PROTO, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p12(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IPV4_SRC, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p13(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IPV4_DST, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p14(self): + self._test_parser_p(ofproto.OFPXMT_OFB_TCP_SRC, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p15(self): + self._test_parser_p(ofproto.OFPXMT_OFB_TCP_DST, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p16(self): + self._test_parser_p(ofproto.OFPXMT_OFB_UDP_SRC, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p17(self): + self._test_parser_p(ofproto.OFPXMT_OFB_UDP_DST, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p18(self): + self._test_parser_p(ofproto.OFPXMT_OFB_SCTP_SRC, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p19(self): + self._test_parser_p(ofproto.OFPXMT_OFB_SCTP_DST, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p20(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ICMPV4_TYPE, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p21(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ICMPV4_CODE, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p22(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ARP_OP, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p23(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ARP_SPA, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p24(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ARP_TPA, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p25(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ARP_SHA, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p26(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ARP_THA, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p27(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_SRC, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p28(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_DST, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p29(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_FLABEL, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p30(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ICMPV6_TYPE, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p31(self): + self._test_parser_p(ofproto.OFPXMT_OFB_ICMPV6_CODE, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p32(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_ND_TARGET, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p33(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_ND_SLL, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p34(self): + self._test_parser_p(ofproto.OFPXMT_OFB_IPV6_ND_TLL, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p35(self): + self._test_parser_p(ofproto.OFPXMT_OFB_MPLS_LABEL, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + def test_parser_p36(self): + self._test_parser_p(ofproto.OFPXMT_OFB_MPLS_TC, + ofproto.OFPIT_EXPERIMENTER, + ofproto.OFPTC_TABLE_MISS_MASK) + + +class TestOFPPortStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPPortStatsRequest + """ + + # OFP_PORT_STATS_REQUEST_PACK_STR + # '!I4x'...port_no, pad(4) + port_no = 41186 + + def test_init(self): + c = OFPPortStatsRequest(_Datapath, self.port_no) + eq_(self.port_no, c.port_no) + + def _test_serialize(self, port_no): + c = OFPPortStatsRequest(_Datapath, port_no) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_STATS_REQUEST, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') \ + + ofproto.OFP_PORT_STATS_REQUEST_PACK_STR.replace('!', '') + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_STATS_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], ofproto.OFPST_PORT) + eq_(res[5], 0) + eq_(res[6], port_no) + + def test_serialize_mid(self): + self._test_serialize(self.port_no) + + def test_serialize_max(self): + self._test_serialize(ofproto.OFPP_ANY) + + def test_serialize_min(self): + self._test_serialize(0) + + def test_serialize_p1(self): + self._test_serialize(ofproto.OFPP_MAX) + + def test_serialize_p2(self): + self._test_serialize(ofproto.OFPP_IN_PORT) + + def test_serialize_p3(self): + self._test_serialize(ofproto.OFPP_TABLE) + + def test_serialize_p4(self): + self._test_serialize(ofproto.OFPP_NORMAL) + + def test_serialize_p5(self): + self._test_serialize(ofproto.OFPP_FLOOD) + + def test_serialize_p6(self): + self._test_serialize(ofproto.OFPP_ALL) + + def test_serialize_p7(self): + self._test_serialize(ofproto.OFPP_CONTROLLER) + + def test_serialize_p8(self): + self._test_serialize(ofproto.OFPP_LOCAL) + + +class TestOFPPortStats(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPPortStats + """ + + def test_init(self): + port_no = 6606 + rx_packets = 5999980397101236279 + tx_packets = 2856480458895760962 + rx_bytes = 6170274950576278921 + tx_bytes = 8638420181865882538 + rx_dropped = 6982303461569875546 + tx_dropped = 661287462113808071 + rx_errors = 3422231811478788365 + tx_errors = 6283093430376743019 + rx_frame_err = 876072919806406283 + rx_over_err = 6525873760178941600 + rx_crc_err = 8303073210207070535 + collisions = 3409801584220270201 + + res = OFPPortStats(port_no, rx_packets, tx_packets, + rx_bytes, tx_bytes, rx_dropped, tx_dropped, + rx_errors, tx_errors, rx_frame_err, + rx_over_err, rx_crc_err, collisions) + + eq_(port_no, res.port_no) + eq_(rx_packets, res.rx_packets) + eq_(tx_packets, res.tx_packets) + eq_(rx_bytes, res.rx_bytes) + eq_(tx_bytes, res.tx_bytes) + eq_(rx_dropped, res.rx_dropped) + eq_(tx_dropped, res.tx_dropped) + eq_(rx_errors, res.rx_errors) + eq_(tx_errors, res.tx_errors) + eq_(rx_frame_err, res.rx_frame_err) + eq_(rx_over_err, res.rx_over_err) + eq_(rx_crc_err, res.rx_crc_err) + eq_(collisions, res.collisions) + + def _test_parser(self, port_no, rx_packets, tx_packets, + rx_bytes, tx_bytes, rx_dropped, tx_dropped, + rx_errors, tx_errors, rx_frame_err, + rx_over_err, rx_crc_err, collisions): + + # OFP_PORT_STATS_PACK_STR = '!H6xQQQQQQQQQQQQ' + fmt = ofproto.OFP_PORT_STATS_PACK_STR + buf = pack(fmt, port_no, rx_packets, tx_packets, rx_bytes, tx_bytes, + rx_dropped, tx_dropped, rx_errors, tx_errors, rx_frame_err, + rx_over_err, rx_crc_err, collisions) + + res = OFPPortStats.parser(buf, 0) + + eq_(port_no, res.port_no) + eq_(rx_packets, res.rx_packets) + eq_(tx_packets, res.tx_packets) + eq_(rx_bytes, res.rx_bytes) + eq_(tx_bytes, res.tx_bytes) + eq_(rx_dropped, res.rx_dropped) + eq_(tx_dropped, res.tx_dropped) + eq_(rx_errors, res.rx_errors) + eq_(tx_errors, res.tx_errors) + eq_(rx_frame_err, res.rx_frame_err) + eq_(rx_over_err, res.rx_over_err) + eq_(rx_crc_err, res.rx_crc_err) + eq_(collisions, res.collisions) + + def test_parser_mid(self): + port_no = 6606 + rx_packets = 5999980397101236279 + tx_packets = 2856480458895760962 + rx_bytes = 6170274950576278921 + tx_bytes = 8638420181865882538 + rx_dropped = 6982303461569875546 + tx_dropped = 661287462113808071 + rx_errors = 3422231811478788365 + tx_errors = 6283093430376743019 + rx_frame_err = 876072919806406283 + rx_over_err = 6525873760178941600 + rx_crc_err = 8303073210207070535 + collisions = 3409801584220270201 + + self._test_parser(port_no, rx_packets, tx_packets, rx_bytes, tx_bytes, + rx_dropped, tx_dropped, rx_errors, tx_errors, + rx_frame_err, rx_over_err, rx_crc_err, collisions) + + def test_parser_max(self): + port_no = 0xffffffff + rx_packets = 0xffffffffffffffff + tx_packets = 0xffffffffffffffff + rx_bytes = 0xffffffffffffffff + tx_bytes = 0xffffffffffffffff + rx_dropped = 0xffffffffffffffff + tx_dropped = 0xffffffffffffffff + rx_errors = 0xffffffffffffffff + tx_errors = 0xffffffffffffffff + rx_frame_err = 0xffffffffffffffff + rx_over_err = 0xffffffffffffffff + rx_crc_err = 0xffffffffffffffff + collisions = 0xffffffffffffffff + + self._test_parser(port_no, rx_packets, tx_packets, rx_bytes, tx_bytes, + rx_dropped, tx_dropped, rx_errors, tx_errors, + rx_frame_err, rx_over_err, rx_crc_err, collisions) + + def test_parser_min(self): + port_no = 0 + rx_packets = 0 + tx_packets = 0 + rx_bytes = 0 + tx_bytes = 0 + rx_dropped = 0 + tx_dropped = 0 + rx_errors = 0 + tx_errors = 0 + rx_frame_err = 0 + rx_over_err = 0 + rx_crc_err = 0 + collisions = 0 + + self._test_parser(port_no, rx_packets, tx_packets, rx_bytes, tx_bytes, + rx_dropped, tx_dropped, rx_errors, tx_errors, + rx_frame_err, rx_over_err, rx_crc_err, collisions) + + def _test_parser_p(self, port_no): + port_no = port_no + rx_packets = 5999980397101236279 + tx_packets = 2856480458895760962 + rx_bytes = 6170274950576278921 + tx_bytes = 8638420181865882538 + rx_dropped = 6982303461569875546 + tx_dropped = 661287462113808071 + rx_errors = 3422231811478788365 + tx_errors = 6283093430376743019 + rx_frame_err = 876072919806406283 + rx_over_err = 6525873760178941600 + rx_crc_err = 8303073210207070535 + collisions = 3409801584220270201 + + self._test_parser(port_no, rx_packets, tx_packets, rx_bytes, tx_bytes, + rx_dropped, tx_dropped, rx_errors, tx_errors, + rx_frame_err, rx_over_err, rx_crc_err, collisions) + + def test_parser_p1(self): + self._test_parser_p(ofproto.OFPP_MAX) + + def test_parser_p2(self): + self._test_parser_p(ofproto.OFPP_IN_PORT) + + def test_parser_p3(self): + self._test_parser_p(ofproto.OFPP_TABLE) + + def test_parser_p4(self): + self._test_parser_p(ofproto.OFPP_NORMAL) + + def test_parser_p5(self): + self._test_parser_p(ofproto.OFPP_FLOOD) + + def test_parser_p6(self): + self._test_parser_p(ofproto.OFPP_ALL) + + def test_parser_p7(self): + self._test_parser_p(ofproto.OFPP_CONTROLLER) + + def test_parser_p8(self): + self._test_parser_p(ofproto.OFPP_LOCAL) + + +class TestOFPQueueStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPQueueStatsRequest + """ + + # OFP_QUEUE_STATS_REQUEST_PACK_STR + # '!II'...port_no, queue_id + port_no = 41186 + queue_id = 6606 + + def test_init(self): + c = OFPQueueStatsRequest(_Datapath, self.port_no, self.queue_id) + + eq_(self.port_no, c.port_no) + eq_(self.queue_id, c.queue_id) + + def _test_serialize(self, port_no, queue_id): + c = OFPQueueStatsRequest(_Datapath, port_no, queue_id) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_STATS_REQUEST, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') \ + + ofproto.OFP_QUEUE_STATS_REQUEST_PACK_STR.replace('!', '') + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_STATS_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], ofproto.OFPST_QUEUE) + eq_(res[5], 0) + eq_(res[6], port_no) + eq_(res[7], queue_id) + + def test_serialize_mid(self): + self._test_serialize(self.port_no, self.queue_id) + + def test_serialize_max(self): + self._test_serialize(0xffffffff, 0xffffffff) + + def test_serialize_min(self): + self._test_serialize(0, 0) + + def test_serialize_p1(self): + self._test_serialize(ofproto.OFPP_MAX, self.queue_id) + + def test_serialize_p2(self): + self._test_serialize(ofproto.OFPP_IN_PORT, self.queue_id) + + def test_serialize_p3(self): + self._test_serialize(ofproto.OFPP_NORMAL, self.queue_id) + + def test_serialize_p4(self): + self._test_serialize(ofproto.OFPP_TABLE, self.queue_id) + + def test_serialize_p5(self): + self._test_serialize(ofproto.OFPP_FLOOD, self.queue_id) + + def test_serialize_p6(self): + self._test_serialize(ofproto.OFPP_ALL, self.queue_id) + + def test_serialize_p7(self): + self._test_serialize(ofproto.OFPP_CONTROLLER, self.queue_id) + + def test_serialize_p8(self): + self._test_serialize(ofproto.OFPP_LOCAL, self.queue_id) + + +class TestOFPQueueStats(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPQueueStats + """ + + def test_init(self): + port_no = 41186 + queue_id = 6606 + tx_bytes = 8638420181865882538 + tx_packets = 2856480458895760962 + tx_errors = 6283093430376743019 + + res = OFPQueueStats(port_no, queue_id, tx_bytes, + tx_packets, tx_errors) + + eq_(port_no, res.port_no) + eq_(queue_id, res.queue_id) + eq_(tx_bytes, res.tx_bytes) + eq_(tx_packets, res.tx_packets) + eq_(tx_errors, res.tx_errors) + + def _test_parser(self, port_no, queue_id, tx_bytes, + tx_packets, tx_errors): + + # OFP_QUEUE_STATS_PACK_STR = '!IIQQQ' + fmt = ofproto.OFP_QUEUE_STATS_PACK_STR + buf = pack(fmt, port_no, queue_id, tx_bytes, tx_packets, tx_errors) + res = OFPQueueStats.parser(buf, 0) + + eq_(port_no, res.port_no) + eq_(queue_id, res.queue_id) + eq_(tx_bytes, res.tx_bytes) + eq_(tx_packets, res.tx_packets) + eq_(tx_errors, res.tx_errors) + + def test_parser_mid(self): + port_no = 41186 + queue_id = 6606 + tx_bytes = 8638420181865882538 + tx_packets = 2856480458895760962 + tx_errors = 6283093430376743019 + + self._test_parser(port_no, queue_id, tx_bytes, + tx_packets, tx_errors) + + def test_parser_max(self): + port_no = 0xffffffff + queue_id = 0xffffffff + tx_bytes = 0xffffffffffffffff + tx_packets = 0xffffffffffffffff + tx_errors = 0xffffffffffffffff + + self._test_parser(port_no, queue_id, tx_bytes, + tx_packets, tx_errors) + + def test_parser_min(self): + port_no = 0 + queue_id = 0 + tx_bytes = 0 + tx_packets = 0 + tx_errors = 0 + + self._test_parser(port_no, queue_id, tx_bytes, + tx_packets, tx_errors) + + def _test_parser_p(self, port_no): + queue_id = 6606 + tx_bytes = 8638420181865882538 + tx_packets = 2856480458895760962 + tx_errors = 6283093430376743019 + + self._test_parser(port_no, queue_id, tx_bytes, + tx_packets, tx_errors) + + def test_parser_p1(self): + self._test_parser_p(ofproto.OFPP_MAX) + + def test_parser_p2(self): + self._test_parser_p(ofproto.OFPP_IN_PORT) + + def test_parser_p3(self): + self._test_parser_p(ofproto.OFPP_TABLE) + + def test_parser_p4(self): + self._test_parser_p(ofproto.OFPP_NORMAL) + + def test_parser_p5(self): + self._test_parser_p(ofproto.OFPP_FLOOD) + + def test_parser_p6(self): + self._test_parser_p(ofproto.OFPP_ALL) + + def test_parser_p7(self): + self._test_parser_p(ofproto.OFPP_CONTROLLER) + + def test_parser_p8(self): + self._test_parser_p(ofproto.OFPP_LOCAL) + + +class TestOFPBucketCounter(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPBucketCounter + """ + + # OFP_BUCKET_COUNTER_PACK_STR = '!QQ' + packet_count = 6489108735192644493 + byte_count = 7334344481123449724 + + def test_init(self): + c = OFPBucketCounter(self.packet_count, self.byte_count) + + eq_(self.packet_count, c.packet_count) + eq_(self.byte_count, c.byte_count) + + def _test_parser(self, packet_count, byte_count): + fmt = ofproto.OFP_BUCKET_COUNTER_PACK_STR + buf = pack(fmt, packet_count, byte_count) + + res = OFPBucketCounter.parser(buf, 0) + eq_(packet_count, res.packet_count) + eq_(byte_count, res.byte_count) + + def test_parser_mid(self): + self._test_parser(self.packet_count, self.byte_count) + + def test_parser_max(self): + packet_count = 18446744073709551615 + byte_count = 18446744073709551615 + self._test_parser(packet_count, byte_count) + + def test_parser_min(self): + packet_count = 0 + byte_count = 0 + self._test_parser(packet_count, byte_count) + + +class TestOFPGroupStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPGroupStatsRequest + """ + + # OFP_GROUP_STATS_REQUEST_PACK_STR + # '!I4x'...group_id, pad(4) + group_id = 6606 + + def test_init(self): + c = OFPGroupStatsRequest(_Datapath, self.group_id) + eq_(self.group_id, c.group_id) + + def _test_serialize(self, group_id): + c = OFPGroupStatsRequest(_Datapath, group_id) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_STATS_REQUEST, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') \ + + ofproto.OFP_GROUP_STATS_REQUEST_PACK_STR.replace('!', '') + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_STATS_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], ofproto.OFPST_GROUP) + eq_(res[5], 0) + eq_(res[6], group_id) + + def test_serialize_mid(self): + self._test_serialize(self.group_id) + + def test_serialize_max(self): + self._test_serialize(0xffffffff) + + def test_serialize_min(self): + self._test_serialize(0) + + def test_serialize_p1(self): + self._test_serialize(ofproto.OFPG_MAX) + + def test_serialize_p2(self): + self._test_serialize(ofproto.OFPG_ALL) + + +class TestOFPGroupStats(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPGroupStats + """ + + # OFP_GROUP_STATS_PACK_STR = '!H2xII4xQQ' + length = ofproto.OFP_GROUP_STATS_SIZE \ + + ofproto.OFP_BUCKET_COUNTER_SIZE + group_id = 6606 + ref_count = 2102 + packet_count = 6489108735192644493 + byte_count = 7334344481123449724 + + # OFP_BUCKET_COUNTER_PACK_STR = '!QQ' + buck_packet_count = 3519264449364891087 + buck_byte_count = 3123449724733434448 + bucket_counters = [OFPBucketCounter(buck_packet_count, buck_byte_count)] + buf_bucket_counters = pack(ofproto.OFP_BUCKET_COUNTER_PACK_STR, + buck_packet_count, buck_byte_count) + + fmt = ofproto.OFP_GROUP_STATS_PACK_STR + buf = pack(fmt, length, group_id, ref_count, packet_count, byte_count) \ + + buf_bucket_counters + + def test_init(self): + c = OFPGroupStats(self.group_id, self.ref_count, + self.packet_count, self.byte_count, + self.bucket_counters) + + eq_(self.group_id, c.group_id) + eq_(self.ref_count, c.ref_count) + eq_(self.packet_count, c.packet_count) + eq_(self.byte_count, c.byte_count) + eq_(self.bucket_counters, c.bucket_counters) + + def _test_parser(self, group_id, ref_count, packet_count, + byte_count, bucket_counter_cnt): + # OFP_GROUP_STATS_PACK_STR = '!H2xII4xQQ' + length = ofproto.OFP_GROUP_STATS_SIZE \ + + (ofproto.OFP_BUCKET_COUNTER_SIZE * bucket_counter_cnt) + fmt = ofproto.OFP_GROUP_STATS_PACK_STR + buf = pack(fmt, length, group_id, ref_count, + packet_count, byte_count) + + bucket_counters = [] + for b in range(bucket_counter_cnt): + # OFP_BUCKET_COUNTER_PACK_STR = '!QQ' + buck_packet_count = b + buck_byte_count = b + bucket_counter = OFPBucketCounter(buck_packet_count, + buck_byte_count) + bucket_counters.append(bucket_counter) + buf_bucket_counters = \ + pack(ofproto.OFP_BUCKET_COUNTER_PACK_STR, + buck_packet_count, buck_byte_count) + buf += buf_bucket_counters + + res = OFPGroupStats.parser(buf, 0) + + # 32 + eq_(length, res.length) + eq_(group_id, res.group_id) + eq_(ref_count, res.ref_count) + eq_(packet_count, res.packet_count) + eq_(byte_count, res.byte_count) + + # 32 + 16 * bucket_counter_cnt < 65535 byte + # bucket_counter_cnt <= 4093 + for b in range(bucket_counter_cnt): + eq_(bucket_counters[b].packet_count, + res.bucket_counters[b].packet_count) + eq_(bucket_counters[b].byte_count, + res.bucket_counters[b].byte_count) + + def test_parser_mid(self): + bucket_counter_cnt = 2046 + self._test_parser(self.group_id, self.ref_count, + self.packet_count, self.byte_count, + bucket_counter_cnt) + + def test_parser_max(self): + group_id = 4294967295 + ref_count = 4294967295 + packet_count = 18446744073709551615 + byte_count = 18446744073709551615 + bucket_counter_cnt = 4093 + self._test_parser(group_id, ref_count, + packet_count, byte_count, + bucket_counter_cnt) + + def test_parser_min(self): + group_id = 0 + ref_count = 0 + packet_count = 0 + byte_count = 0 + bucket_counter_cnt = 0 + self._test_parser(group_id, ref_count, + packet_count, byte_count, + bucket_counter_cnt) + + +class TestOFPGroupDescStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPGroupDescStatsRequest + """ + + def test_serialize(self): + c = OFPGroupDescStatsRequest(_Datapath) + c.serialize() + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_STATS_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], ofproto.OFPST_GROUP_DESC) + eq_(res[5], 0) + + +class TestOFPGroupDescStats(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPGroupDescStats + """ + + # OFP_GROUP_DESC_STATS_PACK_STR = '!HBxI' + length = ofproto.OFP_GROUP_DESC_STATS_SIZE \ + + ofproto.OFP_BUCKET_SIZE \ + + ofproto.OFP_ACTION_OUTPUT_SIZE + type_ = 128 + group_id = 6606 + + # OFP_ACTION (OFP_ACTION_OUTPUT) + port = 0x00002ae0 + max_len = ofproto.OFP_ACTION_OUTPUT_SIZE + actions = [OFPActionOutput(port, max_len)] + buf_actions = bytearray() + actions[0].serialize(buf_actions, 0) + + # OFP_BUCKET + weight = 4386 + watch_port = 8006 + watch_group = 3 + buckets = [OFPBucket(weight, watch_port, watch_group, actions)] + + bucket_cnt = 1024 + + def test_init(self): + c = OFPGroupDescStats(self.type_, self.group_id, self.buckets) + + eq_(self.type_, c.type) + eq_(self.group_id, c.group_id) + eq_(self.buckets, c.buckets) + + def _test_parser(self, type_, group_id, bucket_cnt): + # OFP_GROUP_DESC_STATS_PACK_STR = '!HBxI' + length = ofproto.OFP_GROUP_DESC_STATS_SIZE \ + + (ofproto.OFP_BUCKET_SIZE + + ofproto.OFP_ACTION_OUTPUT_SIZE) * bucket_cnt + + fmt = ofproto.OFP_GROUP_DESC_STATS_PACK_STR + buf = pack(fmt, length, type_, group_id) + + buckets = [] + for b in range(bucket_cnt): + # OFP_BUCKET + weight = watch_port = watch_group = b + bucket = OFPBucket(weight, + watch_port, watch_group, + self.actions) + buckets.append(bucket) + buf_buckets = bytearray() + buckets[b].serialize(buf_buckets, 0) + buf += six.binary_type(buf_buckets) + + res = OFPGroupDescStats.parser(buf, 0) + + # 8 byte + eq_(type_, res.type) + eq_(group_id, res.group_id) + + # 8 + ( 16 + 16 ) * b < 65535 byte + # b <= 2047 byte + for b in range(bucket_cnt): + eq_(buckets[b].weight, res.buckets[b].weight) + eq_(buckets[b].watch_port, res.buckets[b].watch_port) + eq_(buckets[b].watch_group, res.buckets[b].watch_group) + eq_(buckets[b].actions[0].port, + res.buckets[b].actions[0].port) + eq_(buckets[b].actions[0].max_len, + res.buckets[b].actions[0].max_len) + + def test_parser_mid(self): + self._test_parser(self.type_, self.group_id, self.bucket_cnt) + + def test_parser_max(self): + group_id = 4294967295 + type_ = 255 + bucket_cnt = 2047 + self._test_parser(type_, group_id, bucket_cnt) + + def test_parser_min(self): + group_id = 0 + type_ = ofproto.OFPGT_ALL + bucket_cnt = 0 + self._test_parser(type_, group_id, bucket_cnt) + + def test_parser_p1(self): + type_ = ofproto.OFPGT_SELECT + self._test_parser(type_, self.group_id, self.bucket_cnt) + + def test_parser_p2(self): + type_ = ofproto.OFPGT_INDIRECT + self._test_parser(type_, self.group_id, self.bucket_cnt) + + def test_parser_p3(self): + type_ = ofproto.OFPGT_FF + self._test_parser(type_, self.group_id, self.bucket_cnt) + + +class TestOFPGroupFeaturesStatsRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPGroupFeaturesStatsRequest + """ + + def test_serialize(self): + c = OFPGroupFeaturesStatsRequest(_Datapath) + c.serialize() + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_STATS_REQUEST_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_STATS_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], ofproto.OFPST_GROUP_FEATURES) + eq_(res[5], 0) + + +class TestOFPGroupFeaturesStats(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPGroupFeaturesStats + """ + + # OFP_GROUP_FEATURES_STATS_PACK_STR = '!II4I4I' + types = ofproto.OFPGT_ALL + capabilities = ofproto.OFPGFC_SELECT_WEIGHT + max_groups = [1, 2, 3, 4] + actions = [1 << ofproto.OFPAT_OUTPUT, + 1 << ofproto.OFPAT_COPY_TTL_OUT, + 1 << ofproto.OFPAT_SET_MPLS_TTL, + 1 << ofproto.OFPAT_PUSH_VLAN] + + def test_init(self): + c = OFPGroupFeaturesStats(self.types, self.capabilities, + self.max_groups, self.actions) + eq_(self.types, c.types) + eq_(self.capabilities, c.capabilities) + eq_(self.max_groups, c.max_groups) + eq_(self.actions, c.actions) + + def _test_parser(self, types, capabilities, max_groups, actions): + + buf = pack('!I', types) \ + + pack('!I', capabilities) \ + + pack('!I', max_groups[0]) \ + + pack('!I', max_groups[1]) \ + + pack('!I', max_groups[2]) \ + + pack('!I', max_groups[3]) \ + + pack('!I', actions[0]) \ + + pack('!I', actions[1]) \ + + pack('!I', actions[2]) \ + + pack('!I', actions[3]) + + res = OFPGroupFeaturesStats.parser(buf, 0) + + # max_groups and actions after the parser is tuple + eq_(types, res.types) + eq_(capabilities, res.capabilities) + eq_(max_groups, res.max_groups) + eq_(actions, res.actions) + + def test_parser_mid(self): + self._test_parser(self.types, self.capabilities, + self.max_groups, self.actions) + + def test_parser_max(self): + types = 0b11111111111111111111111111111111 + capabilities = 0b11111111111111111111111111111111 + max_groups = [4294967295] * 4 + actions = [0b11111111111111111111111111111111] * 4 + self._test_parser(types, capabilities, + max_groups, actions) + + def test_parser_min(self): + types = 0b00000000000000000000000000000000 + capabilities = 0b00000000000000000000000000000000 + max_groups = [0] * 4 + actions = [0b00000000000000000000000000000000] * 4 + self._test_parser(types, capabilities, + max_groups, actions) + + def _test_parser_p(self, types, capabilities, actions): + self._test_parser(types, capabilities, + self.max_groups, actions) + + def test_parser_p1(self): + actions = [1 << ofproto.OFPAT_COPY_TTL_IN, + 1 << ofproto.OFPAT_DEC_MPLS_TTL, + 1 << ofproto.OFPAT_POP_VLAN, + 1 << ofproto.OFPAT_PUSH_MPLS] + self._test_parser_p(1 << ofproto.OFPGT_ALL, + ofproto.OFPGFC_CHAINING, + actions) + + def test_parser_p2(self): + actions = [1 << ofproto.OFPAT_POP_MPLS, + 1 << ofproto.OFPAT_SET_QUEUE, + 1 << ofproto.OFPAT_GROUP, + 1 << ofproto.OFPAT_SET_NW_TTL] + self._test_parser_p(1 << ofproto.OFPGT_SELECT, + ofproto.OFPGFC_SELECT_WEIGHT, + actions) + + def test_parser_p3(self): + actions = [1 << ofproto.OFPAT_DEC_NW_TTL, + 1 << ofproto.OFPAT_SET_FIELD, + 1 << ofproto.OFPAT_GROUP, + 1 << ofproto.OFPAT_SET_NW_TTL] + self._test_parser_p(1 << ofproto.OFPGT_SELECT, + ofproto.OFPGFC_SELECT_LIVENESS, + actions) + + def test_parser_p4(self): + self._test_parser_p(1 << ofproto.OFPGT_INDIRECT, + ofproto.OFPGFC_CHAINING, + self.actions) + + def test_parser_p5(self): + self._test_parser_p(1 << ofproto.OFPGT_FF, + ofproto.OFPGFC_CHAINING_CHECKS, + self.actions) + + +class TestOFPQueueGetConfigRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPQueueGetConfigRequest + """ + + # OFP_QUEUE_GET_CONFIG_REQUEST_PACK_STR v1.2 + # '!I4x'...port, pad(4) + port = 41186 + + def test_init(self): + c = OFPQueueGetConfigRequest(_Datapath, self.port) + eq_(self.port, c.port) + + def _test_serialize(self, port): + c = OFPQueueGetConfigRequest(_Datapath, port) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_QUEUE_GET_CONFIG_REQUEST, c.msg_type) + eq_(0, c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR \ + + ofproto.OFP_QUEUE_GET_CONFIG_REQUEST_PACK_STR[1:] + + res = struct.unpack(fmt, six.binary_type(c.buf)) + eq_(res[0], ofproto.OFP_VERSION) + eq_(res[1], ofproto.OFPT_QUEUE_GET_CONFIG_REQUEST) + eq_(res[2], len(c.buf)) + eq_(res[3], 0) + eq_(res[4], port) + + def test_serialize_mid(self): + self._test_serialize(self.port) + + def test_serialize_max(self): + self._test_serialize(0xffffffff) + + def test_serialize_min(self): + self._test_serialize(0) + + def test_serialize_p1(self): + self._test_serialize(ofproto.OFPP_MAX) + + +class TestOFPQueuePropHeader(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPQueuePropHeader + """ + + # OFP_QUEUE_PROP_HEADER_PACK_STR = '!HH4x' + property_ = 1 + len_ = 10 + + def test_init(self): + c = OFPQueuePropHeader(self.property_, self.len_) + eq_(self.property_, c.property) + eq_(self.len_, c.len) + + def _test_serialize(self, property_, len_): + c = OFPQueuePropHeader(property_, len_) + buf = bytearray() + c.serialize(buf, 0) + + fmt = ofproto.OFP_QUEUE_PROP_HEADER_PACK_STR + res = struct.unpack(fmt, six.binary_type(buf)) + + eq_(res[0], property_) + eq_(res[1], len_) + + def test_serialize_mid(self): + self._test_serialize(self.property_, self.len_) + + def test_serialize_max(self): + self._test_serialize(0xffff, 0xffff) + + def test_serialize_min(self): + self._test_serialize(0, 0) + + +class TestOFPPacketQueue(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPPacketQueue + """ + + def test_init(self): + queue_id = 1 + port = 2 + len_ = 3 + properties = [4, 5, 6] + c = OFPPacketQueue(queue_id, port, properties) + + eq_(queue_id, c.queue_id) + eq_(port, c.port) + eq_(properties, c.properties) + + def _test_parser(self, queue_id, port, prop_cnt): + # OFP_PACKET_QUEUE_PACK_STR = '!IIH6x' + fmt = ofproto.OFP_PACKET_QUEUE_PACK_STR + queue_len = ofproto.OFP_PACKET_QUEUE_SIZE \ + + ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE * prop_cnt + + buf = pack(fmt, queue_id, port, queue_len) + + for rate in range(prop_cnt): + # OFP_QUEUE_PROP_HEADER_PACK_STR = '!HH4x' + fmt = ofproto.OFP_QUEUE_PROP_HEADER_PACK_STR + prop_type = ofproto.OFPQT_MIN_RATE + prop_len = ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE + buf += pack(fmt, prop_type, prop_len) + + # OFP_QUEUE_PROP_MIN_RATE_PACK_STR = '!H6x' + fmt = ofproto.OFP_QUEUE_PROP_MIN_RATE_PACK_STR + prop_rate = rate + buf += pack(fmt, prop_rate) + + res = OFPPacketQueue.parser(buf, 0) + + eq_(queue_id, res.queue_id) + eq_(port, res.port) + eq_(queue_len, res.len) + eq_(prop_cnt, len(res.properties)) + + for rate, p in enumerate(res.properties): + eq_(prop_type, p.property) + eq_(prop_len, p.len) + eq_(rate, p.rate) + + def test_parser_mid(self): + queue_id = 1 + port = 2 + prop_cnt = 2 + self._test_parser(queue_id, port, prop_cnt) + + def test_parser_max(self): + # queue_len format is 'H' < number 65535 + # + # queue_len = OFP_PACKET_QUEUE_SIZE(16) + # + OFP_QUEUE_PROP_MIN_RATE_SIZE(16) * N + # max_prop_cnt = (65535 - 16) / 16 = 4094 + queue_id = 0xffffffff + port = 0xffffffff + prop_cnt = 4094 + self._test_parser(queue_id, port, prop_cnt) + + def test_parser_min(self): + queue_id = 0 + port = 0 + prop_cnt = 0 + self._test_parser(queue_id, port, prop_cnt) + + +class TestOFPQueuePropMinRate(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPQueuePropMinRate + """ + + def _test_parser(self, rate): + # OFP_QUEUE_PROP_MIN_RATE_PACK_STR...H6x + buf = pack(ofproto.OFP_QUEUE_PROP_MIN_RATE_PACK_STR, rate) + res = OFPQueuePropMinRate.parser(buf, 0) + eq_(rate, res.rate) + + def test_parser_mid(self): + self._test_parser(32768) + + def test_parser_max(self): + self._test_parser(0xffff) + + def test_parser_min(self): + self._test_parser(0) + + +class TestOFPQueuePropMaxRate(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPQueuePropMaxRate + """ + + rate = 100 + buf = pack(ofproto.OFP_QUEUE_PROP_MAX_RATE_PACK_STR, rate) + c = OFPQueuePropMaxRate(rate) + + def _test_parser(self, rate): + # OFP_QUEUE_PROP_MAX_RATE_PACK_STR...H6x + buf = pack(ofproto.OFP_QUEUE_PROP_MAX_RATE_PACK_STR, rate) + res = OFPQueuePropMaxRate.parser(buf, 0) + eq_(rate, res.rate) + + def test_parser_mid(self): + self._test_parser(100) + + def test_parser_max(self): + self._test_parser(0xffff) + + def test_parser_min(self): + self._test_parser(0) + + +class TestOFPQueueGetConfigReply(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPQueueGetConfigReply + """ + + def _test_parser(self, xid, port, queue_cnt): + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_QUEUE_GET_CONFIG_REPLY + + queues_len = 0 + for q in range(queue_cnt): + queues_len += ofproto.OFP_PACKET_QUEUE_SIZE + queues_len += ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE + + msg_len = ofproto.OFP_QUEUE_GET_CONFIG_REPLY_SIZE \ + + queues_len + + # OFP_HEADER_PACK_STR = '!BBHI' + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + # OFP_QUEUE_GET_CONFIG_REPLY_PACK_STR = '!I4x' + fmt = ofproto.OFP_QUEUE_GET_CONFIG_REPLY_PACK_STR + buf += pack(fmt, port) + + queues = [] + for q in range(1, queue_cnt + 1): + # OFP_PACKET_QUEUE_PACK_STR = '!IIH6x' + fmt = ofproto.OFP_PACKET_QUEUE_PACK_STR + queue_id = q * 100 + queue_port = q + queue_len = ofproto.OFP_PACKET_QUEUE_SIZE \ + + ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE + buf += pack(fmt, queue_id, queue_port, queue_len) + + # OFP_QUEUE_PROP_HEADER_PACK_STR = '!HH4x' + fmt = ofproto.OFP_QUEUE_PROP_HEADER_PACK_STR + prop_type = ofproto.OFPQT_MIN_RATE + prop_len = ofproto.OFP_QUEUE_PROP_MIN_RATE_SIZE + buf += pack(fmt, prop_type, prop_len) + + # OFP_QUEUE_PROP_MIN_RATE_PACK_STR = '!H6x' + fmt = ofproto.OFP_QUEUE_PROP_MIN_RATE_PACK_STR + prop_rate = q * 10 + buf += pack(fmt, prop_rate) + + queue = {'queue_id': queue_id, 'queue_port': queue_port, + 'queue_len': queue_len, 'prop_type': prop_type, + 'prop_len': prop_len, 'prop_rate': prop_rate} + queues.append(queue) + + res = OFPQueueGetConfigReply.parser(object, version, msg_type, + msg_len, xid, buf) + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + eq_(port, res.port) + eq_(queue_cnt, len(res.queues)) + + for i, val in enumerate(res.queues): + c = queues[i] + eq_(c['queue_id'], val.queue_id) + eq_(c['queue_port'], val.port) + eq_(c['queue_len'], val.len) + eq_(1, len(val.properties)) + + prop = val.properties[0] + eq_(c['prop_type'], prop.property) + eq_(c['prop_len'], prop.len) + eq_(c['prop_rate'], prop.rate) + + def test_parser_mid(self): + self._test_parser(2495926989, 65037, 2) + + def test_parser_max(self): + # total msg_len = 65520 + self._test_parser(0xffffffff, 0xffffffff, 2047) + + def test_parser_min(self): + self._test_parser(0, 0, 0) + + +class TestOFPBarrierRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPBarrierRequest + """ + def test_serialize(self): + c = OFPBarrierRequest(_Datapath) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_BARRIER_REQUEST, c.msg_type) + eq_(ofproto.OFP_HEADER_SIZE, c.msg_len) + eq_(0, c.xid) + + fmt = ofproto.OFP_HEADER_PACK_STR + res = unpack(fmt, six.binary_type(c.buf)) + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_BARRIER_REQUEST, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, c.xid) + + +class TestOFPBarrierReply(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPBarrierReply + """ + + def _test_parser(self, xid): + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_BARRIER_REPLY + msg_len = ofproto.OFP_HEADER_SIZE + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + res = OFPBarrierReply.parser(object, version, msg_type, + msg_len, xid, buf) + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + + def test_parser_mid(self): + self._test_parser(2147483648) + + def test_parser_max(self): + self._test_parser(0xffffffff) + + def test_parser_min(self): + self._test_parser(0) + + +class TestOFPRoleRequest(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPRoleRequest + """ + + # OFP_ROLE_REQUEST_PACK_STR + # '!I4xQ'...role, pad(4), generation_id + role = 2147483648 + generation_id = 1270985291017894273 + + def test_init(self): + c = OFPRoleRequest(_Datapath, self.role, self.generation_id) + eq_(self.role, c.role) + eq_(self.generation_id, c.generation_id) + + def _test_serialize(self, role, generation_id): + c = OFPRoleRequest(_Datapath, role, generation_id) + c.serialize() + + eq_(ofproto.OFP_VERSION, c.version) + eq_(ofproto.OFPT_ROLE_REQUEST, c.msg_type) + eq_(0, c.xid) + + fmt = '!' \ + + ofproto.OFP_HEADER_PACK_STR.replace('!', '') \ + + ofproto.OFP_ROLE_REQUEST_PACK_STR.replace('!', '') + + res = struct.unpack(fmt, six.binary_type(c.buf)) + + eq_(ofproto.OFP_VERSION, res[0]) + eq_(ofproto.OFPT_ROLE_REQUEST, res[1]) + eq_(len(c.buf), res[2]) + eq_(0, res[3]) + eq_(role, res[4]) + eq_(generation_id, res[5]) + + def test_serialize_mid(self): + self._test_serialize(self.role, self.generation_id) + + def test_serialize_max(self): + role = 0xffffffff + generation_id = 0xffffffffffffffff + self._test_serialize(role, generation_id) + + def test_serialize_min(self): + role = 0 + generation_id = 0 + self._test_serialize(role, generation_id) + + def test_serialize_p1(self): + role = ofproto.OFPCR_ROLE_EQUAL + self._test_serialize(role, self.generation_id) + + def test_serialize_p2(self): + role = ofproto.OFPCR_ROLE_MASTER + self._test_serialize(role, self.generation_id) + + def test_serialize_p3(self): + role = ofproto.OFPCR_ROLE_SLAVE + self._test_serialize(role, self.generation_id) + + +class TestOFPRoleReply(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPRoleReply + """ + + # OFP_ROLE_REQUEST_PACK_STR + # '!I4xQ'...role, pad(4), generation_id + # role = ofproto.OFPCR_ROLE_NOCHANGE + role = 2147483648 + generation_id = 1270985291017894273 + + def _test_parser(self, role, generation_id): + # OFP_HEADER_PACK_STR + version = ofproto.OFP_VERSION + msg_type = ofproto.OFPT_ROLE_REPLY + msg_len = ofproto.OFP_ROLE_REQUEST_SIZE + xid = 2495926989 + + fmt = ofproto.OFP_HEADER_PACK_STR + buf = pack(fmt, version, msg_type, msg_len, xid) + + fmt = ofproto.OFP_ROLE_REQUEST_PACK_STR + buf += pack(fmt, role, generation_id) + + res = OFPRoleReply.parser(object, version, msg_type, msg_len, xid, buf) + + # OFP_HEADER_PACK_STR + eq_(version, res.version) + eq_(msg_type, res.msg_type) + eq_(msg_len, res.msg_len) + eq_(xid, res.xid) + + # OFP_ROLE_REQUEST_PACK_STR + eq_(role, res.role) + eq_(generation_id, res.generation_id) + + def test_parser_mid(self): + self._test_parser(self.role, self.generation_id) + + def test_parser_max(self): + role = 0xffffffff + generation_id = 0xffffffffffffffff + self._test_parser(role, generation_id) + + def test_parser_min(self): + role = ofproto.OFPCR_ROLE_NOCHANGE + generation_id = 0 + self._test_parser(role, generation_id) + + def test_parser_p1(self): + role = ofproto.OFPCR_ROLE_EQUAL + self._test_parser(role, self.generation_id) + + def test_parser_p2(self): + role = ofproto.OFPCR_ROLE_MASTER + self._test_parser(role, self.generation_id) + + def test_parser_p3(self): + role = ofproto.OFPCR_ROLE_SLAVE + self._test_parser(role, self.generation_id) + + +class TestOFPMatch(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPMatch + """ + + def test_init(self): + res = OFPMatch() + + # wc check + eq_(res._wc.metadata_mask, 0) + eq_(res._wc.dl_dst_mask, 0) + eq_(res._wc.dl_src_mask, 0) + eq_(res._wc.vlan_vid_mask, 0) + eq_(res._wc.ipv4_src_mask, 0) + eq_(res._wc.ipv4_dst_mask, 0) + eq_(res._wc.arp_spa_mask, 0) + eq_(res._wc.arp_tpa_mask, 0) + eq_(res._wc.arp_sha_mask, 0) + eq_(res._wc.arp_tha_mask, 0) + eq_(res._wc.ipv6_src_mask, []) + eq_(res._wc.ipv6_dst_mask, []) + eq_(res._wc.ipv6_flabel_mask, 0) + eq_(res._wc.wildcards, (1 << 64) - 1) + + # flow check + eq_(res._flow.in_port, 0) + eq_(res._flow.in_phy_port, 0) + eq_(res._flow.metadata, 0) + eq_(res._flow.dl_dst, mac.DONTCARE) + eq_(res._flow.dl_src, mac.DONTCARE) + eq_(res._flow.dl_type, 0) + eq_(res._flow.vlan_vid, 0) + eq_(res._flow.vlan_pcp, 0) + eq_(res._flow.ip_dscp, 0) + eq_(res._flow.ip_ecn, 0) + eq_(res._flow.ip_proto, 0) + eq_(res._flow.ipv4_src, 0) + eq_(res._flow.ipv4_dst, 0) + eq_(res._flow.tcp_src, 0) + eq_(res._flow.tcp_dst, 0) + eq_(res._flow.udp_src, 0) + eq_(res._flow.udp_dst, 0) + eq_(res._flow.sctp_src, 0) + eq_(res._flow.sctp_dst, 0) + eq_(res._flow.icmpv4_type, 0) + eq_(res._flow.icmpv4_code, 0) + eq_(res._flow.arp_op, 0) + eq_(res._flow.arp_spa, 0) + eq_(res._flow.arp_tpa, 0) + eq_(res._flow.arp_sha, 0) + eq_(res._flow.arp_tha, 0) + eq_(res._flow.ipv6_src, []) + eq_(res._flow.ipv6_dst, []) + eq_(res._flow.ipv6_flabel, 0) + eq_(res._flow.icmpv6_type, 0) + eq_(res._flow.icmpv6_code, 0) + eq_(res._flow.ipv6_nd_target, []) + eq_(res._flow.ipv6_nd_sll, 0) + eq_(res._flow.ipv6_nd_tll, 0) + eq_(res._flow.mpls_label, 0) + eq_(res._flow.mpls_tc, 0) + + # flow check + eq_(res.fields, []) + + def _test_serialize_and_parser(self, match, header, value, mask=None): + cls_ = OFPMatchField._FIELDS_HEADERS.get(header) + pack_str = cls_.pack_str.replace('!', '') + fmt = '!HHI' + pack_str + + # serialize + buf = bytearray() + length = match.serialize(buf, 0) + eq_(length, len(buf)) + if mask and len(buf) > calcsize(fmt): + fmt += pack_str + + res = list(unpack_from(fmt, six.binary_type(buf), 0)[3:]) + if type(value) is list: + res_value = res[:calcsize(pack_str) // 2] + eq_(res_value, value) + if mask: + res_mask = res[calcsize(pack_str) // 2:] + eq_(res_mask, mask) + else: + res_value = res.pop(0) + if cls_.__name__ == 'MTVlanVid': + eq_(res_value, value | ofproto.OFPVID_PRESENT) + else: + eq_(res_value, value) + if mask and res and res[0]: + res_mask = res[0] + eq_(res_mask, mask) + + # parser + res = match.parser(six.binary_type(buf), 0) + eq_(res.type, ofproto.OFPMT_OXM) + eq_(res.fields[0].header, header) + eq_(res.fields[0].value, value) + if mask and res.fields[0].mask is not None: + eq_(res.fields[0].mask, mask) + + # to_jsondict + jsondict = match.to_jsondict() + + # from_jsondict + match2 = match.from_jsondict(jsondict["OFPMatch"]) + buf2 = bytearray() + match2.serialize(buf2, 0) + eq_(str(match), str(match2)) + eq_(buf, buf2) + + def test_parse_unknown_field(self): + buf = bytearray() + pack_utils.msg_pack_into('!HH', buf, 0, ofproto.OFPMT_OXM, 4 + 6) + header = ofproto.oxm_tlv_header(36, 2) + pack_utils.msg_pack_into('!IH', buf, 4, header, 1) + header = ofproto.OXM_OF_ETH_TYPE + pack_utils.msg_pack_into('!IH', buf, 10, header, 1) + + match = OFPMatch() + res = match.parser(six.binary_type(buf), 0) + + # set_in_port + def _test_set_in_port(self, in_port): + header = ofproto.OXM_OF_IN_PORT + match = OFPMatch() + match.set_in_port(in_port) + self._test_serialize_and_parser(match, header, in_port) + + def test_set_in_port_mid(self): + self._test_set_in_port(0xff8) + + def test_set_in_port_max(self): + self._test_set_in_port(0xffffffff) + + def test_set_in_port_min(self): + self._test_set_in_port(0) + + # set_in_phy_port + def _test_set_in_phy_port(self, phy_port): + header = ofproto.OXM_OF_IN_PHY_PORT + match = OFPMatch() + match.set_in_phy_port(phy_port) + self._test_serialize_and_parser(match, header, phy_port) + + def test_set_in_phy_port_mid(self): + self._test_set_in_phy_port(1) + + def test_set_in_phy_port_max(self): + self._test_set_in_phy_port(0xffffffff) + + def test_set_in_phy_port_min(self): + self._test_set_in_phy_port(0) + + # set_metadata + def _test_set_metadata(self, metadata, mask=None): + header = ofproto.OXM_OF_METADATA + match = OFPMatch() + if mask is None: + match.set_metadata(metadata) + else: + if (mask + 1) >> 64 != 1: + header = ofproto.OXM_OF_METADATA_W + match.set_metadata_masked(metadata, mask) + metadata &= mask + self._test_serialize_and_parser(match, header, metadata, mask) + + def test_set_metadata_mid(self): + self._test_set_metadata(0x1212121212121212) + + def test_set_metadata_max(self): + self._test_set_metadata(0xffffffffffffffff) + + def test_set_metadata_min(self): + self._test_set_metadata(0) + + def test_set_metadata_masked_mid(self): + self._test_set_metadata(0x1212121212121212, 0xff00ff00ff00ff00) + + def test_set_metadata_masked_max(self): + self._test_set_metadata(0x1212121212121212, 0xffffffffffffffff) + + def test_set_metadata_masked_min(self): + self._test_set_metadata(0x1212121212121212, 0) + + # set_dl_dst + def _test_set_dl_dst(self, dl_dst, mask=None): + header = ofproto.OXM_OF_ETH_DST + match = OFPMatch() + dl_dst = mac.haddr_to_bin(dl_dst) + if mask is None: + match.set_dl_dst(dl_dst) + else: + header = ofproto.OXM_OF_ETH_DST_W + mask = mac.haddr_to_bin(mask) + match.set_dl_dst_masked(dl_dst, mask) + dl_dst = mac.haddr_bitand(dl_dst, mask) + self._test_serialize_and_parser(match, header, dl_dst, mask) + + def test_set_dl_dst_mid(self): + self._test_set_dl_dst('e2:7a:09:79:0b:0f') + + def test_set_dl_dst_max(self): + self._test_set_dl_dst('ff:ff:ff:ff:ff:ff') + + def test_set_dl_dst_min(self): + self._test_set_dl_dst('00:00:00:00:00:00') + + def test_set_dl_dst_masked_mid(self): + self._test_set_dl_dst('e2:7a:09:79:0b:0f', 'ff:00:ff:00:ff:00') + + def test_set_dl_dst_masked_max(self): + self._test_set_dl_dst('e2:7a:09:79:0b:0f', 'ff:ff:ff:ff:ff:ff') + + def test_set_dl_dst_masked_min(self): + self._test_set_dl_dst('e2:7a:09:79:0b:0f', '00:00:00:00:00:00') + + # set_dl_src + def _test_set_dl_src(self, dl_src, mask=None): + header = ofproto.OXM_OF_ETH_SRC + match = OFPMatch() + dl_src = mac.haddr_to_bin(dl_src) + if mask is None: + match.set_dl_src(dl_src) + else: + header = ofproto.OXM_OF_ETH_SRC_W + mask = mac.haddr_to_bin(mask) + match.set_dl_src_masked(dl_src, mask) + dl_src = mac.haddr_bitand(dl_src, mask) + self._test_serialize_and_parser(match, header, dl_src, mask) + + def test_set_dl_src_mid(self): + self._test_set_dl_src('d0:98:79:b4:75:b5') + + def test_set_dl_src_max(self): + self._test_set_dl_src('ff:ff:ff:ff:ff:ff') + + def test_set_dl_src_min(self): + self._test_set_dl_src('00:00:00:00:00:00') + + def test_set_dl_src_masked_mid(self): + self._test_set_dl_src('d0:98:79:b4:75:b5', 'f0:f0:f0:f0:f0:f0') + + def test_set_dl_src_masked_max(self): + self._test_set_dl_src('d0:98:79:b4:75:b5', 'ff:ff:ff:ff:ff:ff') + + def test_set_dl_src_masked_min(self): + self._test_set_dl_src('d0:98:79:b4:75:b5', '00:00:00:00:00:00') + + # set_dl_type + def _test_set_dl_type(self, value): + header = ofproto.OXM_OF_ETH_TYPE + match = OFPMatch() + match.set_dl_type(value) + self._test_serialize_and_parser(match, header, value) + + def test_set_dl_type_mid(self): + self._test_set_dl_type(0x7fb6) + + def test_set_dl_type_max(self): + self._test_set_dl_type(0xffff) + + def test_set_dl_type_min(self): + self._test_set_dl_type(0) + + def test_set_dl_type_ip(self): + value = ether.ETH_TYPE_IP + self._test_set_dl_type(value) + + def test_set_dl_type_arp(self): + value = ether.ETH_TYPE_ARP + self._test_set_dl_type(value) + + def test_set_dl_type_ipv6(self): + value = ether.ETH_TYPE_IPV6 + self._test_set_dl_type(value) + + def test_set_dl_type_slow(self): + value = ether.ETH_TYPE_SLOW + self._test_set_dl_type(value) + + # set_vlan_vid + def _test_set_vlan_vid(self, vid, mask=None): + header = ofproto.OXM_OF_VLAN_VID + match = OFPMatch() + if mask is None: + match.set_vlan_vid(vid) + else: + header = ofproto.OXM_OF_VLAN_VID_W + match.set_vlan_vid_masked(vid, mask) + self._test_serialize_and_parser(match, header, vid, mask) + + def _test_set_vlan_vid_none(self): + header = ofproto.OXM_OF_VLAN_VID + match = OFPMatch() + match.set_vlan_vid_none() + value = ofproto.OFPVID_NONE + cls_ = OFPMatchField._FIELDS_HEADERS.get(header) + pack_str = cls_.pack_str.replace('!', '') + fmt = '!HHI' + pack_str + + # serialize + buf = bytearray() + length = match.serialize(buf, 0) + eq_(length, len(buf)) + + res = list(unpack_from(fmt, six.binary_type(buf), 0)[3:]) + res_value = res.pop(0) + eq_(res_value, value) + + # parser + res = match.parser(six.binary_type(buf), 0) + eq_(res.type, ofproto.OFPMT_OXM) + eq_(res.fields[0].header, header) + eq_(res.fields[0].value, value) + + # to_jsondict + jsondict = match.to_jsondict() + + # from_jsondict + match2 = match.from_jsondict(jsondict["OFPMatch"]) + buf2 = bytearray() + match2.serialize(buf2, 0) + eq_(str(match), str(match2)) + eq_(buf, buf2) + + def test_set_vlan_vid_mid(self): + self._test_set_vlan_vid(2047) + + def test_set_vlan_vid_max(self): + self._test_set_vlan_vid(0xfff) + + def test_set_vlan_vid_min(self): + self._test_set_vlan_vid(0) + + def test_set_vlan_vid_masked_mid(self): + self._test_set_vlan_vid(2047, 0xf0f) + + def test_set_vlan_vid_masked_max(self): + self._test_set_vlan_vid(2047, 0xfff) + + def test_set_vlan_vid_masked_min(self): + self._test_set_vlan_vid(2047, 0) + + def test_set_vlan_vid_none(self): + self._test_set_vlan_vid_none() + + # set_vlan_pcp + def _test_set_vlan_pcp(self, pcp): + header = ofproto.OXM_OF_VLAN_PCP + match = OFPMatch() + match.set_vlan_pcp(pcp) + self._test_serialize_and_parser(match, header, pcp) + + def test_set_vlan_pcp_mid(self): + self._test_set_vlan_pcp(5) + + def test_set_vlan_pcp_max(self): + self._test_set_vlan_pcp(7) + + def test_set_vlan_pcp_min(self): + self._test_set_vlan_pcp(0) + + # set_ip_dscp + def _test_set_ip_dscp(self, ip_dscp): + header = ofproto.OXM_OF_IP_DSCP + match = OFPMatch() + match.set_ip_dscp(ip_dscp) + self._test_serialize_and_parser(match, header, ip_dscp) + + def test_set_ip_dscp_mid(self): + self._test_set_ip_dscp(36) + + def test_set_ip_dscp_max(self): + self._test_set_ip_dscp(63) + + def test_set_ip_dscp_min(self): + self._test_set_ip_dscp(0) + + # set_ip_ecn + def _test_set_ip_ecn(self, ip_ecn): + header = ofproto.OXM_OF_IP_ECN + match = OFPMatch() + match.set_ip_ecn(ip_ecn) + self._test_serialize_and_parser(match, header, ip_ecn) + + def test_set_ip_ecn_mid(self): + self._test_set_ip_ecn(1) + + def test_set_ip_ecn_max(self): + self._test_set_ip_ecn(3) + + def test_set_ip_ecn_min(self): + self._test_set_ip_ecn(0) + + # set_ip_proto + def _test_set_ip_proto(self, ip_proto): + header = ofproto.OXM_OF_IP_PROTO + match = OFPMatch() + match.set_ip_proto(ip_proto) + self._test_serialize_and_parser(match, header, ip_proto) + + def test_set_ip_proto_mid(self): + self._test_set_ip_proto(6) + + def test_set_ip_proto_max(self): + self._test_set_ip_proto(0xff) + + def test_set_ip_proto_min(self): + self._test_set_ip_proto(0) + + # set_ipv4_src + def _test_set_ipv4_src(self, ip, mask=None): + header = ofproto.OXM_OF_IPV4_SRC + match = OFPMatch() + ip = unpack('!I', socket.inet_aton(ip))[0] + if mask is None: + match.set_ipv4_src(ip) + else: + mask = unpack('!I', socket.inet_aton(mask))[0] + if (mask + 1) >> 32 != 1: + header = ofproto.OXM_OF_IPV4_SRC_W + match.set_ipv4_src_masked(ip, mask) + self._test_serialize_and_parser(match, header, ip, mask) + + def test_set_ipv4_src_mid(self): + self._test_set_ipv4_src('192.168.196.250') + + def test_set_ipv4_src_max(self): + self._test_set_ipv4_src('255.255.255.255') + + def test_set_ipv4_src_min(self): + self._test_set_ipv4_src('0.0.0.0') + + def test_set_ipv4_src_masked_mid(self): + self._test_set_ipv4_src('192.168.196.250', '255.255.0.0') + + def test_set_ipv4_src_masked_max(self): + self._test_set_ipv4_src('192.168.196.250', '255.255.255.255') + + def test_set_ipv4_src_masked_min(self): + self._test_set_ipv4_src('192.168.196.250', '0.0.0.0') + + # set_ipv4_dst + def _test_set_ipv4_dst(self, ip, mask=None): + header = ofproto.OXM_OF_IPV4_DST + match = OFPMatch() + ip = unpack('!I', socket.inet_aton(ip))[0] + if mask is None: + match.set_ipv4_dst(ip) + else: + mask = unpack('!I', socket.inet_aton(mask))[0] + if (mask + 1) >> 32 != 1: + header = ofproto.OXM_OF_IPV4_DST_W + match.set_ipv4_dst_masked(ip, mask) + self._test_serialize_and_parser(match, header, ip, mask) + + def test_set_ipv4_dst_mid(self): + self._test_set_ipv4_dst('192.168.196.250') + + def test_set_ipv4_dst_max(self): + self._test_set_ipv4_dst('255.255.255.255') + + def test_set_ipv4_dst_min(self): + self._test_set_ipv4_dst('0.0.0.0') + + def test_set_ipv4_dst_masked_mid(self): + self._test_set_ipv4_dst('192.168.196.250', '255.255.0.0') + + def test_set_ipv4_dst_masked_max(self): + self._test_set_ipv4_dst('192.168.196.250', '255.255.255.255') + + def test_set_ipv4_dst_masked_min(self): + self._test_set_ipv4_dst('192.168.196.250', '0.0.0.0') + + # set_tcp_src + def _test_set_tcp_src(self, tcp_src): + header = ofproto.OXM_OF_TCP_SRC + match = OFPMatch() + match.set_tcp_src(tcp_src) + self._test_serialize_and_parser(match, header, tcp_src) + + def test_set_tcp_src_mid(self): + self._test_set_tcp_src(1103) + + def test_set_tcp_src_max(self): + self._test_set_tcp_src(0xffff) + + def test_set_tcp_src_min(self): + self._test_set_tcp_src(0) + + # set_tcp_dst + def _test_set_tcp_dst(self, tcp_dst): + header = ofproto.OXM_OF_TCP_DST + match = OFPMatch() + match.set_tcp_dst(tcp_dst) + self._test_serialize_and_parser(match, header, tcp_dst) + + def test_set_tcp_dst_mid(self): + self._test_set_tcp_dst(236) + + def test_set_tcp_dst_max(self): + self._test_set_tcp_dst(0xffff) + + def test_set_tcp_dst_min(self): + self._test_set_tcp_dst(0) + + # set_udp_src + def _test_set_udp_src(self, udp_src): + header = ofproto.OXM_OF_UDP_SRC + match = OFPMatch() + match.set_udp_src(udp_src) + self._test_serialize_and_parser(match, header, udp_src) + + def test_set_udp_src_mid(self): + self._test_set_udp_src(56617) + + def test_set_udp_src_max(self): + self._test_set_udp_src(0xffff) + + def test_set_udp_src_min(self): + self._test_set_udp_src(0) + + # set_udp_dst + def _test_set_udp_dst(self, udp_dst): + header = ofproto.OXM_OF_UDP_DST + match = OFPMatch() + match.set_udp_dst(udp_dst) + self._test_serialize_and_parser(match, header, udp_dst) + + def test_set_udp_dst_mid(self): + self._test_set_udp_dst(61278) + + def test_set_udp_dst_max(self): + self._test_set_udp_dst(0xffff) + + def test_set_udp_dst_min(self): + self._test_set_udp_dst(0) + + # set_sctp_src + def _test_set_sctp_src(self, sctp_src): + header = ofproto.OXM_OF_SCTP_SRC + match = OFPMatch() + match.set_sctp_src(sctp_src) + self._test_serialize_and_parser(match, header, sctp_src) + + def test_set_sctp_src_mid(self): + self._test_set_sctp_src(9999) + + def test_set_sctp_src_max(self): + self._test_set_sctp_src(0xffff) + + def test_set_sctp_src_min(self): + self._test_set_sctp_src(0) + + # set_sctp_dst + def _test_set_sctp_dst(self, sctp_dst): + header = ofproto.OXM_OF_SCTP_DST + match = OFPMatch() + match.set_sctp_dst(sctp_dst) + self._test_serialize_and_parser(match, header, sctp_dst) + + def test_set_sctp_dst_mid(self): + self._test_set_sctp_dst(1234) + + def test_set_sctp_dst_max(self): + self._test_set_sctp_dst(0xffff) + + def test_set_sctp_dst_min(self): + self._test_set_sctp_dst(0) + + # set_icmpv4_type + def _test_set_icmpv4_type(self, icmpv4_type): + header = ofproto.OXM_OF_ICMPV4_TYPE + match = OFPMatch() + match.set_icmpv4_type(icmpv4_type) + self._test_serialize_and_parser(match, header, icmpv4_type) + + def test_set_icmpv4_type_mid(self): + self._test_set_icmpv4_type(8) + + def test_set_icmpv4_type_max(self): + self._test_set_icmpv4_type(0xff) + + def test_set_icmpv4_type_min(self): + self._test_set_icmpv4_type(0) + + # set_icmpv4_code + def _test_set_icmpv4_code(self, icmpv4_code): + header = ofproto.OXM_OF_ICMPV4_CODE + match = OFPMatch() + match.set_icmpv4_code(icmpv4_code) + self._test_serialize_and_parser(match, header, icmpv4_code) + + def test_set_icmpv4_code_mid(self): + self._test_set_icmpv4_code(1) + + def test_set_icmpv4_code_max(self): + self._test_set_icmpv4_code(0xff) + + def test_set_icmpv4_code_min(self): + self._test_set_icmpv4_code(0) + + # set_arp_opcode + def _test_set_arp_opcode(self, arp_op): + header = ofproto.OXM_OF_ARP_OP + match = OFPMatch() + match.set_arp_opcode(arp_op) + self._test_serialize_and_parser(match, header, arp_op) + + def test_set_arp_opcode_mid(self): + self._test_set_arp_opcode(1) + + def test_set_arp_opcode_max(self): + self._test_set_arp_opcode(0xffff) + + def test_set_arp_opcode_min(self): + self._test_set_arp_opcode(0) + + # set_arp_spa + def _test_set_arp_spa(self, ip, mask=None): + header = ofproto.OXM_OF_ARP_SPA + match = OFPMatch() + ip = unpack('!I', socket.inet_aton(ip))[0] + if mask is None: + match.set_arp_spa(ip) + else: + mask = unpack('!I', socket.inet_aton(mask))[0] + if (mask + 1) >> 32 != 1: + header = ofproto.OXM_OF_ARP_SPA_W + match.set_arp_spa_masked(ip, mask) + self._test_serialize_and_parser(match, header, ip, mask) + + def test_set_arp_spa_mid(self): + self._test_set_arp_spa('192.168.227.57') + + def test_set_arp_spa_max(self): + self._test_set_arp_spa('255.255.255.255') + + def test_set_arp_spa_min(self): + self._test_set_arp_spa('0.0.0.0') + + def test_set_arp_spa_masked_mid(self): + self._test_set_arp_spa('192.168.227.57', '255.255.0.0') + + def test_set_arp_spa_masked_max(self): + self._test_set_arp_spa('192.168.227.57', '255.255.255.255') + + def test_set_arp_spa_masked_min(self): + self._test_set_arp_spa('192.168.227.57', '0.0.0.0') + + # set_arp_tpa + def _test_set_arp_tpa(self, ip, mask=None): + header = ofproto.OXM_OF_ARP_TPA + match = OFPMatch() + ip = unpack('!I', socket.inet_aton(ip))[0] + if mask is None: + match.set_arp_tpa(ip) + else: + mask = unpack('!I', socket.inet_aton(mask))[0] + if (mask + 1) >> 32 != 1: + header = ofproto.OXM_OF_ARP_TPA_W + match.set_arp_tpa_masked(ip, mask) + self._test_serialize_and_parser(match, header, ip, mask) + + def test_set_arp_tpa_mid(self): + self._test_set_arp_tpa('192.168.227.57') + + def test_set_arp_tpa_max(self): + self._test_set_arp_tpa('255.255.255.255') + + def test_set_arp_tpa_min(self): + self._test_set_arp_tpa('0.0.0.0') + + def test_set_arp_tpa_masked_mid(self): + self._test_set_arp_tpa('192.168.227.57', '255.255.0.0') + + def test_set_arp_tpa_masked_max(self): + self._test_set_arp_tpa('192.168.227.57', '255.255.255.255') + + def test_set_arp_tpa_masked_min(self): + self._test_set_arp_tpa('192.168.227.57', '0.0.0.0') + + # set_arp_sha + def _test_set_arp_sha(self, arp_sha, mask=None): + header = ofproto.OXM_OF_ARP_SHA + match = OFPMatch() + arp_sha = mac.haddr_to_bin(arp_sha) + if mask is None: + match.set_arp_sha(arp_sha) + else: + header = ofproto.OXM_OF_ARP_SHA_W + mask = mac.haddr_to_bin(mask) + match.set_arp_sha_masked(arp_sha, mask) + arp_sha = mac.haddr_bitand(arp_sha, mask) + self._test_serialize_and_parser(match, header, arp_sha, mask) + + def test_set_arp_sha_mid(self): + self._test_set_arp_sha('3e:ec:13:9b:f3:0b') + + def test_set_arp_sha_max(self): + self._test_set_arp_sha('ff:ff:ff:ff:ff:ff') + + def test_set_arp_sha_min(self): + self._test_set_arp_sha('00:00:00:00:00:00') + + def test_set_arp_sha_masked_mid(self): + self._test_set_arp_sha('3e:ec:13:9b:f3:0b', 'ff:ff:ff:00:00:00') + + def test_set_arp_sha_masked_max(self): + self._test_set_arp_sha('3e:ec:13:9b:f3:0b', 'ff:ff:ff:ff:ff:ff') + + def test_set_arp_sha_masked_min(self): + self._test_set_arp_sha('3e:ec:13:9b:f3:0b', '00:00:00:00:00:00') + + # set_arp_tha + def _test_set_arp_tha(self, arp_tha, mask=None): + header = ofproto.OXM_OF_ARP_THA + match = OFPMatch() + arp_tha = mac.haddr_to_bin(arp_tha) + if mask is None: + match.set_arp_tha(arp_tha) + else: + header = ofproto.OXM_OF_ARP_THA_W + mask = mac.haddr_to_bin(mask) + match.set_arp_tha_masked(arp_tha, mask) + arp_tha = mac.haddr_bitand(arp_tha, mask) + self._test_serialize_and_parser(match, header, arp_tha, mask) + + def test_set_arp_tha_mid(self): + self._test_set_arp_tha('83:6c:21:52:49:68') + + def test_set_arp_tha_max(self): + self._test_set_arp_tha('ff:ff:ff:ff:ff:ff') + + def test_set_arp_tha_min(self): + self._test_set_arp_tha('00:00:00:00:00:00') + + def test_set_arp_tha_masked_mid(self): + self._test_set_arp_tha('83:6c:21:52:49:68', 'ff:ff:ff:00:00:00') + + def test_set_arp_tha_masked_max(self): + self._test_set_arp_tha('83:6c:21:52:49:68', 'ff:ff:ff:ff:ff:ff') + + def test_set_arp_tha_masked_min(self): + self._test_set_arp_tha('83:6c:21:52:49:68', '00:00:00:00:00:00') + + # set_ipv6_src + def _test_set_ipv6_src(self, ipv6, mask=None): + header = ofproto.OXM_OF_IPV6_SRC + match = OFPMatch() + ipv6 = [int(x, 16) for x in ipv6.split(":")] + if mask is None: + match.set_ipv6_src(ipv6) + else: + header = ofproto.OXM_OF_IPV6_SRC_W + mask = [int(x, 16) for x in mask.split(":")] + match.set_ipv6_src_masked(ipv6, mask) + ipv6 = [x & y for (x, y) in zip(ipv6, mask)] + self._test_serialize_and_parser(match, header, ipv6, mask) + + def test_set_ipv6_src_mid(self): + ipv6 = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' + self._test_set_ipv6_src(ipv6) + + def test_set_ipv6_src_max(self): + ipv6 = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' + self._test_set_ipv6_src(ipv6) + + def test_set_ipv6_src_min(self): + ipv6 = '0:0:0:0:0:0:0:0' + self._test_set_ipv6_src(ipv6) + + def test_set_ipv6_src_masked_mid(self): + ipv6 = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' + mask = 'ffff:ffff:ffff:ffff:0:0:0:0' + self._test_set_ipv6_src(ipv6, mask) + + def test_set_ipv6_src_masked_max(self): + ipv6 = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' + mask = 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' + self._test_set_ipv6_src(ipv6, mask) + + def test_set_ipv6_src_masked_min(self): + ipv6 = '2001:db8:bd05:1d2:288a:1fc0:1:10ee' + mask = '0:0:0:0:0:0:0:0' + self._test_set_ipv6_src(ipv6, mask) + + # set_ipv6_dst + def _test_set_ipv6_dst(self, ipv6, mask=None): + header = ofproto.OXM_OF_IPV6_DST + match = OFPMatch() + ipv6 = [int(x, 16) for x in ipv6.split(":")] + if mask is None: + match.set_ipv6_dst(ipv6) + else: + header = ofproto.OXM_OF_IPV6_DST_W + mask = [int(x, 16) for x in mask.split(":")] + match.set_ipv6_dst_masked(ipv6, mask) + ipv6 = [x & y for (x, y) in zip(ipv6, mask)] + self._test_serialize_and_parser(match, header, ipv6, mask) + + def test_set_ipv6_dst_mid(self): + ipv6 = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' + self._test_set_ipv6_dst(ipv6) + + def test_set_ipv6_dst_max(self): + ipv6 = ':'.join(['ffff'] * 8) + self._test_set_ipv6_dst(ipv6) + + def test_set_ipv6_dst_min(self): + ipv6 = ':'.join(['0'] * 8) + self._test_set_ipv6_dst(ipv6) + + def test_set_ipv6_dst_mask_mid(self): + ipv6 = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' + mask = ':'.join(['ffff'] * 4 + ['0'] * 4) + self._test_set_ipv6_dst(ipv6, mask) + + def test_set_ipv6_dst_mask_max(self): + ipv6 = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' + mask = ':'.join(['ffff'] * 8) + self._test_set_ipv6_dst(ipv6, mask) + + def test_set_ipv6_dst_mask_min(self): + ipv6 = 'e9e8:9ea5:7d67:82cc:ca54:1fc0:2d24:f038' + mask = ':'.join(['0'] * 8) + self._test_set_ipv6_dst(ipv6, mask) + + # set_ipv6_flabel + def _test_set_ipv6_flabel(self, flabel, mask=None): + header = ofproto.OXM_OF_IPV6_FLABEL + match = OFPMatch() + if mask is None: + match.set_ipv6_flabel(flabel) + else: + header = ofproto.OXM_OF_IPV6_FLABEL_W + match.set_ipv6_flabel_masked(flabel, mask) + self._test_serialize_and_parser(match, header, flabel, mask) + + def test_set_ipv6_flabel_mid(self): + self._test_set_ipv6_flabel(0xc5384) + + def test_set_ipv6_flabel_max(self): + self._test_set_ipv6_flabel(0xfffff) + + def test_set_ipv6_flabel_min(self): + self._test_set_ipv6_flabel(0) + + def test_set_ipv6_flabel_masked_mid(self): + self._test_set_ipv6_flabel(0xc5384, 0xfff00) + + def test_set_ipv6_flabel_masked_max(self): + self._test_set_ipv6_flabel(0xc5384, 0xfffff) + + def test_set_ipv6_flabel_masked_min(self): + self._test_set_ipv6_flabel(0xc5384, 0) + + # set_icmpv6_type + def _test_set_icmpv6_type(self, icmpv6_type): + header = ofproto.OXM_OF_ICMPV6_TYPE + match = OFPMatch() + match.set_icmpv6_type(icmpv6_type) + self._test_serialize_and_parser(match, header, icmpv6_type) + + def test_set_icmpv6_type_mid(self): + self._test_set_icmpv6_type(129) + + def test_set_icmpv6_type_max(self): + self._test_set_icmpv6_type(0xff) + + def test_set_icmpv6_type_min(self): + self._test_set_icmpv6_type(0) + + # set_icmpv6_code + def _test_set_icmpv6_code(self, icmpv6_code): + header = ofproto.OXM_OF_ICMPV6_CODE + match = OFPMatch() + match.set_icmpv6_code(icmpv6_code) + self._test_serialize_and_parser(match, header, icmpv6_code) + + def test_set_icmpv6_code_mid(self): + self._test_set_icmpv6_code(1) + + def test_set_icmpv6_code_max(self): + self._test_set_icmpv6_code(0xff) + + def test_set_icmpv6_code_min(self): + self._test_set_icmpv6_code(0) + + # set_ipv6_nd_target + def _test_set_ipv6_nd_target(self, ipv6): + header = ofproto.OXM_OF_IPV6_ND_TARGET + match = OFPMatch() + ipv6 = [int(x, 16) for x in ipv6.split(":")] + match.set_ipv6_nd_target(ipv6) + self._test_serialize_and_parser(match, header, ipv6) + + def test_set_ipv6_nd_target_mid(self): + ip = '5420:db3f:921b:3e33:2791:98f:dd7f:2e19' + self._test_set_ipv6_nd_target(ip) + + def test_set_ipv6_nd_target_max(self): + ip = ':'.join(['ffff'] * 8) + self._test_set_ipv6_nd_target(ip) + + def test_set_ipv6_nd_target_min(self): + ip = ':'.join(['0'] * 8) + self._test_set_ipv6_nd_target(ip) + + # set_ipv6_nd_sll + def _test_set_ipv6_nd_sll(self, nd_sll): + header = ofproto.OXM_OF_IPV6_ND_SLL + match = OFPMatch() + nd_sll = mac.haddr_to_bin(nd_sll) + match.set_ipv6_nd_sll(nd_sll) + self._test_serialize_and_parser(match, header, nd_sll) + + def test_set_ipv6_nd_sll_mid(self): + self._test_set_ipv6_nd_sll('93:6d:d0:d4:e8:36') + + def test_set_ipv6_nd_sll_max(self): + self._test_set_ipv6_nd_sll('ff:ff:ff:ff:ff:ff') + + def test_set_ipv6_nd_sll_min(self): + self._test_set_ipv6_nd_sll('00:00:00:00:00:00') + + # set_ipv6_nd_tll + def _test_set_ipv6_nd_tll(self, nd_tll): + header = ofproto.OXM_OF_IPV6_ND_TLL + match = OFPMatch() + nd_tll = mac.haddr_to_bin(nd_tll) + match.set_ipv6_nd_tll(nd_tll) + self._test_serialize_and_parser(match, header, nd_tll) + + def test_set_ipv6_nd_tll_mid(self): + self._test_set_ipv6_nd_tll('18:f6:66:b6:f1:b3') + + def test_set_ipv6_nd_tll_max(self): + self._test_set_ipv6_nd_tll('ff:ff:ff:ff:ff:ff') + + def test_set_ipv6_nd_tll_min(self): + self._test_set_ipv6_nd_tll('00:00:00:00:00:00') + + # set_mpls_label + def _test_set_mpls_label(self, mpls_label): + header = ofproto.OXM_OF_MPLS_LABEL + match = OFPMatch() + match.set_mpls_label(mpls_label) + self._test_serialize_and_parser(match, header, mpls_label) + + def test_set_mpls_label_mid(self): + self._test_set_mpls_label(2144) + + def test_set_mpls_label_max(self): + self._test_set_mpls_label(0xfffff) + + def test_set_mpls_label_min(self): + self._test_set_mpls_label(0) + + # set_mpls_tc + def _test_set_mpls_tc(self, mpls_tc): + header = ofproto.OXM_OF_MPLS_TC + match = OFPMatch() + match.set_mpls_tc(mpls_tc) + self._test_serialize_and_parser(match, header, mpls_tc) + + def test_set_mpls_tc_mid(self): + self._test_set_mpls_tc(3) + + def test_set_mpls_tc_max(self): + self._test_set_mpls_tc(7) + + def test_set_mpls_tc_min(self): + self._test_set_mpls_tc(0) + + +class TestOFPMatchField(unittest.TestCase): + """ Test case for ofproto_v1_2_parser.OFPMatchField + """ + + def test_init_hasmask_true(self): + header = 0x0100 + + res = OFPMatchField(header) + + eq_(res.header, header) + eq_(res.n_bytes, (header & 0xff) // 2) + eq_(res.length, 0) + + def test_init_hasmask_false(self): + header = 0x0000 + + res = OFPMatchField(header) + + eq_(res.header, header) + eq_(res.n_bytes, header & 0xff) + eq_(res.length, 0) diff --git a/tests/unit/ofproto/test_parser_v13.py b/tests/unit/ofproto/test_parser_v13.py new file mode 100644 index 00000000..265b28e4 --- /dev/null +++ b/tests/unit/ofproto/test_parser_v13.py @@ -0,0 +1,164 @@ +# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import six +import socket +from struct import * +from nose.tools import * +from ryu.ofproto.ofproto_v1_3_parser import * +from ryu.ofproto import ofproto_v1_3_parser +from ryu.ofproto import ofproto_v1_3 +from ryu.ofproto import ofproto_protocol +from ryu.ofproto import ether +from ryu.ofproto.ofproto_parser import MsgBase +from ryu import utils +from ryu.lib import addrconv + +LOG = logging.getLogger('test_ofproto_v13') + + +_Datapath = ofproto_protocol.ProtocolDesc(version=ofproto_v1_3.OFP_VERSION) + + +class TestOFPMatch(unittest.TestCase): + + """ Test case for ofproto_v1_3_parser.OFPMatch + """ + + def test_init(self): + res = OFPMatch() + + # wc check + eq_(res._wc.vlan_vid_mask, 0) + + # flow check + eq_(res._flow.vlan_vid, 0) + + def _test_serialize_and_parser(self, match, header, value, mask=None): + cls_ = OFPMatchField._FIELDS_HEADERS.get(header) + pack_str = cls_.pack_str.replace('!', '') + fmt = '!HHI' + pack_str + + # serialize + buf = bytearray() + length = match.serialize(buf, 0) + eq_(length, len(buf)) + if mask and len(buf) > calcsize(fmt): + fmt += pack_str + + res = list(unpack_from(fmt, six.binary_type(buf), 0)[3:]) + if type(value) is list: + res_value = res[:calcsize(pack_str) // 2] + eq_(res_value, value) + if mask: + res_mask = res[calcsize(pack_str) // 2:] + eq_(res_mask, mask) + else: + res_value = res.pop(0) + if cls_.__name__ == 'MTVlanVid': + eq_(res_value, value | ofproto.OFPVID_PRESENT) + else: + eq_(res_value, value) + if mask and res and res[0]: + res_mask = res[0] + eq_(res_mask, mask) + + # parser + res = match.parser(six.binary_type(buf), 0) + eq_(res.type, ofproto.OFPMT_OXM) + eq_(res.fields[0].header, header) + eq_(res.fields[0].value, value) + if mask and res.fields[0].mask is not None: + eq_(res.fields[0].mask, mask) + + # to_jsondict + jsondict = match.to_jsondict() + + # from_jsondict + match2 = match.from_jsondict(jsondict["OFPMatch"]) + buf2 = bytearray() + match2.serialize(buf2, 0) + eq_(str(match), str(match2)) + eq_(buf, buf2) + + # set_vlan_vid + def _test_set_vlan_vid(self, vid, mask=None): + header = ofproto.OXM_OF_VLAN_VID + match = OFPMatch() + if mask is None: + match.set_vlan_vid(vid) + else: + header = ofproto.OXM_OF_VLAN_VID_W + match.set_vlan_vid_masked(vid, mask) + self._test_serialize_and_parser(match, header, vid, mask) + + def _test_set_vlan_vid_none(self): + header = ofproto.OXM_OF_VLAN_VID + match = OFPMatch() + match.set_vlan_vid_none() + value = ofproto.OFPVID_NONE + cls_ = OFPMatchField._FIELDS_HEADERS.get(header) + pack_str = cls_.pack_str.replace('!', '') + fmt = '!HHI' + pack_str + + # serialize + buf = bytearray() + length = match.serialize(buf, 0) + eq_(length, len(buf)) + + res = list(unpack_from(fmt, six.binary_type(buf), 0)[3:]) + res_value = res.pop(0) + eq_(res_value, value) + + # parser + res = match.parser(six.binary_type(buf), 0) + eq_(res.type, ofproto.OFPMT_OXM) + eq_(res.fields[0].header, header) + eq_(res.fields[0].value, value) + + # to_jsondict + jsondict = match.to_jsondict() + + # from_jsondict + match2 = match.from_jsondict(jsondict["OFPMatch"]) + buf2 = bytearray() + match2.serialize(buf2, 0) + eq_(str(match), str(match2)) + eq_(buf, buf2) + + def test_set_vlan_vid_mid(self): + self._test_set_vlan_vid(2047) + + def test_set_vlan_vid_max(self): + self._test_set_vlan_vid(0xfff) + + def test_set_vlan_vid_min(self): + self._test_set_vlan_vid(0) + + def test_set_vlan_vid_masked_mid(self): + self._test_set_vlan_vid(2047, 0xf0f) + + def test_set_vlan_vid_masked_max(self): + self._test_set_vlan_vid(2047, 0xfff) + + def test_set_vlan_vid_masked_min(self): + self._test_set_vlan_vid(2047, 0) + + def test_set_vlan_vid_none(self): + self._test_set_vlan_vid_none() diff --git a/tests/unit/packet/__init__.py b/tests/unit/packet/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/packet/test_arp.py b/tests/unit/packet/test_arp.py new file mode 100644 index 00000000..40e28131 --- /dev/null +++ b/tests/unit/packet/test_arp.py @@ -0,0 +1,183 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import struct +from struct import * +from nose.tools import * +from ryu.ofproto import ether +from ryu.lib.packet.ethernet import ethernet +from ryu.lib.packet.packet import Packet +from ryu.lib.packet.arp import arp +from ryu.lib.packet.vlan import vlan +from ryu.lib import addrconv + + +LOG = logging.getLogger('test_arp') + + +class Test_arp(unittest.TestCase): + """ Test case for arp + """ + + hwtype = 1 + proto = 0x0800 + hlen = 6 + plen = 4 + opcode = 1 + src_mac = '00:07:0d:af:f4:54' + src_ip = '24.166.172.1' + dst_mac = '00:00:00:00:00:00' + dst_ip = '24.166.173.159' + + fmt = arp._PACK_STR + buf = pack(fmt, hwtype, proto, hlen, plen, opcode, + addrconv.mac.text_to_bin(src_mac), + addrconv.ipv4.text_to_bin(src_ip), + addrconv.mac.text_to_bin(dst_mac), + addrconv.ipv4.text_to_bin(dst_ip)) + + a = arp(hwtype, proto, hlen, plen, opcode, src_mac, src_ip, dst_mac, + dst_ip) + + def setUp(self): + pass + + def tearDown(self): + pass + + def find_protocol(self, pkt, name): + for p in pkt.protocols: + if p.protocol_name == name: + return p + + def test_init(self): + eq_(self.hwtype, self.a.hwtype) + eq_(self.proto, self.a.proto) + eq_(self.hlen, self.a.hlen) + eq_(self.plen, self.a.plen) + eq_(self.opcode, self.a.opcode) + eq_(self.src_mac, self.a.src_mac) + eq_(self.src_ip, self.a.src_ip) + eq_(self.dst_mac, self.a.dst_mac) + eq_(self.dst_ip, self.a.dst_ip) + + def test_parser(self): + _res = self.a.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + + eq_(res.hwtype, self.hwtype) + eq_(res.proto, self.proto) + eq_(res.hlen, self.hlen) + eq_(res.plen, self.plen) + eq_(res.opcode, self.opcode) + eq_(res.src_mac, self.src_mac) + eq_(res.src_ip, self.src_ip) + eq_(res.dst_mac, self.dst_mac) + eq_(res.dst_ip, self.dst_ip) + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.a.serialize(data, prev) + + fmt = arp._PACK_STR + res = struct.unpack(fmt, buf) + + eq_(res[0], self.hwtype) + eq_(res[1], self.proto) + eq_(res[2], self.hlen) + eq_(res[3], self.plen) + eq_(res[4], self.opcode) + eq_(res[5], addrconv.mac.text_to_bin(self.src_mac)) + eq_(res[6], addrconv.ipv4.text_to_bin(self.src_ip)) + eq_(res[7], addrconv.mac.text_to_bin(self.dst_mac)) + eq_(res[8], addrconv.ipv4.text_to_bin(self.dst_ip)) + + def _build_arp(self, vlan_enabled): + if vlan_enabled is True: + ethertype = ether.ETH_TYPE_8021Q + v = vlan(1, 1, 3, ether.ETH_TYPE_ARP) + else: + ethertype = ether.ETH_TYPE_ARP + e = ethernet(self.dst_mac, self.src_mac, ethertype) + p = Packet() + + p.add_protocol(e) + if vlan_enabled is True: + p.add_protocol(v) + p.add_protocol(self.a) + p.serialize() + return p + + def test_build_arp_vlan(self): + p = self._build_arp(True) + + e = self.find_protocol(p, "ethernet") + ok_(e) + eq_(e.ethertype, ether.ETH_TYPE_8021Q) + + v = self.find_protocol(p, "vlan") + ok_(v) + eq_(v.ethertype, ether.ETH_TYPE_ARP) + + a = self.find_protocol(p, "arp") + ok_(a) + + eq_(a.hwtype, self.hwtype) + eq_(a.proto, self.proto) + eq_(a.hlen, self.hlen) + eq_(a.plen, self.plen) + eq_(a.opcode, self.opcode) + eq_(a.src_mac, self.src_mac) + eq_(a.src_ip, self.src_ip) + eq_(a.dst_mac, self.dst_mac) + eq_(a.dst_ip, self.dst_ip) + + def test_build_arp_novlan(self): + p = self._build_arp(False) + + e = self.find_protocol(p, "ethernet") + ok_(e) + eq_(e.ethertype, ether.ETH_TYPE_ARP) + + a = self.find_protocol(p, "arp") + ok_(a) + + eq_(a.hwtype, self.hwtype) + eq_(a.proto, self.proto) + eq_(a.hlen, self.hlen) + eq_(a.plen, self.plen) + eq_(a.opcode, self.opcode) + eq_(a.src_mac, self.src_mac) + eq_(a.src_ip, self.src_ip) + eq_(a.dst_mac, self.dst_mac) + eq_(a.dst_ip, self.dst_ip) + + @raises(Exception) + def test_malformed_arp(self): + m_short_buf = self.buf[1:arp._MIN_LEN] + arp.parser(m_short_buf) + + def test_json(self): + jsondict = self.a.to_jsondict() + a = arp.from_jsondict(jsondict['arp']) + eq_(str(self.a), str(a)) diff --git a/tests/unit/packet/test_bfd.py b/tests/unit/packet/test_bfd.py new file mode 100644 index 00000000..d33949cc --- /dev/null +++ b/tests/unit/packet/test_bfd.py @@ -0,0 +1,320 @@ +# Copyright (C) 2014 Xinguard, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +import logging +import struct +import inspect +from nose.tools import ok_, eq_, nottest + +from ryu.ofproto import ether +from ryu.ofproto import inet +from ryu.lib.packet import packet +from ryu.lib.packet import ethernet +from ryu.lib.packet import ipv4 +from ryu.lib.packet import udp +from ryu.lib.packet import bfd +from ryu.lib import addrconv + +LOG = logging.getLogger(__name__) + + +class TestBFD(unittest.TestCase): + def setUp(self): + # BFD packet without authentication. + self.data = b'\xb0\xa8\x6e\x18\xb8\x08\x64\x87' \ + + b'\x88\xe9\xcb\xc8\x08\x00\x45\xc0' \ + + b'\x00\x34\x68\x49\x00\x00\xff\x11' \ + + b'\xf4\x73\xac\x1c\x03\x01\xac\x1c' \ + + b'\x03\x02\xc0\x00\x0e\xc8\x00\x20' \ + + b'\xd9\x02\x21\xc0\x03\x18\x00\x00' \ + + b'\x00\x06\x00\x00\x00\x07\x00\x00' \ + + b'\xea\x60\x00\x00\xea\x60\x00\x00' \ + + b'\x00\x00' + + # BFD packet using simple password authentication. + self.data_auth_simple = b'\x08\x00\x27\xd1\x95\x7c\x08\x00' \ + + b'\x27\xed\x54\x41\x08\x00\x45\xc0' \ + + b'\x00\x3d\x0c\x90\x00\x00\xff\x11' \ + + b'\xbb\x0b\xc0\xa8\x39\x02\xc0\xa8' \ + + b'\x39\x01\xc0\x00\x0e\xc8\x00\x29' \ + + b'\x46\x35\x20\x44\x03\x21\x00\x00' \ + + b'\x00\x01\x00\x00\x00\x00\x00\x0f' \ + + b'\x42\x40\x00\x0f\x42\x40\x00\x00' \ + + b'\x00\x00\x01\x09\x02\x73\x65\x63' \ + + b'\x72\x65\x74' + + # BFD packet using md5 authentication. + self.data_auth_md5 = b'\x08\x00\x27\xd1\x95\x7c\x08\x00' \ + + b'\x27\xed\x54\x41\x08\x00\x45\xc0' \ + + b'\x00\x4c\x0c\x44\x00\x00\xff\x11' \ + + b'\xbb\x48\xc0\xa8\x39\x02\xc0\xa8' \ + + b'\x39\x01\xc0\x00\x0e\xc8\x00\x38' \ + + b'\x51\xbc\x20\x44\x03\x30\x00\x00' \ + + b'\x00\x01\x00\x00\x00\x00\x00\x0f' \ + + b'\x42\x40\x00\x0f\x42\x40\x00\x00' \ + + b'\x00\x00\x02\x18\x02\x00\x00\x00' \ + + b'\x41\xdb\x66\xa8\xf9\x25\x5a\x8b' \ + + b'\xcb\x7e\x4b\xec\x25\xa6\x2c\x23' \ + + b'\xda\x0f' + + # BFD packet using SHA1 authentication. + self.data_auth_sha1 = b'\x08\x00\x27\xd1\x95\x7c\x08\x00' \ + + b'\x27\xed\x54\x41\x08\x00\x45\xc0' \ + + b'\x00\x50\x0b\x90\x00\x00\xff\x11' \ + + b'\xbb\xf8\xc0\xa8\x39\x02\xc0\xa8' \ + + b'\x39\x01\xc0\x00\x0e\xc8\x00\x3c' \ + + b'\xb9\x92\x20\x44\x03\x34\x00\x00' \ + + b'\x00\x01\x00\x00\x00\x00\x00\x0f' \ + + b'\x42\x40\x00\x0f\x42\x40\x00\x00' \ + + b'\x00\x00\x04\x1c\x02\x00\x00\x00' \ + + b'\x41\xb1\x46\x20\x10\x81\x03\xd7' \ + + b'\xf4\xde\x87\x61\x4c\x24\x61\x1f' \ + + b'\x3c\xc1\x6a\x00\x69\x23' + + # BFD Key chain {auth_key_id: auth_key/password} + self.auth_keys = {2: b"secret"} + + def tearDown(self): + pass + + def test_parse(self): + buf = self.data + pkt = packet.Packet(buf) + i = iter(pkt) + + eq_(type(next(i)), ethernet.ethernet) + eq_(type(next(i)), ipv4.ipv4) + eq_(type(next(i)), udp.udp) + eq_(type(bfd.bfd.parser(next(i))[0]), bfd.bfd) + + def test_parse_with_auth_simple(self): + buf = self.data_auth_simple + pkt = packet.Packet(buf) + i = iter(pkt) + + eq_(type(next(i)), ethernet.ethernet) + eq_(type(next(i)), ipv4.ipv4) + eq_(type(next(i)), udp.udp) + + bfd_obj = bfd.bfd.parser(next(i))[0] + eq_(type(bfd_obj), bfd.bfd) + eq_(type(bfd_obj.auth_cls), bfd.SimplePassword) + ok_(bfd_obj.authenticate(self.auth_keys)) + + def test_parse_with_auth_md5(self): + buf = self.data_auth_md5 + pkt = packet.Packet(buf) + i = iter(pkt) + + eq_(type(next(i)), ethernet.ethernet) + eq_(type(next(i)), ipv4.ipv4) + eq_(type(next(i)), udp.udp) + + bfd_obj = bfd.bfd.parser(next(i))[0] + eq_(type(bfd_obj), bfd.bfd) + eq_(type(bfd_obj.auth_cls), bfd.KeyedMD5) + ok_(bfd_obj.authenticate(self.auth_keys)) + + def test_parse_with_auth_sha1(self): + buf = self.data_auth_sha1 + pkt = packet.Packet(buf) + i = iter(pkt) + + eq_(type(next(i)), ethernet.ethernet) + eq_(type(next(i)), ipv4.ipv4) + eq_(type(next(i)), udp.udp) + + bfd_obj = bfd.bfd.parser(next(i))[0] + eq_(type(bfd_obj), bfd.bfd) + eq_(type(bfd_obj.auth_cls), bfd.KeyedSHA1) + ok_(bfd_obj.authenticate(self.auth_keys)) + + def test_serialize(self): + pkt = packet.Packet() + + eth_pkt = ethernet.ethernet('b0:a8:6e:18:b8:08', '64:87:88:e9:cb:c8') + pkt.add_protocol(eth_pkt) + + ip_pkt = ipv4.ipv4(src='172.28.3.1', dst='172.28.3.2', tos=192, + identification=26697, proto=inet.IPPROTO_UDP) + pkt.add_protocol(ip_pkt) + + udp_pkt = udp.udp(49152, 3784) + pkt.add_protocol(udp_pkt) + + bfd_pkt = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_CTRL_DETECT_TIME_EXPIRED, + state=bfd.BFD_STATE_UP, detect_mult=3, my_discr=6, + your_discr=7, desired_min_tx_interval=60000, + required_min_rx_interval=60000, + required_min_echo_rx_interval=0) + pkt.add_protocol(bfd_pkt) + + eq_(len(pkt.protocols), 4) + + pkt.serialize() + eq_(pkt.data, self.data) + + def test_serialize_with_auth_simple(self): + pkt = packet.Packet() + + eth_pkt = ethernet.ethernet('08:00:27:d1:95:7c', '08:00:27:ed:54:41') + pkt.add_protocol(eth_pkt) + + ip_pkt = ipv4.ipv4(src='192.168.57.2', dst='192.168.57.1', tos=192, + identification=3216, proto=inet.IPPROTO_UDP) + pkt.add_protocol(ip_pkt) + + udp_pkt = udp.udp(49152, 3784) + pkt.add_protocol(udp_pkt) + + auth_cls = bfd.SimplePassword(auth_key_id=2, + password=self.auth_keys[2]) + + bfd_pkt = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, + flags=bfd.BFD_FLAG_AUTH_PRESENT, + state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, + your_discr=0, desired_min_tx_interval=1000000, + required_min_rx_interval=1000000, + required_min_echo_rx_interval=0, + auth_cls=auth_cls) + + pkt.add_protocol(bfd_pkt) + + eq_(len(pkt.protocols), 4) + + pkt.serialize() + eq_(pkt.data, self.data_auth_simple) + + def test_serialize_with_auth_md5(self): + pkt = packet.Packet() + + eth_pkt = ethernet.ethernet('08:00:27:d1:95:7c', '08:00:27:ed:54:41') + pkt.add_protocol(eth_pkt) + + ip_pkt = ipv4.ipv4(src='192.168.57.2', dst='192.168.57.1', tos=192, + identification=3140, proto=inet.IPPROTO_UDP) + pkt.add_protocol(ip_pkt) + + udp_pkt = udp.udp(49152, 3784) + pkt.add_protocol(udp_pkt) + + auth_cls = bfd.KeyedMD5(auth_key_id=2, seq=16859, + auth_key=self.auth_keys[2]) + + bfd_pkt = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, + flags=bfd.BFD_FLAG_AUTH_PRESENT, + state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, + your_discr=0, desired_min_tx_interval=1000000, + required_min_rx_interval=1000000, + required_min_echo_rx_interval=0, + auth_cls=auth_cls) + + pkt.add_protocol(bfd_pkt) + + eq_(len(pkt.protocols), 4) + + pkt.serialize() + eq_(pkt.data, self.data_auth_md5) + + def test_serialize_with_auth_sha1(self): + pkt = packet.Packet() + + eth_pkt = ethernet.ethernet('08:00:27:d1:95:7c', '08:00:27:ed:54:41') + pkt.add_protocol(eth_pkt) + + ip_pkt = ipv4.ipv4(src='192.168.57.2', dst='192.168.57.1', tos=192, + identification=2960, proto=inet.IPPROTO_UDP) + pkt.add_protocol(ip_pkt) + + udp_pkt = udp.udp(49152, 3784) + pkt.add_protocol(udp_pkt) + + auth_cls = bfd.KeyedSHA1(auth_key_id=2, seq=16817, + auth_key=self.auth_keys[2]) + + bfd_pkt = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, + flags=bfd.BFD_FLAG_AUTH_PRESENT, + state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, + your_discr=0, desired_min_tx_interval=1000000, + required_min_rx_interval=1000000, + required_min_echo_rx_interval=0, + auth_cls=auth_cls) + + pkt.add_protocol(bfd_pkt) + + eq_(len(pkt.protocols), 4) + + pkt.serialize() + eq_(pkt.data, self.data_auth_sha1) + + def test_json(self): + bfd1 = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_CTRL_DETECT_TIME_EXPIRED, + state=bfd.BFD_STATE_UP, detect_mult=3, my_discr=6, + your_discr=7, desired_min_tx_interval=60000, + required_min_rx_interval=60000, + required_min_echo_rx_interval=0) + + jsondict = bfd1.to_jsondict() + bfd2 = bfd.bfd.from_jsondict(jsondict['bfd']) + eq_(str(bfd1), str(bfd2)) + + def test_json_with_auth_simple(self): + auth_cls = bfd.SimplePassword(auth_key_id=2, + password=self.auth_keys[2]) + + bfd1 = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, + flags=bfd.BFD_FLAG_AUTH_PRESENT, + state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, + your_discr=0, desired_min_tx_interval=1000000, + required_min_rx_interval=1000000, + required_min_echo_rx_interval=0, + auth_cls=auth_cls) + + jsondict = bfd1.to_jsondict() + bfd2 = bfd.bfd.from_jsondict(jsondict['bfd']) + eq_(str(bfd1), str(bfd2)) + + def test_json_with_auth_md5(self): + auth_cls = bfd.KeyedMD5(auth_key_id=2, seq=16859, + auth_key=self.auth_keys[2]) + + bfd1 = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, + flags=bfd.BFD_FLAG_AUTH_PRESENT, + state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, + your_discr=0, desired_min_tx_interval=1000000, + required_min_rx_interval=1000000, + required_min_echo_rx_interval=0, + auth_cls=auth_cls) + + jsondict = bfd1.to_jsondict() + bfd2 = bfd.bfd.from_jsondict(jsondict['bfd']) + eq_(str(bfd1), str(bfd2)) + + def test_json_with_auth_sha1(self): + auth_cls = bfd.KeyedSHA1(auth_key_id=2, seq=16859, + auth_key=self.auth_keys[2]) + + bfd1 = bfd.bfd(ver=1, diag=bfd.BFD_DIAG_NO_DIAG, + flags=bfd.BFD_FLAG_AUTH_PRESENT, + state=bfd.BFD_STATE_DOWN, detect_mult=3, my_discr=1, + your_discr=0, desired_min_tx_interval=1000000, + required_min_rx_interval=1000000, + required_min_echo_rx_interval=0, + auth_cls=auth_cls) + + jsondict = bfd1.to_jsondict() + bfd2 = bfd.bfd.from_jsondict(jsondict['bfd']) + eq_(str(bfd1), str(bfd2)) diff --git a/tests/unit/packet/test_bgp.py b/tests/unit/packet/test_bgp.py new file mode 100644 index 00000000..2211fc4c --- /dev/null +++ b/tests/unit/packet/test_bgp.py @@ -0,0 +1,813 @@ +# Copyright (C) 2013,2014 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013,2014 YAMAMOTO Takashi +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import logging +import os +import sys + +import unittest +from nose.tools import eq_ +from nose.tools import ok_ + +from ryu.utils import binary_str +from ryu.lib import pcaplib +from ryu.lib.packet import packet +from ryu.lib.packet import bgp +from ryu.lib.packet import afi +from ryu.lib.packet import safi + + +LOG = logging.getLogger(__name__) + +BGP4_PACKET_DATA_DIR = os.path.join( + os.path.dirname(sys.modules[__name__].__file__), '../../packet_data/bgp4/') + +PMSI_TYPE_NO_TUNNEL_INFORMATION_PRESENT = ( + bgp.BGPPathAttributePmsiTunnel.TYPE_NO_TUNNEL_INFORMATION_PRESENT +) +PMSI_TYPE_INGRESS_REPLICATION = ( + bgp.BGPPathAttributePmsiTunnel.TYPE_INGRESS_REPLICATION +) + +RULES_BASE = [ + # port='>=8000' + bgp.FlowSpecPort( + operator=(bgp.FlowSpecPort.GT | bgp.FlowSpecPort.EQ), + value=8000), + # port='&<=9000' + bgp.FlowSpecPort( + operator=(bgp.FlowSpecPort.AND | bgp.FlowSpecPort.LT | + bgp.FlowSpecPort.EQ), + value=9000), + # port='==80' + bgp.FlowSpecPort(operator=bgp.FlowSpecPort.EQ, value=80), + # dst_port=8080 + bgp.FlowSpecDestPort(operator=bgp.FlowSpecDestPort.EQ, value=8080), + # dst_port='>9000' + bgp.FlowSpecDestPort(operator=bgp.FlowSpecDestPort.GT, value=9000), + # dst_port='&<9050' + bgp.FlowSpecDestPort( + operator=(bgp.FlowSpecDestPort.AND | bgp.FlowSpecDestPort.LT), + value=9050), + # dst_port='<=1000' + bgp.FlowSpecDestPort( + operator=(bgp.FlowSpecDestPort.LT | bgp.FlowSpecDestPort.EQ), + value=1000), + # src_port='<=9090' + bgp.FlowSpecSrcPort( + operator=(bgp.FlowSpecSrcPort.LT | bgp.FlowSpecSrcPort.EQ), + value=9090), + # src_port='& >=9080' + bgp.FlowSpecSrcPort( + operator=(bgp.FlowSpecSrcPort.AND | bgp.FlowSpecSrcPort.GT | + bgp.FlowSpecSrcPort.EQ), + value=9080), + # src_port='<10100' + bgp.FlowSpecSrcPort( + operator=bgp.FlowSpecSrcPort.LT, value=10100), + # src_port='>10000' + bgp.FlowSpecSrcPort( + operator=(bgp.FlowSpecSrcPort.AND | bgp.FlowSpecSrcPort.GT), + value=10000), + # icmp_type=0 + bgp.FlowSpecIcmpType(operator=bgp.FlowSpecIcmpType.EQ, value=0), + # icmp_code=6 + bgp.FlowSpecIcmpCode(operator=bgp.FlowSpecIcmpCode.EQ, value=6), + # tcp_flags='ACK+FIN' + bgp.FlowSpecTCPFlags( + operator=0, # Partial match + value=(bgp.FlowSpecTCPFlags.SYN | bgp.FlowSpecTCPFlags.ACK)), + # tcp_flags='&!=URGENT' + bgp.FlowSpecTCPFlags( + operator=(bgp.FlowSpecTCPFlags.AND | bgp.FlowSpecTCPFlags.NOT), + value=bgp.FlowSpecTCPFlags.URGENT), + # packet_len=1000 + bgp.FlowSpecPacketLen( + operator=bgp.FlowSpecPacketLen.EQ, value=1000), + # packet_len=1100 + bgp.FlowSpecPacketLen( + operator=(bgp.FlowSpecTCPFlags.AND | bgp.FlowSpecPacketLen.EQ), + value=1100), + # dscp=22 + bgp.FlowSpecDSCP(operator=bgp.FlowSpecDSCP.EQ, value=22), + # dscp=24 + bgp.FlowSpecDSCP(operator=bgp.FlowSpecDSCP.EQ, value=24), +] + +RULES_L2VPN_BASE = [ + # ether_type=0x0800 + bgp.FlowSpecEtherType(operator=bgp.FlowSpecEtherType.EQ, value=0x0800), + # source_mac='12:34:56:78:90:AB' + bgp.FlowSpecSourceMac(addr='12:34:56:78:90:AB', length=6), + # dest_mac='DE:EF:C0:FF:EE:DD' + bgp.FlowSpecDestinationMac(addr='BE:EF:C0:FF:EE:DD', length=6), + # llc_dsap=0x42 + bgp.FlowSpecLLCDSAP(operator=bgp.FlowSpecLLCDSAP.EQ, value=0x42), + # llc_ssap=0x42 + bgp.FlowSpecLLCSSAP(operator=bgp.FlowSpecLLCSSAP.EQ, value=0x42), + # llc_control=100 + bgp.FlowSpecLLCControl(operator=bgp.FlowSpecLLCControl.EQ, value=100), + # snap=0x12345 + bgp.FlowSpecSNAP(operator=bgp.FlowSpecSNAP.EQ, value=0x12345), + # vlan_id='>4000' + bgp.FlowSpecVLANID(operator=bgp.FlowSpecVLANID.GT, value=4000), + # vlan_cos='>=3' + bgp.FlowSpecVLANCoS( + operator=(bgp.FlowSpecVLANCoS.GT | bgp.FlowSpecVLANCoS.EQ), value=3), + # inner_vlan_id='<3000' + bgp.FlowSpecInnerVLANID(operator=bgp.FlowSpecInnerVLANID.LT, value=3000), + # inner_vlan_cos='<=5' + bgp.FlowSpecInnerVLANCoS( + operator=(bgp.FlowSpecInnerVLANCoS.LT | bgp.FlowSpecInnerVLANCoS.EQ), + value=5), +] + + +class Test_bgp(unittest.TestCase): + """ Test case for ryu.lib.packet.bgp + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_open1(self): + msg = bgp.BGPOpen(my_as=30000, bgp_identifier='192.0.2.1') + binmsg = msg.serialize() + msg2, _, rest = bgp.BGPMessage.parser(binmsg) + eq_(str(msg), str(msg2)) + eq_(len(msg), 29) + eq_(rest, b'') + + def test_open2(self): + opt_param = [bgp.BGPOptParamCapabilityUnknown(cap_code=200, + cap_value=b'hoge'), + bgp.BGPOptParamCapabilityGracefulRestart(flags=0, + time=120, + tuples=[]), + bgp.BGPOptParamCapabilityRouteRefresh(), + bgp.BGPOptParamCapabilityCiscoRouteRefresh(), + bgp.BGPOptParamCapabilityMultiprotocol( + afi=afi.IP, safi=safi.MPLS_VPN), + bgp.BGPOptParamCapabilityCarryingLabelInfo(), + bgp.BGPOptParamCapabilityFourOctetAsNumber( + as_number=1234567), + bgp.BGPOptParamUnknown(type_=99, value=b'fuga')] + msg = bgp.BGPOpen(my_as=30000, bgp_identifier='192.0.2.2', + opt_param=opt_param) + binmsg = msg.serialize() + msg2, _, rest = bgp.BGPMessage.parser(binmsg) + eq_(str(msg), str(msg2)) + ok_(len(msg) > 29) + eq_(rest, b'') + + def test_update1(self): + msg = bgp.BGPUpdate() + binmsg = msg.serialize() + msg2, _, rest = bgp.BGPMessage.parser(binmsg) + eq_(str(msg), str(msg2)) + eq_(len(msg), 23) + eq_(rest, b'') + + def test_update2(self): + withdrawn_routes = [bgp.BGPWithdrawnRoute(length=0, + addr='192.0.2.13'), + bgp.BGPWithdrawnRoute(length=1, + addr='192.0.2.13'), + bgp.BGPWithdrawnRoute(length=3, + addr='192.0.2.13'), + bgp.BGPWithdrawnRoute(length=7, + addr='192.0.2.13'), + bgp.BGPWithdrawnRoute(length=32, + addr='192.0.2.13')] + mp_nlri = [ + bgp.LabelledVPNIPAddrPrefix(24, '192.0.9.0', + route_dist='100:100', + labels=[1, 2, 3]), + bgp.LabelledVPNIPAddrPrefix(26, '192.0.10.192', + route_dist='10.0.0.1:10000', + labels=[5, 6, 7, 8]), + ] + mp_nlri2 = [ + bgp.LabelledIPAddrPrefix(24, '192.168.0.0', labels=[1, 2, 3]) + ] + mp_nlri_v6 = [ + bgp.LabelledVPNIP6AddrPrefix(64, '2001:db8:1111::', + route_dist='200:200', + labels=[1, 2, 3]), + bgp.LabelledVPNIP6AddrPrefix(64, '2001:db8:2222::', + route_dist='10.0.0.1:10000', + labels=[5, 6, 7, 8]), + ] + mp_nlri2_v6 = [ + bgp.LabelledIP6AddrPrefix(64, '2001:db8:3333::', labels=[1, 2, 3]) + ] + communities = [ + bgp.BGP_COMMUNITY_NO_EXPORT, + bgp.BGP_COMMUNITY_NO_ADVERTISE, + ] + ecommunities = [ + bgp.BGPTwoOctetAsSpecificExtendedCommunity( + subtype=1, as_number=65500, local_administrator=3908876543), + bgp.BGPFourOctetAsSpecificExtendedCommunity( + subtype=2, as_number=10000000, local_administrator=59876), + bgp.BGPIPv4AddressSpecificExtendedCommunity( + subtype=3, ipv4_address='192.0.2.1', + local_administrator=65432), + bgp.BGPOpaqueExtendedCommunity(subtype=13, opaque=b'abcdef'), + bgp.BGPEncapsulationExtendedCommunity( + subtype=0x0c, tunnel_type=10), + bgp.BGPEvpnMacMobilityExtendedCommunity( + subtype=0, flags=0xff, sequence_number=0x11223344), + bgp.BGPEvpnEsiLabelExtendedCommunity( + subtype=1, flags=0xff, label=b'\xFF\xFF\xFF'), + bgp.BGPEvpnEsiLabelExtendedCommunity( + subtype=1, flags=0xff, mpls_label=0xfffff), + bgp.BGPEvpnEsiLabelExtendedCommunity( + subtype=1, flags=0xff, vni=0xffffff), + bgp.BGPEvpnEsImportRTExtendedCommunity( + subtype=2, es_import="aa:bb:cc:dd:ee:ff"), + bgp.BGPUnknownExtendedCommunity(type_=99, value=b'abcdefg'), + ] + path_attributes = [ + bgp.BGPPathAttributeOrigin(value=1), + bgp.BGPPathAttributeAsPath(value=[[1000], {1001, 1002}, + [1003, 1004]]), + bgp.BGPPathAttributeNextHop(value='192.0.2.199'), + bgp.BGPPathAttributeMultiExitDisc(value=2000000000), + bgp.BGPPathAttributeLocalPref(value=1000000000), + bgp.BGPPathAttributeAtomicAggregate(), + bgp.BGPPathAttributeAggregator(as_number=40000, + addr='192.0.2.99'), + bgp.BGPPathAttributeCommunities(communities=communities), + bgp.BGPPathAttributeOriginatorId(value='10.1.1.1'), + bgp.BGPPathAttributeClusterList(value=['1.1.1.1', '2.2.2.2']), + bgp.BGPPathAttributeExtendedCommunities(communities=ecommunities), + bgp.BGPPathAttributePmsiTunnel( + pmsi_flags=1, + tunnel_type=PMSI_TYPE_NO_TUNNEL_INFORMATION_PRESENT, + label=b'\xFF\xFF\xFF'), + bgp.BGPPathAttributePmsiTunnel( + pmsi_flags=1, + tunnel_type=PMSI_TYPE_NO_TUNNEL_INFORMATION_PRESENT, + tunnel_id=None), + bgp.BGPPathAttributePmsiTunnel( + pmsi_flags=1, + tunnel_type=PMSI_TYPE_INGRESS_REPLICATION, + mpls_label=0xfffff, + tunnel_id=bgp.PmsiTunnelIdIngressReplication( + tunnel_endpoint_ip="1.1.1.1")), + bgp.BGPPathAttributePmsiTunnel( + pmsi_flags=1, + tunnel_type=PMSI_TYPE_INGRESS_REPLICATION, + vni=0xffffff, + tunnel_id=bgp.PmsiTunnelIdIngressReplication( + tunnel_endpoint_ip="aa:bb:cc::dd:ee:ff")), + bgp.BGPPathAttributePmsiTunnel( + pmsi_flags=1, + tunnel_type=2, + label=b'\xFF\xFF\xFF', + tunnel_id=bgp.PmsiTunnelIdUnknown(value=b'test')), + bgp.BGPPathAttributeAs4Path(value=[[1000000], {1000001, 1002}, + [1003, 1000004]]), + bgp.BGPPathAttributeAs4Aggregator(as_number=100040000, + addr='192.0.2.99'), + bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP, safi=safi.MPLS_VPN, + next_hop='1.1.1.1', + nlri=mp_nlri), + bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP, safi=safi.MPLS_LABEL, + next_hop='1.1.1.1', + nlri=mp_nlri2), + bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP6, safi=safi.MPLS_VPN, + next_hop=['2001:db8::1'], + nlri=mp_nlri_v6), + bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP6, safi=safi.MPLS_LABEL, + next_hop=['2001:db8::1', + 'fe80::1'], + nlri=mp_nlri2_v6), + bgp.BGPPathAttributeMpUnreachNLRI(afi=afi.IP, safi=safi.MPLS_VPN, + withdrawn_routes=mp_nlri), + bgp.BGPPathAttributeUnknown(flags=0, type_=100, value=300 * b'bar') + ] + nlri = [ + bgp.BGPNLRI(length=24, addr='203.0.113.1'), + bgp.BGPNLRI(length=16, addr='203.0.113.0') + ] + msg = bgp.BGPUpdate(withdrawn_routes=withdrawn_routes, + path_attributes=path_attributes, + nlri=nlri) + binmsg = msg.serialize() + msg2, _, rest = bgp.BGPMessage.parser(binmsg) + eq_(str(msg), str(msg2)) + ok_(len(msg) > 23) + eq_(rest, b'') + + def test_keepalive(self): + msg = bgp.BGPKeepAlive() + binmsg = msg.serialize() + msg2, _, rest = bgp.BGPMessage.parser(binmsg) + eq_(str(msg), str(msg2)) + eq_(len(msg), 19) + eq_(rest, b'') + + def test_notification(self): + data = b'hoge' + msg = bgp.BGPNotification(error_code=1, error_subcode=2, data=data) + binmsg = msg.serialize() + msg2, _, rest = bgp.BGPMessage.parser(binmsg) + eq_(str(msg), str(msg2)) + eq_(len(msg), 21 + len(data)) + eq_(rest, b'') + + def test_route_refresh(self): + msg = bgp.BGPRouteRefresh(afi=afi.IP, safi=safi.MPLS_VPN) + binmsg = msg.serialize() + msg2, _, rest = bgp.BGPMessage.parser(binmsg) + eq_(str(msg), str(msg2)) + eq_(len(msg), 23) + eq_(rest, b'') + + def test_stream_parser(self): + msgs = [ + bgp.BGPNotification(error_code=1, error_subcode=2, data=b'foo'), + bgp.BGPNotification(error_code=3, error_subcode=4, data=b'bar'), + bgp.BGPNotification(error_code=5, error_subcode=6, data=b'baz'), + ] + binmsgs = b''.join([bytes(msg.serialize()) for msg in msgs]) + sp = bgp.StreamParser() + results = [] + for b in binmsgs: + for m in sp.parse(b): + results.append(m) + eq_(str(results), str(msgs)) + + def test_parser(self): + files = [ + 'bgp4-open', + 'bgp4-update', + 'bgp4-update_ipv6', + 'bgp4-update_vpnv6', + 'bgp4-keepalive', + 'evpn_esi_arbitrary', + 'evpn_esi_lacp', + 'evpn_esi_l2_bridge', + 'evpn_esi_mac_base', + 'evpn_esi_router_id', + 'evpn_esi_as_based', + 'evpn_nlri_eth_a-d', + 'evpn_nlri_mac_ip_ad', + 'evpn_nlri_inc_multi_eth_tag', + 'evpn_nlri_eth_seg', + 'evpn_nlri_ip_prefix', + 'flowspec_nlri_ipv4', + 'flowspec_nlri_vpn4', + 'flowspec_nlri_ipv6', + 'flowspec_nlri_vpn6', + 'flowspec_nlri_l2vpn', + 'flowspec_action_traffic_rate', + 'flowspec_action_traffic_action', + 'flowspec_action_redirect', + 'flowspec_action_traffic_marking', + ] + + for f in files: + LOG.debug('*** testing %s ...', f) + for _, buf in pcaplib.Reader( + open(BGP4_PACKET_DATA_DIR + f + '.pcap', 'rb')): + # Checks if BGP message can be parsed as expected. + pkt = packet.Packet(buf) + ok_(isinstance(pkt.protocols[-1], bgp.BGPMessage), + 'Failed to parse BGP message: %s' % pkt) + + # Checks if BGP message can be serialized as expected. + pkt.serialize() + eq_(buf, pkt.data, + "b'%s' != b'%s'" % (binary_str(buf), binary_str(pkt.data))) + + def test_vlan_action_parser(self): + action = bgp.BGPFlowSpecVlanActionCommunity( + actions_1=(bgp.BGPFlowSpecVlanActionCommunity.POP | + bgp.BGPFlowSpecVlanActionCommunity.SWAP), + vlan_1=3000, + cos_1=3, + actions_2=bgp.BGPFlowSpecVlanActionCommunity.PUSH, + vlan_2=4000, + cos_2=2, + ) + binmsg = action.serialize() + msg, rest = bgp.BGPFlowSpecVlanActionCommunity.parse(binmsg) + eq_(str(action), str(msg)) + eq_(rest, b'') + + def test_tpid_action_parser(self): + action = bgp.BGPFlowSpecTPIDActionCommunity( + actions=(bgp.BGPFlowSpecTPIDActionCommunity.TI | + bgp.BGPFlowSpecTPIDActionCommunity.TO), + tpid_1=5, + tpid_2=6, + ) + binmsg = action.serialize() + msg, rest = bgp.BGPFlowSpecTPIDActionCommunity.parse(binmsg) + eq_(str(action), str(msg)) + eq_(rest, b'') + + def test_json1(self): + opt_param = [bgp.BGPOptParamCapabilityUnknown(cap_code=200, + cap_value=b'hoge'), + bgp.BGPOptParamCapabilityRouteRefresh(), + bgp.BGPOptParamCapabilityMultiprotocol( + afi=afi.IP, safi=safi.MPLS_VPN), + bgp.BGPOptParamCapabilityFourOctetAsNumber( + as_number=1234567), + bgp.BGPOptParamUnknown(type_=99, value=b'fuga')] + msg1 = bgp.BGPOpen(my_as=30000, bgp_identifier='192.0.2.2', + opt_param=opt_param) + jsondict = msg1.to_jsondict() + msg2 = bgp.BGPOpen.from_jsondict(jsondict['BGPOpen']) + eq_(str(msg1), str(msg2)) + + def test_json2(self): + withdrawn_routes = [bgp.BGPWithdrawnRoute(length=0, + addr='192.0.2.13'), + bgp.BGPWithdrawnRoute(length=1, + addr='192.0.2.13'), + bgp.BGPWithdrawnRoute(length=3, + addr='192.0.2.13'), + bgp.BGPWithdrawnRoute(length=7, + addr='192.0.2.13'), + bgp.BGPWithdrawnRoute(length=32, + addr='192.0.2.13')] + mp_nlri = [ + bgp.LabelledVPNIPAddrPrefix(24, '192.0.9.0', + route_dist='100:100', + labels=[1, 2, 3]), + bgp.LabelledVPNIPAddrPrefix(26, '192.0.10.192', + route_dist='10.0.0.1:10000', + labels=[5, 6, 7, 8]), + ] + mp_nlri2 = [ + bgp.LabelledIPAddrPrefix(24, '192.168.0.0', labels=[1, 2, 3]) + ] + mp_nlri_v6 = [ + bgp.LabelledVPNIP6AddrPrefix(64, '2001:db8:1111::', + route_dist='200:200', + labels=[1, 2, 3]), + bgp.LabelledVPNIP6AddrPrefix(64, '2001:db8:2222::', + route_dist='10.0.0.1:10000', + labels=[5, 6, 7, 8]), + ] + mp_nlri2_v6 = [ + bgp.LabelledIP6AddrPrefix(64, '2001:db8:3333::', labels=[1, 2, 3]) + ] + communities = [ + bgp.BGP_COMMUNITY_NO_EXPORT, + bgp.BGP_COMMUNITY_NO_ADVERTISE, + ] + ecommunities = [ + bgp.BGPTwoOctetAsSpecificExtendedCommunity( + subtype=1, as_number=65500, local_administrator=3908876543), + bgp.BGPFourOctetAsSpecificExtendedCommunity( + subtype=2, as_number=10000000, local_administrator=59876), + bgp.BGPIPv4AddressSpecificExtendedCommunity( + subtype=3, ipv4_address='192.0.2.1', + local_administrator=65432), + bgp.BGPOpaqueExtendedCommunity(subtype=13, opaque=b'abcdef'), + bgp.BGPEncapsulationExtendedCommunity( + subtype=0x0c, tunnel_type=10), + bgp.BGPEvpnMacMobilityExtendedCommunity( + subtype=0, flags=0xff, sequence_number=0x11223344), + bgp.BGPEvpnEsiLabelExtendedCommunity( + subtype=1, flags=0xff, label=b'\xFF\xFF\xFF'), + bgp.BGPEvpnEsiLabelExtendedCommunity( + subtype=1, flags=0xff, mpls_label=0xfffff), + bgp.BGPEvpnEsiLabelExtendedCommunity( + subtype=1, flags=0xff, vni=0xffffff), + bgp.BGPEvpnEsImportRTExtendedCommunity( + subtype=2, es_import="aa:bb:cc:dd:ee:ff"), + bgp.BGPUnknownExtendedCommunity(type_=99, value=b'abcdefg'), + ] + path_attributes = [ + bgp.BGPPathAttributeOrigin(value=1), + bgp.BGPPathAttributeAsPath(value=[[1000], {1001, 1002}, + [1003, 1004]]), + bgp.BGPPathAttributeNextHop(value='192.0.2.199'), + bgp.BGPPathAttributeMultiExitDisc(value=2000000000), + bgp.BGPPathAttributeLocalPref(value=1000000000), + bgp.BGPPathAttributeAtomicAggregate(), + bgp.BGPPathAttributeAggregator(as_number=40000, + addr='192.0.2.99'), + bgp.BGPPathAttributeCommunities(communities=communities), + bgp.BGPPathAttributeExtendedCommunities(communities=ecommunities), + bgp.BGPPathAttributePmsiTunnel( + pmsi_flags=1, + tunnel_type=PMSI_TYPE_NO_TUNNEL_INFORMATION_PRESENT, + label=b'\xFF\xFF\xFF'), + bgp.BGPPathAttributePmsiTunnel( + pmsi_flags=1, + tunnel_type=PMSI_TYPE_NO_TUNNEL_INFORMATION_PRESENT, + tunnel_id=None), + bgp.BGPPathAttributePmsiTunnel( + pmsi_flags=1, + tunnel_type=PMSI_TYPE_INGRESS_REPLICATION, + mpls_label=0xfffff, + tunnel_id=bgp.PmsiTunnelIdIngressReplication( + tunnel_endpoint_ip="1.1.1.1")), + bgp.BGPPathAttributePmsiTunnel( + pmsi_flags=1, + tunnel_type=PMSI_TYPE_INGRESS_REPLICATION, + vni=0xffffff, + tunnel_id=bgp.PmsiTunnelIdIngressReplication( + tunnel_endpoint_ip="aa:bb:cc::dd:ee:ff")), + bgp.BGPPathAttributePmsiTunnel( + pmsi_flags=1, + tunnel_type=2, + label=b'\xFF\xFF\xFF', + tunnel_id=bgp.PmsiTunnelIdUnknown(value=b'test')), + bgp.BGPPathAttributeAs4Path(value=[[1000000], {1000001, 1002}, + [1003, 1000004]]), + bgp.BGPPathAttributeAs4Aggregator(as_number=100040000, + addr='192.0.2.99'), + bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP, safi=safi.MPLS_VPN, + next_hop='1.1.1.1', + nlri=mp_nlri), + bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP, safi=safi.MPLS_LABEL, + next_hop='1.1.1.1', + nlri=mp_nlri2), + bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP6, safi=safi.MPLS_VPN, + next_hop=['2001:db8::1'], + nlri=mp_nlri_v6), + bgp.BGPPathAttributeMpReachNLRI(afi=afi.IP6, safi=safi.MPLS_LABEL, + next_hop=['2001:db8::1', + 'fe80::1'], + nlri=mp_nlri2_v6), + bgp.BGPPathAttributeMpUnreachNLRI(afi=afi.IP, safi=safi.MPLS_VPN, + withdrawn_routes=mp_nlri), + bgp.BGPPathAttributeUnknown(flags=0, type_=100, value=300 * b'bar') + ] + nlri = [ + bgp.BGPNLRI(length=24, addr='203.0.113.1'), + bgp.BGPNLRI(length=16, addr='203.0.113.0') + ] + msg1 = bgp.BGPUpdate(withdrawn_routes=withdrawn_routes, + path_attributes=path_attributes, + nlri=nlri) + jsondict = msg1.to_jsondict() + msg2 = bgp.BGPUpdate.from_jsondict(jsondict['BGPUpdate']) + eq_(str(msg1), str(msg2)) + + def test_flowspec_user_interface_ipv4(self): + rules = RULES_BASE + [ + # dst_prefix='10.0.0.0/24 + bgp.FlowSpecDestPrefix(addr='10.0.0.0', length=24), + # src_prefix='20.0.0.1/24' + bgp.FlowSpecSrcPrefix(addr='20.0.0.0', length=24), + # ip_proto='6' + bgp.FlowSpecIPProtocol( + operator=bgp.FlowSpecIPProtocol.EQ, value=6), + # fragment='LF' + bgp.FlowSpecFragment( + operator=0, # Partial match + value=bgp.FlowSpecFragment.LF), + # fragment='==FF' + bgp.FlowSpecFragment( + operator=bgp.FlowSpecFragment.MATCH, + value=bgp.FlowSpecFragment.FF), + # fragment='&==ISF' + bgp.FlowSpecFragment( + operator=(bgp.FlowSpecFragment.AND | + bgp.FlowSpecFragment.MATCH), + value=bgp.FlowSpecFragment.ISF), + # fragment='!=DF' + bgp.FlowSpecFragment( + operator=bgp.FlowSpecFragment.NOT, + value=bgp.FlowSpecFragment.DF) + ] + + msg = bgp.FlowSpecIPv4NLRI.from_user( + dst_prefix='10.0.0.0/24', + src_prefix='20.0.0.0/24', + ip_proto='6', + port='>=8000 & <=9000 | ==80', + dst_port='8080 >9000&<9050 | <=1000', + src_port='<=9090 & >=9080 <10100 & >10000', + icmp_type=0, + icmp_code=6, + tcp_flags='SYN+ACK & !=URGENT', + packet_len='1000 & 1100', + dscp='22 24', + fragment='LF ==FF&==ISF | !=DF') + msg2 = bgp.FlowSpecIPv4NLRI(rules=rules) + binmsg = msg.serialize() + binmsg2 = msg2.serialize() + eq_(str(msg), str(msg2)) + eq_(binary_str(binmsg), binary_str(binmsg2)) + msg3, rest = bgp.FlowSpecIPv4NLRI.parser(binmsg) + eq_(str(msg), str(msg3)) + eq_(rest, b'') + + def test_flowspec_user_interface_vpv4(self): + rules = RULES_BASE + [ + # dst_prefix='10.0.0.0/24 + bgp.FlowSpecDestPrefix(addr='10.0.0.0', length=24), + # src_prefix='20.0.0.1/24' + bgp.FlowSpecSrcPrefix(addr='20.0.0.0', length=24), + # ip_proto='6' + bgp.FlowSpecIPProtocol( + operator=bgp.FlowSpecIPProtocol.EQ, value=6), + # fragment='LF' + bgp.FlowSpecFragment( + operator=0, # Partial match + value=bgp.FlowSpecFragment.LF), + # fragment='==FF' + bgp.FlowSpecFragment( + operator=bgp.FlowSpecFragment.MATCH, + value=bgp.FlowSpecFragment.FF), + # fragment='&==ISF' + bgp.FlowSpecFragment( + operator=(bgp.FlowSpecFragment.AND | + bgp.FlowSpecFragment.MATCH), + value=bgp.FlowSpecFragment.ISF), + # fragment='!=DF' + bgp.FlowSpecFragment( + operator=bgp.FlowSpecFragment.NOT, + value=bgp.FlowSpecFragment.DF) + ] + msg = bgp.FlowSpecVPNv4NLRI.from_user( + route_dist='65001:250', + dst_prefix='10.0.0.0/24', + src_prefix='20.0.0.0/24', + ip_proto='6', + port='>=8000 & <=9000 | ==80', + dst_port='8080 >9000&<9050 | <=1000', + src_port='<=9090 & >=9080 <10100 & >10000', + icmp_type=0, + icmp_code=6, + tcp_flags='SYN+ACK & !=URGENT', + packet_len='1000 & 1100', + dscp='22 24', + fragment='LF ==FF&==ISF | !=DF') + msg2 = bgp.FlowSpecVPNv4NLRI(route_dist='65001:250', rules=rules) + binmsg = msg.serialize() + binmsg2 = msg2.serialize() + eq_(str(msg), str(msg2)) + eq_(binary_str(binmsg), binary_str(binmsg2)) + msg3, rest = bgp.FlowSpecVPNv4NLRI.parser(binmsg) + eq_(str(msg), str(msg3)) + eq_(rest, b'') + + def test_flowspec_user_interface_ipv6(self): + rules = RULES_BASE + [ + # dst_prefix='2001:2/128/32' + bgp.FlowSpecIPv6DestPrefix( + addr='2001::2', offset=32, length=128), + # src_prefix='3002::3/128' + bgp.FlowSpecIPv6SrcPrefix( + addr='3002::3', length=128), + # ip_proto='6' + bgp.FlowSpecNextHeader( + operator=bgp.FlowSpecNextHeader.EQ, value=6), + # fragment='LF' + bgp.FlowSpecIPv6Fragment( + operator=0, # Partial match + value=bgp.FlowSpecFragment.LF), + # fragment='==FF' + bgp.FlowSpecIPv6Fragment( + operator=bgp.FlowSpecFragment.MATCH, + value=bgp.FlowSpecFragment.FF), + # fragment='&==ISF' + bgp.FlowSpecIPv6Fragment( + operator=(bgp.FlowSpecFragment.AND | + bgp.FlowSpecFragment.MATCH), + value=bgp.FlowSpecFragment.ISF), + # fragment='!=LF' + bgp.FlowSpecIPv6Fragment( + operator=bgp.FlowSpecFragment.NOT, + value=bgp.FlowSpecFragment.LF), + # flowlabel='100' + bgp.FlowSpecIPv6FlowLabel( + operator=bgp.FlowSpecIPv6FlowLabel.EQ, + value=100), + ] + msg = bgp.FlowSpecIPv6NLRI.from_user( + dst_prefix='2001::2/128/32', + src_prefix='3002::3/128', + next_header='6', + port='>=8000 & <=9000 | ==80', + dst_port='8080 >9000&<9050 | <=1000', + src_port='<=9090 & >=9080 <10100 & >10000', + icmp_type=0, + icmp_code=6, + tcp_flags='SYN+ACK & !=URGENT', + packet_len='1000 & 1100', + dscp='22 24', + fragment='LF ==FF&==ISF | !=LF', + flow_label=100, + ) + msg2 = bgp.FlowSpecIPv6NLRI(rules=rules) + binmsg = msg.serialize() + binmsg2 = msg2.serialize() + eq_(str(msg), str(msg2)) + eq_(binary_str(binmsg), binary_str(binmsg2)) + msg3, rest = bgp.FlowSpecIPv6NLRI.parser(binmsg) + eq_(str(msg), str(msg3)) + eq_(rest, b'') + + def test_flowspec_user_interface_vpnv6(self): + rules = RULES_BASE + [ + # dst_prefix='2001:2/128/32' + bgp.FlowSpecIPv6DestPrefix( + addr='2001::2', offset=32, length=128), + # src_prefix='3002::3/128' + bgp.FlowSpecIPv6SrcPrefix( + addr='3002::3', length=128), + # ip_proto='6' + bgp.FlowSpecNextHeader( + operator=bgp.FlowSpecNextHeader.EQ, value=6), + # fragment='LF' + bgp.FlowSpecIPv6Fragment( + operator=0, # Partial match + value=bgp.FlowSpecFragment.LF), + # fragment='==FF' + bgp.FlowSpecIPv6Fragment( + operator=bgp.FlowSpecFragment.MATCH, + value=bgp.FlowSpecFragment.FF), + # fragment='&==ISF' + bgp.FlowSpecIPv6Fragment( + operator=(bgp.FlowSpecFragment.AND | + bgp.FlowSpecFragment.MATCH), + value=bgp.FlowSpecFragment.ISF), + # fragment='!=LF' + bgp.FlowSpecIPv6Fragment( + operator=bgp.FlowSpecFragment.NOT, + value=bgp.FlowSpecFragment.LF), + # flowlabel='100' + bgp.FlowSpecIPv6FlowLabel( + operator=bgp.FlowSpecIPv6FlowLabel.EQ, + value=100), + ] + msg = bgp.FlowSpecVPNv6NLRI.from_user( + route_dist='65001:250', + dst_prefix='2001::2/128/32', + src_prefix='3002::3/128', + next_header='6', + port='>=8000 & <=9000 | ==80', + dst_port='8080 >9000&<9050 | <=1000', + src_port='<=9090 & >=9080 <10100 & >10000', + icmp_type=0, + icmp_code=6, + tcp_flags='SYN+ACK & !=URGENT', + packet_len='1000 & 1100', + dscp='22 24', + fragment='LF ==FF&==ISF | !=LF', + flow_label=100, + ) + msg2 = bgp.FlowSpecVPNv6NLRI(route_dist='65001:250', rules=rules) + binmsg = msg.serialize() + binmsg2 = msg2.serialize() + eq_(str(msg), str(msg2)) + eq_(binary_str(binmsg), binary_str(binmsg2)) + msg3, rest = bgp.FlowSpecVPNv6NLRI.parser(binmsg) + eq_(str(msg), str(msg3)) + eq_(rest, b'') + + def test_flowspec_user_interface_l2vpn(self): + rules = RULES_L2VPN_BASE + msg = bgp.FlowSpecL2VPNNLRI.from_user( + route_dist='65001:250', + ether_type=0x0800, + src_mac='12:34:56:78:90:AB', + dst_mac='BE:EF:C0:FF:EE:DD', + llc_dsap=0x42, + llc_ssap=0x42, + llc_control=100, + snap=0x12345, + vlan_id='>4000', + vlan_cos='>=3', + inner_vlan_id='<3000', + inner_vlan_cos='<=5', + ) + msg2 = bgp.FlowSpecL2VPNNLRI(route_dist='65001:250', rules=rules) + binmsg = msg.serialize() + binmsg2 = msg2.serialize() + eq_(str(msg), str(msg2)) + eq_(binary_str(binmsg), binary_str(binmsg2)) + msg3, rest = bgp.FlowSpecL2VPNNLRI.parser(binmsg) + eq_(str(msg), str(msg3)) + eq_(rest, b'') diff --git a/tests/unit/packet/test_bmp.py b/tests/unit/packet/test_bmp.py new file mode 100644 index 00000000..f93b8014 --- /dev/null +++ b/tests/unit/packet/test_bmp.py @@ -0,0 +1,136 @@ +# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +from nose.tools import eq_ +from nose.tools import ok_ +from time import time + +from ryu.lib.packet import bmp +from ryu.lib.packet import bgp +from ryu.lib.packet import afi +from ryu.lib.packet import safi + + +class Test_bmp(unittest.TestCase): + """ Test case for ryu.lib.packet.bmp + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def _time(self): + # time() can give sub-microsecond precision, which results + # in an assertion failure + return round(time(), 6) + + def test_route_monitoring(self): + update = bgp.BGPUpdate() + msg = bmp.BMPRouteMonitoring(bgp_update=update, + peer_type=bmp.BMP_PEER_TYPE_GLOBAL, + is_post_policy=True, + peer_distinguisher=0, + peer_address='192.0.2.1', + peer_as=30000, + peer_bgp_id='192.0.2.1', + timestamp=self._time()) + binmsg = msg.serialize() + msg2, rest = bmp.BMPMessage.parser(binmsg) + eq_(msg.to_jsondict(), msg2.to_jsondict()) + eq_(rest, b'') + + def test_statistics_report(self): + stats = [{'type': bmp.BMP_STAT_TYPE_REJECTED, 'value': 100}, + {'type': bmp.BMP_STAT_TYPE_DUPLICATE_PREFIX, 'value': 200}, + {'type': bmp.BMP_STAT_TYPE_DUPLICATE_WITHDRAW, 'value': 300}, + {'type': bmp.BMP_STAT_TYPE_ADJ_RIB_IN, 'value': 100000}, + {'type': bmp.BMP_STAT_TYPE_LOC_RIB, 'value': 500000}] + msg = bmp.BMPStatisticsReport(stats=stats, + peer_type=bmp.BMP_PEER_TYPE_GLOBAL, + is_post_policy=True, + peer_distinguisher=0, + peer_address='192.0.2.1', + peer_as=30000, + peer_bgp_id='192.0.2.1', + timestamp=self._time()) + binmsg = msg.serialize() + msg2, rest = bmp.BMPMessage.parser(binmsg) + eq_(msg.to_jsondict(), msg2.to_jsondict()) + eq_(rest, b'') + + def test_peer_down_notification(self): + reason = bmp.BMP_PEER_DOWN_REASON_LOCAL_BGP_NOTIFICATION + data = b'hoge' + data = bgp.BGPNotification(error_code=1, error_subcode=2, data=data) + msg = bmp.BMPPeerDownNotification(reason=reason, data=data, + peer_type=bmp.BMP_PEER_TYPE_GLOBAL, + is_post_policy=True, + peer_distinguisher=0, + peer_address='192.0.2.1', + peer_as=30000, + peer_bgp_id='192.0.2.1', + timestamp=self._time()) + binmsg = msg.serialize() + msg2, rest = bmp.BMPMessage.parser(binmsg) + eq_(msg.to_jsondict(), msg2.to_jsondict()) + eq_(rest, b'') + + def test_peer_up_notification(self): + opt_param = [bgp.BGPOptParamCapabilityUnknown(cap_code=200, + cap_value=b'hoge'), + bgp.BGPOptParamCapabilityRouteRefresh(), + bgp.BGPOptParamCapabilityMultiprotocol( + afi=afi.IP, safi=safi.MPLS_VPN)] + open_message = bgp.BGPOpen(my_as=40000, bgp_identifier='192.0.2.2', + opt_param=opt_param) + msg = bmp.BMPPeerUpNotification(local_address='192.0.2.2', + local_port=179, + remote_port=11089, + sent_open_message=open_message, + received_open_message=open_message, + peer_type=bmp.BMP_PEER_TYPE_GLOBAL, + is_post_policy=True, + peer_distinguisher=0, + peer_address='192.0.2.1', + peer_as=30000, + peer_bgp_id='192.0.2.1', + timestamp=self._time()) + binmsg = msg.serialize() + msg2, rest = bmp.BMPMessage.parser(binmsg) + eq_(msg.to_jsondict(), msg2.to_jsondict()) + eq_(rest, b'') + + def test_initiation(self): + initiation_info = [{'type': bmp.BMP_INIT_TYPE_STRING, + 'value': u'This is Ryu BGP BMP message'}] + msg = bmp.BMPInitiation(info=initiation_info) + binmsg = msg.serialize() + msg2, rest = bmp.BMPMessage.parser(binmsg) + eq_(msg.to_jsondict(lambda v: v), msg2.to_jsondict(lambda v: v)) + eq_(rest, b'') + + def test_termination(self): + termination_info = [{'type': bmp.BMP_TERM_TYPE_STRING, + 'value': u'Session administatively closed'}, + {'type': bmp.BMP_TERM_TYPE_REASON, + 'value': bmp.BMP_TERM_REASON_ADMIN}] + msg = bmp.BMPTermination(info=termination_info) + binmsg = msg.serialize() + msg2, rest = bmp.BMPMessage.parser(binmsg) + eq_(msg.to_jsondict(lambda v: v), msg2.to_jsondict(lambda v: v)) + eq_(rest, b'') diff --git a/tests/unit/packet/test_bpdu.py b/tests/unit/packet/test_bpdu.py new file mode 100644 index 00000000..1ef8cf58 --- /dev/null +++ b/tests/unit/packet/test_bpdu.py @@ -0,0 +1,469 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import struct + +from nose.tools import eq_ +from ryu.lib.packet import bpdu + + +LOG = logging.getLogger(__name__) + + +class Test_ConfigurationBPDUs(unittest.TestCase): + """ Test case for ConfigurationBPDUs + """ + + def setUp(self): + self.protocol_id = bpdu.PROTOCOL_IDENTIFIER + self.version_id = bpdu.ConfigurationBPDUs.VERSION_ID + self.bpdu_type = bpdu.ConfigurationBPDUs.BPDU_TYPE + self.flags = 0b00000001 + self.root_priority = 4096 + self.root_system_id_extension = 1 + self.root_mac_address = '12:34:56:78:9a:bc' + self.root_path_cost = 2 + self.bridge_priority = 8192 + self.bridge_system_id_extension = 3 + self.bridge_mac_address = 'aa:aa:aa:aa:aa:aa' + self.port_priority = 16 + self.port_number = 4 + self.message_age = 5 + self.max_age = 6 + self.hello_time = 7 + self.forward_delay = 8 + + self.msg = bpdu.ConfigurationBPDUs( + flags=self.flags, + root_priority=self.root_priority, + root_system_id_extension=self.root_system_id_extension, + root_mac_address=self.root_mac_address, + root_path_cost=self.root_path_cost, + bridge_priority=self.bridge_priority, + bridge_system_id_extension=self.bridge_system_id_extension, + bridge_mac_address=self.bridge_mac_address, + port_priority=self.port_priority, + port_number=self.port_number, + message_age=self.message_age, + max_age=self.max_age, + hello_time=self.hello_time, + forward_delay=self.forward_delay) + + self.fmt = (bpdu.bpdu._PACK_STR + + bpdu.ConfigurationBPDUs._PACK_STR[1:]) + self.buf = struct.pack(self.fmt, + self.protocol_id, self.version_id, + self.bpdu_type, self.flags, + bpdu.ConfigurationBPDUs.encode_bridge_id( + self.root_priority, + self.root_system_id_extension, + self.root_mac_address), + self.root_path_cost, + bpdu.ConfigurationBPDUs.encode_bridge_id( + self.bridge_priority, + self.bridge_system_id_extension, + self.bridge_mac_address), + bpdu.ConfigurationBPDUs.encode_port_id( + self.port_priority, + self.port_number), + bpdu.ConfigurationBPDUs._encode_timer( + self.message_age), + bpdu.ConfigurationBPDUs._encode_timer( + self.max_age), + bpdu.ConfigurationBPDUs._encode_timer( + self.hello_time), + bpdu.ConfigurationBPDUs._encode_timer( + self.forward_delay)) + + def test_init(self): + eq_(self.protocol_id, self.msg._protocol_id) + eq_(self.version_id, self.msg._version_id) + eq_(self.bpdu_type, self.msg._bpdu_type) + eq_(self.flags, self.msg.flags) + eq_(self.root_priority, self.msg.root_priority) + eq_(self.root_system_id_extension, + self.msg.root_system_id_extension) + eq_(self.root_mac_address, self.msg.root_mac_address) + eq_(self.root_path_cost, self.msg.root_path_cost) + eq_(self.bridge_priority, self.msg.bridge_priority) + eq_(self.bridge_system_id_extension, + self.msg.bridge_system_id_extension) + eq_(self.bridge_mac_address, self.msg.bridge_mac_address) + eq_(self.port_priority, self.msg.port_priority) + eq_(self.port_number, self.msg.port_number) + eq_(self.message_age, self.msg.message_age) + eq_(self.max_age, self.msg.max_age) + eq_(self.hello_time, self.msg.hello_time) + eq_(self.forward_delay, self.msg.forward_delay) + + def test_parser(self): + r1, r2, _ = bpdu.bpdu.parser(self.buf) + + eq_(type(r1), type(self.msg)) + eq_(r1._protocol_id, self.protocol_id) + eq_(r1._version_id, self.version_id) + eq_(r1._bpdu_type, self.bpdu_type) + eq_(r1.flags, self.flags) + eq_(r1.root_priority, self.root_priority) + eq_(r1.root_system_id_extension, self.root_system_id_extension) + eq_(r1.root_mac_address, self.root_mac_address) + eq_(r1.root_path_cost, self.root_path_cost) + eq_(r1.bridge_priority, self.bridge_priority) + eq_(r1.bridge_system_id_extension, self.bridge_system_id_extension) + eq_(r1.bridge_mac_address, self.bridge_mac_address) + eq_(r1.port_priority, self.port_priority) + eq_(r1.port_number, self.port_number) + eq_(r1.message_age, self.message_age) + eq_(r1.max_age, self.max_age) + eq_(r1.hello_time, self.hello_time) + eq_(r1.forward_delay, self.forward_delay) + eq_(r2, None) + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.msg.serialize(data, prev) + res = struct.unpack(self.fmt, buf) + + eq_(res[0], self.protocol_id) + eq_(res[1], self.version_id) + eq_(res[2], self.bpdu_type) + eq_(res[3], self.flags) + eq_(bpdu.ConfigurationBPDUs._decode_bridge_id(res[4]), + (self.root_priority, + self.root_system_id_extension, + self.root_mac_address)) + eq_(res[5], self.root_path_cost) + eq_(bpdu.ConfigurationBPDUs._decode_bridge_id(res[6]), + (self.bridge_priority, + self.bridge_system_id_extension, + self.bridge_mac_address)) + eq_(bpdu.ConfigurationBPDUs._decode_port_id(res[7]), + (self.port_priority, + self.port_number)) + eq_(bpdu.ConfigurationBPDUs._decode_timer(res[8]), self.message_age) + eq_(bpdu.ConfigurationBPDUs._decode_timer(res[9]), self.max_age) + eq_(bpdu.ConfigurationBPDUs._decode_timer(res[10]), self.hello_time) + eq_(bpdu.ConfigurationBPDUs._decode_timer(res[11]), self.forward_delay) + + def test_json(self): + jsondict = self.msg.to_jsondict() + msg = bpdu.ConfigurationBPDUs.from_jsondict( + jsondict['ConfigurationBPDUs']) + eq_(str(self.msg), str(msg)) + + +class Test_TopologyChangeNotificationBPDUs(unittest.TestCase): + """ Test case for TopologyChangeNotificationBPDUs + """ + + def setUp(self): + self.protocol_id = bpdu.PROTOCOL_IDENTIFIER + self.version_id = bpdu.TopologyChangeNotificationBPDUs.VERSION_ID + self.bpdu_type = bpdu.TopologyChangeNotificationBPDUs.BPDU_TYPE + + self.msg = bpdu.TopologyChangeNotificationBPDUs() + + self.fmt = bpdu.bpdu._PACK_STR + self.buf = struct.pack(self.fmt, + self.protocol_id, + self.version_id, + self.bpdu_type) + + def test_init(self): + eq_(self.protocol_id, self.msg._protocol_id) + eq_(self.version_id, self.msg._version_id) + eq_(self.bpdu_type, self.msg._bpdu_type) + + def test_parser(self): + r1, r2, _ = bpdu.bpdu.parser(self.buf) + + eq_(type(r1), type(self.msg)) + eq_(r1._protocol_id, self.protocol_id) + eq_(r1._version_id, self.version_id) + eq_(r1._bpdu_type, self.bpdu_type) + eq_(r2, None) + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.msg.serialize(data, prev) + res = struct.unpack(self.fmt, buf) + + eq_(res[0], self.protocol_id) + eq_(res[1], self.version_id) + eq_(res[2], self.bpdu_type) + + def test_json(self): + jsondict = self.msg.to_jsondict() + msg = bpdu.TopologyChangeNotificationBPDUs.from_jsondict( + jsondict['TopologyChangeNotificationBPDUs']) + eq_(str(self.msg), str(msg)) + + +class Test_RstBPDUs(unittest.TestCase): + """ Test case for RstBPDUs + """ + + def setUp(self): + self.protocol_id = bpdu.PROTOCOL_IDENTIFIER + self.version_id = bpdu.RstBPDUs.VERSION_ID + self.bpdu_type = bpdu.RstBPDUs.BPDU_TYPE + self.flags = 0b01111110 + self.root_priority = 4096 + self.root_system_id_extension = 1 + self.root_mac_address = '12:34:56:78:9a:bc' + self.root_path_cost = 2 + self.bridge_priority = 8192 + self.bridge_system_id_extension = 3 + self.bridge_mac_address = 'aa:aa:aa:aa:aa:aa' + self.port_priority = 16 + self.port_number = 4 + self.message_age = 5 + self.max_age = 6 + self.hello_time = 7 + self.forward_delay = 8 + self.version_1_length = bpdu.VERSION_1_LENGTH + + self.msg = bpdu.RstBPDUs( + flags=self.flags, + root_priority=self.root_priority, + root_system_id_extension=self.root_system_id_extension, + root_mac_address=self.root_mac_address, + root_path_cost=self.root_path_cost, + bridge_priority=self.bridge_priority, + bridge_system_id_extension=self.bridge_system_id_extension, + bridge_mac_address=self.bridge_mac_address, + port_priority=self.port_priority, + port_number=self.port_number, + message_age=self.message_age, + max_age=self.max_age, + hello_time=self.hello_time, + forward_delay=self.forward_delay) + + self.fmt = (bpdu.bpdu._PACK_STR + + bpdu.ConfigurationBPDUs._PACK_STR[1:] + + bpdu.RstBPDUs._PACK_STR[1:]) + self.buf = struct.pack(self.fmt, + self.protocol_id, self.version_id, + self.bpdu_type, self.flags, + bpdu.RstBPDUs.encode_bridge_id( + self.root_priority, + self.root_system_id_extension, + self.root_mac_address), + self.root_path_cost, + bpdu.RstBPDUs.encode_bridge_id( + self.bridge_priority, + self.bridge_system_id_extension, + self.bridge_mac_address), + bpdu.RstBPDUs.encode_port_id( + self.port_priority, + self.port_number), + bpdu.RstBPDUs._encode_timer(self.message_age), + bpdu.RstBPDUs._encode_timer(self.max_age), + bpdu.RstBPDUs._encode_timer(self.hello_time), + bpdu.RstBPDUs._encode_timer(self.forward_delay), + self.version_1_length) + + def test_init(self): + eq_(self.protocol_id, self.msg._protocol_id) + eq_(self.version_id, self.msg._version_id) + eq_(self.bpdu_type, self.msg._bpdu_type) + eq_(self.flags, self.msg.flags) + eq_(self.root_priority, self.msg.root_priority) + eq_(self.root_system_id_extension, + self.msg.root_system_id_extension) + eq_(self.root_mac_address, self.msg.root_mac_address) + eq_(self.root_path_cost, self.msg.root_path_cost) + eq_(self.bridge_priority, self.msg.bridge_priority) + eq_(self.bridge_system_id_extension, + self.msg.bridge_system_id_extension) + eq_(self.bridge_mac_address, self.msg.bridge_mac_address) + eq_(self.port_priority, self.msg.port_priority) + eq_(self.port_number, self.msg.port_number) + eq_(self.message_age, self.msg.message_age) + eq_(self.max_age, self.msg.max_age) + eq_(self.hello_time, self.msg.hello_time) + eq_(self.forward_delay, self.msg.forward_delay) + eq_(self.version_1_length, self.msg._version_1_length) + + def test_parser(self): + r1, r2, _ = bpdu.bpdu.parser(self.buf) + + eq_(type(r1), type(self.msg)) + eq_(r1._protocol_id, self.protocol_id) + eq_(r1._version_id, self.version_id) + eq_(r1._bpdu_type, self.bpdu_type) + eq_(r1.flags, self.flags) + eq_(r1.root_priority, self.root_priority) + eq_(r1.root_system_id_extension, self.root_system_id_extension) + eq_(r1.root_mac_address, self.root_mac_address) + eq_(r1.root_path_cost, self.root_path_cost) + eq_(r1.bridge_priority, self.bridge_priority) + eq_(r1.bridge_system_id_extension, self.bridge_system_id_extension) + eq_(r1.bridge_mac_address, self.bridge_mac_address) + eq_(r1.port_priority, self.port_priority) + eq_(r1.port_number, self.port_number) + eq_(r1.message_age, self.message_age) + eq_(r1.max_age, self.max_age) + eq_(r1.hello_time, self.hello_time) + eq_(r1.forward_delay, self.forward_delay) + eq_(r1._version_1_length, self.version_1_length) + eq_(r2, None) + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.msg.serialize(data, prev) + res = struct.unpack(self.fmt, buf) + + eq_(res[0], self.protocol_id) + eq_(res[1], self.version_id) + eq_(res[2], self.bpdu_type) + eq_(res[3], self.flags) + eq_(bpdu.RstBPDUs._decode_bridge_id(res[4]), + (self.root_priority, + self.root_system_id_extension, + self.root_mac_address)) + eq_(res[5], self.root_path_cost) + eq_(bpdu.RstBPDUs._decode_bridge_id(res[6]), + (self.bridge_priority, + self.bridge_system_id_extension, + self.bridge_mac_address)) + eq_(bpdu.RstBPDUs._decode_port_id(res[7]), + (self.port_priority, + self.port_number)) + eq_(bpdu.RstBPDUs._decode_timer(res[8]), self.message_age) + eq_(bpdu.RstBPDUs._decode_timer(res[9]), self.max_age) + eq_(bpdu.RstBPDUs._decode_timer(res[10]), self.hello_time) + eq_(bpdu.RstBPDUs._decode_timer(res[11]), self.forward_delay) + eq_(res[12], self.version_1_length) + + def test_json(self): + jsondict = self.msg.to_jsondict() + msg = bpdu.RstBPDUs.from_jsondict(jsondict['RstBPDUs']) + eq_(str(self.msg), str(msg)) + + +class Test_UnknownVersion(unittest.TestCase): + """ Test case for unknown BPDU version + """ + + def setUp(self): + self.protocol_id = bpdu.PROTOCOL_IDENTIFIER + self.version_id = 111 # Unknown version + self.bpdu_type = bpdu.RstBPDUs.BPDU_TYPE + self.flags = 0b01111110 + self.root_priority = 4096 + self.root_system_id_extension = 1 + self.root_mac_address = '12:34:56:78:9a:bc' + self.root_path_cost = 2 + self.bridge_priority = 8192 + self.bridge_system_id_extension = 3 + self.bridge_mac_address = 'aa:aa:aa:aa:aa:aa' + self.port_priority = 16 + self.port_number = 4 + self.message_age = 5 + self.max_age = 6 + self.hello_time = 7 + self.forward_delay = 8 + self.version_1_length = bpdu.VERSION_1_LENGTH + + self.fmt = (bpdu.bpdu._PACK_STR + + bpdu.ConfigurationBPDUs._PACK_STR[1:] + + bpdu.RstBPDUs._PACK_STR[1:]) + self.buf = struct.pack(self.fmt, + self.protocol_id, self.version_id, + self.bpdu_type, self.flags, + bpdu.RstBPDUs.encode_bridge_id( + self.root_priority, + self.root_system_id_extension, + self.root_mac_address), + self.root_path_cost, + bpdu.RstBPDUs.encode_bridge_id( + self.bridge_priority, + self.bridge_system_id_extension, + self.bridge_mac_address), + bpdu.RstBPDUs.encode_port_id( + self.port_priority, + self.port_number), + bpdu.RstBPDUs._encode_timer(self.message_age), + bpdu.RstBPDUs._encode_timer(self.max_age), + bpdu.RstBPDUs._encode_timer(self.hello_time), + bpdu.RstBPDUs._encode_timer(self.forward_delay), + self.version_1_length) + + def test_parser(self): + r1, r2, _ = bpdu.bpdu.parser(self.buf) + eq_(r1, self.buf) + eq_(r2, None) + + +class Test_UnknownType(unittest.TestCase): + """ Test case for unknown BPDU type + """ + + def setUp(self): + self.protocol_id = bpdu.PROTOCOL_IDENTIFIER + self.version_id = bpdu.RstBPDUs.VERSION_ID + self.bpdu_type = 222 # Unknown type + self.flags = 0b01111110 + self.root_priority = 4096 + self.root_system_id_extension = 1 + self.root_mac_address = '12:34:56:78:9a:bc' + self.root_path_cost = 2 + self.bridge_priority = 8192 + self.bridge_system_id_extension = 3 + self.bridge_mac_address = 'aa:aa:aa:aa:aa:aa' + self.port_priority = 16 + self.port_number = 4 + self.message_age = 5 + self.max_age = 6 + self.hello_time = 7 + self.forward_delay = 8 + self.version_1_length = bpdu.VERSION_1_LENGTH + + self.fmt = (bpdu.bpdu._PACK_STR + + bpdu.ConfigurationBPDUs._PACK_STR[1:] + + bpdu.RstBPDUs._PACK_STR[1:]) + self.buf = struct.pack(self.fmt, + self.protocol_id, self.version_id, + self.bpdu_type, self.flags, + bpdu.RstBPDUs.encode_bridge_id( + self.root_priority, + self.root_system_id_extension, + self.root_mac_address), + self.root_path_cost, + bpdu.RstBPDUs.encode_bridge_id( + self.bridge_priority, + self.bridge_system_id_extension, + self.bridge_mac_address), + bpdu.RstBPDUs.encode_port_id( + self.port_priority, + self.port_number), + bpdu.RstBPDUs._encode_timer(self.message_age), + bpdu.RstBPDUs._encode_timer(self.max_age), + bpdu.RstBPDUs._encode_timer(self.hello_time), + bpdu.RstBPDUs._encode_timer(self.forward_delay), + self.version_1_length) + + def test_parser(self): + r1, r2, _ = bpdu.bpdu.parser(self.buf) + eq_(r1, self.buf) + eq_(r2, None) diff --git a/tests/unit/packet/test_cfm.py b/tests/unit/packet/test_cfm.py new file mode 100644 index 00000000..fb0749d7 --- /dev/null +++ b/tests/unit/packet/test_cfm.py @@ -0,0 +1,1761 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import unittest +import logging +import inspect +import six +import struct + +from nose.tools import * +from ryu.lib import addrconv +from ryu.lib.packet import cfm + +LOG = logging.getLogger(__name__) + + +class Test_cfm(unittest.TestCase): + + def setUp(self): + self.message = cfm.cc_message() + self.ins = cfm.cfm(self.message) + data = bytearray() + prev = None + self.buf = self.ins.serialize(data, prev) + + def setUp_cc_message(self): + self.cc_message_md_lv = 1 + self.cc_message_version = 1 + self.cc_message_rdi = 1 + self.cc_message_interval = 1 + self.cc_message_seq_num = 123 + self.cc_message_mep_id = 4 + self.cc_message_md_name_format = 4 + self.cc_message_md_name_length = 0 + self.cc_message_md_name = b"hoge" + self.cc_message_short_ma_name_format = 2 + self.cc_message_short_ma_name_length = 0 + self.cc_message_short_ma_name = b"pakeratta" + self.cc_message_md_name_txfcf = 11 + self.cc_message_md_name_rxfcb = 22 + self.cc_message_md_name_txfcb = 33 + self.cc_message_tlvs = [ + cfm.sender_id_tlv(), + cfm.port_status_tlv(), + cfm.data_tlv(), + cfm.interface_status_tlv(), + cfm.reply_ingress_tlv(), + cfm.reply_egress_tlv(), + cfm.ltm_egress_identifier_tlv(), + cfm.ltr_egress_identifier_tlv(), + cfm.organization_specific_tlv(), + ] + self.message = cfm.cc_message( + self.cc_message_md_lv, + self.cc_message_version, + self.cc_message_rdi, + self.cc_message_interval, + self.cc_message_seq_num, + self.cc_message_mep_id, + self.cc_message_md_name_format, + self.cc_message_md_name_length, + self.cc_message_md_name, + self.cc_message_short_ma_name_format, + self.cc_message_short_ma_name_length, + self.cc_message_short_ma_name, + self.cc_message_tlvs + ) + self.ins = cfm.cfm(self.message) + data = bytearray() + prev = None + self.buf = self.ins.serialize(data, prev) + + def setUp_loopback_message(self): + self.loopback_message_md_lv = 1 + self.loopback_message_version = 1 + self.loopback_message_transaction_id = 12345 + self.loopback_message_tlvs = [ + cfm.sender_id_tlv(), + cfm.port_status_tlv(), + cfm.data_tlv(), + cfm.interface_status_tlv(), + cfm.reply_ingress_tlv(), + cfm.reply_egress_tlv(), + cfm.ltm_egress_identifier_tlv(), + cfm.ltr_egress_identifier_tlv(), + cfm.organization_specific_tlv(), + ] + self.message = cfm.loopback_message( + self.loopback_message_md_lv, + self.loopback_message_version, + self.loopback_message_transaction_id, + self.loopback_message_tlvs) + self.ins = cfm.cfm(self.message) + data = bytearray() + prev = None + self.buf = self.ins.serialize(data, prev) + + def setUp_loopback_reply(self): + self.loopback_reply_md_lv = 1 + self.loopback_reply_version = 1 + self.loopback_reply_transaction_id = 12345 + self.loopback_reply_tlvs = [ + cfm.sender_id_tlv(), + cfm.port_status_tlv(), + cfm.data_tlv(), + cfm.interface_status_tlv(), + cfm.reply_ingress_tlv(), + cfm.reply_egress_tlv(), + cfm.ltm_egress_identifier_tlv(), + cfm.ltr_egress_identifier_tlv(), + cfm.organization_specific_tlv(), + ] + self.message = cfm.loopback_reply( + self.loopback_reply_md_lv, + self.loopback_reply_version, + self.loopback_reply_transaction_id, + self.loopback_reply_tlvs) + self.ins = cfm.cfm(self.message) + data = bytearray() + prev = None + self.buf = self.ins.serialize(data, prev) + + def setUp_link_trace_message(self): + self.link_trace_message_md_lv = 1 + self.link_trace_message_version = 1 + self.link_trace_message_use_fdb_only = 1 + self.link_trace_message_transaction_id = 12345 + self.link_trace_message_ttl = 123 + self.link_trace_message_ltm_orig_addr = '11:22:33:44:55:66' + self.link_trace_message_ltm_targ_addr = '77:88:99:aa:cc:dd' + self.link_trace_message_tlvs = [ + cfm.sender_id_tlv(), + cfm.port_status_tlv(), + cfm.data_tlv(), + cfm.interface_status_tlv(), + cfm.reply_ingress_tlv(), + cfm.reply_egress_tlv(), + cfm.ltm_egress_identifier_tlv(), + cfm.ltr_egress_identifier_tlv(), + cfm.organization_specific_tlv(), + ] + self.message = cfm.link_trace_message( + self.link_trace_message_md_lv, + self.link_trace_message_version, + self.link_trace_message_use_fdb_only, + self.link_trace_message_transaction_id, + self.link_trace_message_ttl, + self.link_trace_message_ltm_orig_addr, + self.link_trace_message_ltm_targ_addr, + self.link_trace_message_tlvs) + self.ins = cfm.cfm(self.message) + data = bytearray() + prev = None + self.buf = self.ins.serialize(data, prev) + + def setUp_link_trace_reply(self): + self.link_trace_reply_md_lv = 1 + self.link_trace_reply_version = 1 + self.link_trace_reply_use_fdb_only = 1 + self.link_trace_reply_fwd_yes = 0 + self.link_trace_reply_terminal_mep = 1 + self.link_trace_reply_transaction_id = 5432 + self.link_trace_reply_ttl = 123 + self.link_trace_reply_relay_action = 3 + self.link_trace_reply_tlvs = [ + cfm.sender_id_tlv(), + cfm.port_status_tlv(), + cfm.data_tlv(), + cfm.interface_status_tlv(), + cfm.reply_ingress_tlv(), + cfm.reply_egress_tlv(), + cfm.ltm_egress_identifier_tlv(), + cfm.ltr_egress_identifier_tlv(), + cfm.organization_specific_tlv(), + ] + self.message = cfm.link_trace_reply( + self.link_trace_reply_md_lv, + self.link_trace_reply_version, + self.link_trace_reply_use_fdb_only, + self.link_trace_reply_fwd_yes, + self.link_trace_reply_terminal_mep, + self.link_trace_reply_transaction_id, + self.link_trace_reply_ttl, + self.link_trace_reply_relay_action, + self.link_trace_reply_tlvs) + self.ins = cfm.cfm(self.message) + data = bytearray() + prev = None + self.buf = self.ins.serialize(data, prev) + + def tearDown(self): + pass + + def test_init(self): + eq_(str(self.message), str(self.ins.op)) + + def test_init_cc_message(self): + self.setUp_cc_message() + self.test_init() + + def test_init_loopback_message(self): + self.setUp_loopback_message() + self.test_init() + + def test_init_loopback_reply(self): + self.setUp_loopback_reply() + self.test_init() + + def test_init_link_trace_message(self): + self.setUp_link_trace_message() + self.test_init() + + def test_init_link_trace_reply(self): + self.setUp_link_trace_reply() + self.test_init() + + def test_parser(self): + _res = self.ins.parser(six.binary_type(self.buf)) + + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(str(self.message), str(res.op)) + + def test_parser_with_cc_message(self): + self.setUp_cc_message() + self.test_parser() + + def test_parser_with_loopback_message(self): + self.setUp_loopback_message() + self.test_parser() + + def test_parser_with_loopback_reply(self): + self.setUp_loopback_reply() + self.test_parser() + + def test_parser_with_link_trace_message(self): + self.setUp_link_trace_message() + self.test_parser() + + def test_parser_with_link_trace_reply(self): + self.setUp_link_trace_reply() + self.test_parser() + + def test_serialize(self): + pass + + def test_serialize_with_cc_message(self): + self.setUp_cc_message() + self.test_serialize() + data = bytearray() + prev = None + buf = self.ins.serialize(data, prev) + cc_message = cfm.cc_message.parser(six.binary_type(buf)) + eq_(repr(self.message), repr(cc_message)) + + def test_serialize_with_loopback_message(self): + self.setUp_loopback_message() + self.test_serialize() + data = bytearray() + prev = None + buf = self.ins.serialize(data, prev) + loopback_message = cfm.loopback_message.parser(six.binary_type(buf)) + eq_(repr(self.message), repr(loopback_message)) + + def test_serialize_with_loopback_reply(self): + self.setUp_loopback_reply() + self.test_serialize() + data = bytearray() + prev = None + buf = self.ins.serialize(data, prev) + loopback_reply = cfm.loopback_reply.parser(six.binary_type(buf)) + eq_(repr(self.message), repr(loopback_reply)) + + def test_serialize_with_link_trace_message(self): + self.setUp_link_trace_message() + self.test_serialize() + data = bytearray() + prev = None + buf = self.ins.serialize(data, prev) + link_trace_message = cfm.link_trace_message.parser(six.binary_type(buf)) + eq_(repr(self.message), repr(link_trace_message)) + + def test_serialize_with_link_trace_reply(self): + self.setUp_link_trace_reply() + self.test_serialize() + data = bytearray() + prev = None + buf = self.ins.serialize(data, prev) + link_trace_reply = cfm.link_trace_reply.parser(six.binary_type(buf)) + eq_(repr(self.message), repr(link_trace_reply)) + + def test_to_string(self): + cfm_values = {'op': self.message} + _cfm_str = ','.join(['%s=%s' % (k, cfm_values[k]) + for k, v in inspect.getmembers(self.ins) + if k in cfm_values]) + cfm_str = '%s(%s)' % (cfm.cfm.__name__, _cfm_str) + eq_(str(self.ins), cfm_str) + eq_(repr(self.ins), cfm_str) + + def test_to_string_cc_message(self): + self.setUp_cc_message() + self.test_to_string() + + def test_to_string_loopback_message(self): + self.setUp_loopback_message() + self.test_to_string() + + def test_to_string_loopback_reply(self): + self.setUp_loopback_reply() + self.test_to_string() + + def test_to_string_link_trace_message(self): + self.setUp_link_trace_message() + self.test_to_string() + + def test_to_string_link_trace_reply(self): + self.setUp_link_trace_reply() + self.test_to_string() + + def test_len(self): + pass + + def test_len_cc_message(self): + self.setUp_cc_message() + eq_(len(self.ins), 0 + len(self.message)) + + def test_len_loopback_message(self): + self.setUp_loopback_message() + eq_(len(self.ins), 0 + len(self.message)) + + def test_len_loopback_reply(self): + self.setUp_loopback_reply() + eq_(len(self.ins), 0 + len(self.message)) + + def test_len_link_trace_message(self): + self.setUp_link_trace_message() + eq_(len(self.ins), 0 + len(self.message)) + + def test_len_link_trace_reply(self): + self.setUp_link_trace_reply() + eq_(len(self.ins), 0 + len(self.message)) + + def test_default_args(self): + pass + + def test_json(self): + jsondict = self.ins.to_jsondict() + ins = cfm.cfm.from_jsondict(jsondict['cfm']) + eq_(str(self.ins), str(ins)) + + def test_json_with_cc_message(self): + self.setUp_cc_message() + self.test_json() + + def test_json_with_loopback_message(self): + self.setUp_loopback_message() + self.test_json() + + def test_json_with_loopback_reply(self): + self.setUp_loopback_reply() + self.test_json() + + def test_json_with_link_trace_message(self): + self.setUp_link_trace_message() + self.test_json() + + def test_json_with_link_trace_reply(self): + self.setUp_link_trace_reply() + self.test_json() + + +class Test_cc_message(unittest.TestCase): + + def setUp(self): + self.md_lv = 1 + self.version = 1 + self.opcode = cfm.CFM_CC_MESSAGE + self.rdi = 1 + self.interval = 5 + self.first_tlv_offset = cfm.cc_message._TLV_OFFSET + self.seq_num = 2 + self.mep_id = 2 + self.md_name_format = cfm.cc_message._MD_FMT_CHARACTER_STRING + self.md_name_length = 3 + self.md_name = b"foo" + self.short_ma_name_format = 2 + self.short_ma_name_length = 8 + self.short_ma_name = b"hogehoge" + self.tlvs = [ + ] + self.end_tlv = 0 + self.ins = cfm.cc_message( + self.md_lv, + self.version, + self.rdi, + self.interval, + self.seq_num, + self.mep_id, + self.md_name_format, + self.md_name_length, + self.md_name, + self.short_ma_name_format, + self.short_ma_name_length, + self.short_ma_name, + self.tlvs + ) + + self.form = '!4BIH2B3s2B8s33x12x4xB' + self.buf = struct.pack( + self.form, + (self.md_lv << 5) | self.version, + self.opcode, + (self.rdi << 7) | self.interval, + self.first_tlv_offset, + self.seq_num, + self.mep_id, + self.md_name_format, + self.md_name_length, + self.md_name, + self.short_ma_name_format, + self.short_ma_name_length, + self.short_ma_name, + self.end_tlv + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.md_lv, self.ins.md_lv) + eq_(self.version, self.ins.version) + eq_(self.rdi, self.ins.rdi) + eq_(self.interval, self.ins.interval) + eq_(self.seq_num, self.ins.seq_num) + eq_(self.mep_id, self.ins.mep_id) + eq_(self.md_name_format, self.ins.md_name_format) + eq_(self.md_name_length, self.ins.md_name_length) + eq_(self.md_name, self.ins.md_name) + eq_(self.short_ma_name_format, self.ins.short_ma_name_format) + eq_(self.short_ma_name_length, self.ins.short_ma_name_length) + eq_(self.short_ma_name, self.ins.short_ma_name) + eq_(self.tlvs, self.ins.tlvs) + + def test_parser(self): + _res = cfm.cc_message.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.md_lv, res.md_lv) + eq_(self.version, res.version) + eq_(self.rdi, res.rdi) + eq_(self.interval, res.interval) + eq_(self.seq_num, res.seq_num) + eq_(self.mep_id, res.mep_id) + eq_(self.md_name_format, res.md_name_format) + eq_(self.md_name_length, res.md_name_length) + eq_(self.md_name, res.md_name) + eq_(self.short_ma_name_format, res.short_ma_name_format) + eq_(self.short_ma_name_length, res.short_ma_name_length) + eq_(self.short_ma_name, res.short_ma_name) + eq_(self.tlvs, res.tlvs) + + def test_parser_with_no_maintenance_domain_name_present(self): + form = '!4BIH3B8s37x12x4xB' + buf = struct.pack( + form, + (self.md_lv << 5) | self.version, + self.opcode, + (self.rdi << 7) | self.interval, + self.first_tlv_offset, + self.seq_num, + self.mep_id, + cfm.cc_message._MD_FMT_NO_MD_NAME_PRESENT, + self.short_ma_name_format, + self.short_ma_name_length, + self.short_ma_name, + self.end_tlv + ) + _res = cfm.cc_message.parser(buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.md_lv, res.md_lv) + eq_(self.version, res.version) + eq_(self.rdi, res.rdi) + eq_(self.interval, res.interval) + eq_(self.seq_num, res.seq_num) + eq_(self.mep_id, res.mep_id) + eq_(cfm.cc_message._MD_FMT_NO_MD_NAME_PRESENT, res.md_name_format) + eq_(self.short_ma_name_format, res.short_ma_name_format) + eq_(self.short_ma_name_length, res.short_ma_name_length) + eq_(self.short_ma_name, res.short_ma_name) + eq_(self.tlvs, res.tlvs) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self.md_lv, res[0] >> 5) + eq_(self.version, res[0] & 0x1f) + eq_(self.opcode, res[1]) + eq_(self.rdi, res[2] >> 7) + eq_(self.interval, res[2] & 0x07) + eq_(self.first_tlv_offset, res[3]) + eq_(self.seq_num, res[4]) + eq_(self.mep_id, res[5]) + eq_(self.md_name_format, res[6]) + eq_(self.md_name_length, res[7]) + eq_(self.md_name, res[8]) + eq_(self.short_ma_name_format, res[9]) + eq_(self.short_ma_name_length, res[10]) + eq_(self.short_ma_name, res[11]) + eq_(self.end_tlv, res[12]) + + def test_serialize_with_md_name_length_zero(self): + ins = cfm.cc_message( + self.md_lv, + self.version, + self.rdi, + self.interval, + self.seq_num, + self.mep_id, + self.md_name_format, + 0, + self.md_name, + self.short_ma_name_format, + 0, + self.short_ma_name, + self.tlvs + ) + buf = ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self.md_lv, res[0] >> 5) + eq_(self.version, res[0] & 0x1f) + eq_(self.opcode, res[1]) + eq_(self.rdi, res[2] >> 7) + eq_(self.interval, res[2] & 0x07) + eq_(self.first_tlv_offset, res[3]) + eq_(self.seq_num, res[4]) + eq_(self.mep_id, res[5]) + eq_(self.md_name_format, res[6]) + eq_(self.md_name_length, res[7]) + eq_(self.md_name, res[8]) + eq_(self.short_ma_name_format, res[9]) + eq_(self.short_ma_name_length, res[10]) + eq_(self.short_ma_name, res[11]) + eq_(self.end_tlv, res[12]) + + def test_serialize_with_no_maintenance_domain_name_present(self): + form = '!4BIH3B8s37x12x4xB' + ins = cfm.cc_message( + self.md_lv, + self.version, + self.rdi, + self.interval, + self.seq_num, + self.mep_id, + cfm.cc_message._MD_FMT_NO_MD_NAME_PRESENT, + 0, + self.md_name, + self.short_ma_name_format, + 0, + self.short_ma_name, + self.tlvs + ) + buf = ins.serialize() + res = struct.unpack_from(form, six.binary_type(buf)) + eq_(self.md_lv, res[0] >> 5) + eq_(self.version, res[0] & 0x1f) + eq_(self.opcode, res[1]) + eq_(self.rdi, res[2] >> 7) + eq_(self.interval, res[2] & 0x07) + eq_(self.first_tlv_offset, res[3]) + eq_(self.seq_num, res[4]) + eq_(self.mep_id, res[5]) + eq_(cfm.cc_message._MD_FMT_NO_MD_NAME_PRESENT, res[6]) + eq_(self.short_ma_name_format, res[7]) + eq_(self.short_ma_name_length, res[8]) + eq_(self.short_ma_name, res[9]) + eq_(self.end_tlv, res[10]) + + def test_len(self): + # 75 octet (If tlv does not exist) + eq_(75, len(self.ins)) + + def test_default_args(self): + ins = cfm.cc_message() + buf = ins.serialize() + res = struct.unpack_from(cfm.cc_message._PACK_STR, six.binary_type(buf)) + eq_(res[0] >> 5, 0) + eq_(res[0] & 0x1f, 0) + eq_(res[1], 1) + eq_(res[2] >> 7, 0) + eq_(res[2] & 0x07, 4) + eq_(res[3], 70) + eq_(res[4], 0) + eq_(res[5], 1) + eq_(res[6], 4) + + +class Test_loopback_message(unittest.TestCase): + + def setUp(self): + self.md_lv = 1 + self.version = 1 + self.opcode = cfm.CFM_LOOPBACK_MESSAGE + self.flags = 0 + self.first_tlv_offset = cfm.loopback_message._TLV_OFFSET + self.transaction_id = 12345 + self.tlvs = [ + ] + + self.end_tlv = 0 + self.ins = cfm.loopback_message( + self.md_lv, + self.version, + self.transaction_id, + self.tlvs, + ) + self.form = '!4BIB' + self.buf = struct.pack( + self.form, + (self.md_lv << 5) | self.version, + self.opcode, + self.flags, + self.first_tlv_offset, + self.transaction_id, + self.end_tlv + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.md_lv, self.ins.md_lv) + eq_(self.version, self.ins.version) + eq_(self.transaction_id, self.ins.transaction_id) + eq_(self.tlvs, self.ins.tlvs) + + def test_parser(self): + _res = cfm.loopback_message.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.md_lv, res.md_lv) + eq_(self.version, res.version) + eq_(self.transaction_id, res.transaction_id) + eq_(self.tlvs, res.tlvs) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self.md_lv, res[0] >> 5) + eq_(self.version, res[0] & 0x1f) + eq_(self.opcode, res[1]) + eq_(self.flags, res[2]) + eq_(self.first_tlv_offset, res[3]) + eq_(self.transaction_id, res[4]) + eq_(self.end_tlv, res[5]) + + def test_len(self): + # 9 octet (If tlv does not exist) + eq_(9, len(self.ins)) + + def test_default_args(self): + ins = cfm.loopback_message() + buf = ins.serialize() + res = struct.unpack_from(cfm.loopback_message._PACK_STR, + six.binary_type(buf)) + eq_(res[0] >> 5, 0) + eq_(res[0] & 0x1f, 0) + eq_(res[1], 3) + eq_(res[2], 0) + eq_(res[3], 4) + eq_(res[4], 0) + + +class Test_loopback_reply(unittest.TestCase): + + def setUp(self): + self.md_lv = 1 + self.version = 1 + self.opcode = cfm.CFM_LOOPBACK_REPLY + self.flags = 0 + self.first_tlv_offset = cfm.loopback_reply._TLV_OFFSET + self.transaction_id = 12345 + self.tlvs = [ + ] + self.end_tlv = 0 + self.ins = cfm.loopback_reply( + self.md_lv, + self.version, + self.transaction_id, + self.tlvs, + ) + self.form = '!4BIB' + self.buf = struct.pack( + self.form, + (self.md_lv << 5) | self.version, + self.opcode, + self.flags, + self.first_tlv_offset, + self.transaction_id, + self.end_tlv + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.md_lv, self.ins.md_lv) + eq_(self.version, self.ins.version) + eq_(self.transaction_id, self.ins.transaction_id) + eq_(self.tlvs, self.ins.tlvs) + + def test_parser(self): + _res = cfm.loopback_reply.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.md_lv, res.md_lv) + eq_(self.version, res.version) + eq_(self.transaction_id, res.transaction_id) + eq_(self.tlvs, res.tlvs) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self.md_lv, res[0] >> 5) + eq_(self.version, res[0] & 0x1f) + eq_(self.opcode, res[1]) + eq_(self.flags, res[2]) + eq_(self.first_tlv_offset, res[3]) + eq_(self.transaction_id, res[4]) + eq_(self.end_tlv, res[5]) + + def test_len(self): + # 9 octet (If tlv does not exist) + eq_(9, len(self.ins)) + + def test_default_args(self): + ins = cfm.loopback_reply() + buf = ins.serialize() + res = struct.unpack_from(cfm.loopback_reply._PACK_STR, six.binary_type(buf)) + eq_(res[0] >> 5, 0) + eq_(res[0] & 0x1f, 0) + eq_(res[1], 2) + eq_(res[2], 0) + eq_(res[3], 4) + eq_(res[4], 0) + + +class Test_link_trace_message(unittest.TestCase): + + def setUp(self): + self.md_lv = 1 + self.version = 1 + self.opcode = cfm.CFM_LINK_TRACE_MESSAGE + self.use_fdb_only = 1 + self.first_tlv_offset = cfm.link_trace_message._TLV_OFFSET + self.transaction_id = 12345 + self.ttl = 55 + self.ltm_orig_addr = "00:11:22:44:55:66" + self.ltm_targ_addr = "ab:cd:ef:23:12:65" + self.tlvs = [ + ] + + self.end_tlv = 0 + self.ins = cfm.link_trace_message( + self.md_lv, + self.version, + self.use_fdb_only, + self.transaction_id, + self.ttl, + self.ltm_orig_addr, + self.ltm_targ_addr, + self.tlvs + ) + self.form = '!4BIB6s6sB' + self.buf = struct.pack( + self.form, + (self.md_lv << 5) | self.version, + self.opcode, + self.use_fdb_only << 7, + self.first_tlv_offset, + self.transaction_id, + self.ttl, + addrconv.mac.text_to_bin(self.ltm_orig_addr), + addrconv.mac.text_to_bin(self.ltm_targ_addr), + self.end_tlv + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.md_lv, self.ins.md_lv) + eq_(self.version, self.ins.version) + eq_(self.use_fdb_only, self.ins.use_fdb_only) + eq_(self.transaction_id, self.ins.transaction_id) + eq_(self.ttl, self.ins.ttl) + eq_(self.ltm_orig_addr, self.ins.ltm_orig_addr) + eq_(self.ltm_targ_addr, self.ins.ltm_targ_addr) + eq_(self.tlvs, self.ins.tlvs) + + def test_parser(self): + _res = cfm.link_trace_message.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.md_lv, res.md_lv) + eq_(self.version, res.version) + eq_(self.use_fdb_only, res.use_fdb_only) + eq_(self.transaction_id, res.transaction_id) + eq_(self.ttl, res.ttl) + eq_(self.ltm_orig_addr, res.ltm_orig_addr) + eq_(self.ltm_targ_addr, res.ltm_targ_addr) + eq_(self.tlvs, res.tlvs) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self.md_lv, res[0] >> 5) + eq_(self.version, res[0] & 0x1f) + eq_(self.opcode, res[1]) + eq_(self.use_fdb_only, res[2] >> 7) + eq_(self.first_tlv_offset, res[3]) + eq_(self.transaction_id, res[4]) + eq_(self.ttl, res[5]) + eq_(addrconv.mac.text_to_bin(self.ltm_orig_addr), res[6]) + eq_(addrconv.mac.text_to_bin(self.ltm_targ_addr), res[7]) + eq_(self.end_tlv, res[8]) + + def test_len(self): + # 22 octet (If tlv does not exist) + eq_(22, len(self.ins)) + + def test_default_args(self): + ins = cfm.link_trace_message() + buf = ins.serialize() + res = struct.unpack_from(cfm.link_trace_message._PACK_STR, six.binary_type(buf)) + eq_(res[0] >> 5, 0) + eq_(res[0] & 0x1f, 0) + eq_(res[1], 5) + eq_(res[2] >> 7, 1) + eq_(res[3], 17) + eq_(res[4], 0) + eq_(res[5], 64) + eq_(res[6], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + eq_(res[7], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + +class Test_link_trace_reply(unittest.TestCase): + + def setUp(self): + self.md_lv = 1 + self.version = 1 + self.opcode = cfm.CFM_LINK_TRACE_REPLY + self.use_fdb_only = 1 + self.fwd_yes = 0 + self.terminal_mep = 1 + self.first_tlv_offset = cfm.link_trace_reply._TLV_OFFSET + self.transaction_id = 12345 + self.ttl = 55 + self.relay_action = 2 + self.ltm_orig_addr = "00:11:22:aa:bb:cc" + self.ltm_targ_addr = "53:45:24:64:ac:ff" + self.tlvs = [ + ] + self.end_tlv = 0 + self.ins = cfm.link_trace_reply( + self.md_lv, + self.version, + self.use_fdb_only, + self.fwd_yes, + self.terminal_mep, + self.transaction_id, + self.ttl, + self.relay_action, + self.tlvs, + ) + self.form = '!4BIBBB' + self.buf = struct.pack( + self.form, + (self.md_lv << 5) | self.version, + self.opcode, + (self.use_fdb_only << 7) | (self.fwd_yes << 6) | + (self.terminal_mep << 5), + self.first_tlv_offset, + self.transaction_id, + self.ttl, + self.relay_action, + self.end_tlv + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.md_lv, self.ins.md_lv) + eq_(self.version, self.ins.version) + eq_(self.use_fdb_only, self.ins.use_fdb_only) + eq_(self.fwd_yes, self.ins.fwd_yes) + eq_(self.terminal_mep, self.ins.terminal_mep) + eq_(self.transaction_id, self.ins.transaction_id) + eq_(self.ttl, self.ins.ttl) + eq_(self.relay_action, self.ins.relay_action) + eq_(self.tlvs, self.ins.tlvs) + + def test_parser(self): + _res = cfm.link_trace_reply.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.md_lv, res.md_lv) + eq_(self.version, res.version) + eq_(self.use_fdb_only, self.ins.use_fdb_only) + eq_(self.fwd_yes, self.ins.fwd_yes) + eq_(self.terminal_mep, self.ins.terminal_mep) + eq_(self.transaction_id, res.transaction_id) + eq_(self.ttl, res.ttl) + eq_(self.relay_action, res.relay_action) + eq_(self.tlvs, res.tlvs) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self.md_lv, res[0] >> 5) + eq_(self.version, res[0] & 0x1f) + eq_(self.opcode, res[1]) + eq_(self.use_fdb_only, res[2] >> 7 & 0x01) + eq_(self.fwd_yes, res[2] >> 6 & 0x01) + eq_(self.terminal_mep, res[2] >> 5 & 0x01) + eq_(self.first_tlv_offset, res[3]) + eq_(self.transaction_id, res[4]) + eq_(self.ttl, res[5]) + eq_(self.relay_action, res[6]) + eq_(self.end_tlv, res[7]) + + def test_len(self): + # 11 octet (If tlv does not exist) + eq_(11, len(self.ins)) + + def test_default_args(self): + ins = cfm.link_trace_reply() + buf = ins.serialize() + res = struct.unpack_from(cfm.link_trace_reply._PACK_STR, six.binary_type(buf)) + eq_(res[0] >> 5, 0) + eq_(res[0] & 0x1f, 0) + eq_(res[1], 4) + eq_(res[2] >> 7, 1) + eq_(res[2] >> 6 & 0x01, 0) + eq_(res[2] >> 5 & 0x01, 1) + eq_(res[3], 6) + eq_(res[4], 0) + eq_(res[5], 64) + eq_(res[6], 1) + + +class Test_sender_id_tlv(unittest.TestCase): + + def setUp(self): + self._type = cfm.CFM_SENDER_ID_TLV + self.length = 10 + self.chassis_id_length = 1 + self.chassis_id_subtype = 3 + self.chassis_id = b"\x0a" + self.ma_domain_length = 2 + self.ma_domain = b"\x04\x05" + self.ma_length = 3 + self.ma = b"\x01\x02\x03" + self.ins = cfm.sender_id_tlv( + self.length, + self.chassis_id_length, + self.chassis_id_subtype, + self.chassis_id, + self.ma_domain_length, + self.ma_domain, + self.ma_length, + self.ma, + ) + self.form = '!BHBB1sB2sB3s' + self.buf = struct.pack( + self.form, + self._type, + self.length, + self.chassis_id_length, + self.chassis_id_subtype, + self.chassis_id, + self.ma_domain_length, + self.ma_domain, + self.ma_length, + self.ma + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.length, self.ins.length) + eq_(self.chassis_id_length, self.ins.chassis_id_length) + eq_(self.chassis_id_subtype, self.ins.chassis_id_subtype) + eq_(self.chassis_id, self.ins.chassis_id) + eq_(self.ma_domain_length, self.ins.ma_domain_length) + eq_(self.ma_domain, self.ins.ma_domain) + eq_(self.ma_length, self.ins.ma_length) + eq_(self.ma, self.ins.ma) + + def test_parser(self): + _res = cfm.sender_id_tlv.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.length, res.length) + eq_(self.chassis_id_length, res.chassis_id_length) + eq_(self.chassis_id_subtype, res.chassis_id_subtype) + eq_(self.chassis_id, res.chassis_id) + eq_(self.ma_domain_length, res.ma_domain_length) + eq_(self.ma_domain, res.ma_domain) + eq_(self.ma_length, res.ma_length) + eq_(self.ma, res.ma) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.chassis_id_length, res[2]) + eq_(self.chassis_id_subtype, res[3]) + eq_(self.chassis_id, res[4]) + eq_(self.ma_domain_length, res[5]) + eq_(self.ma_domain, res[6]) + eq_(self.ma_length, res[7]) + eq_(self.ma, res[8]) + + def test_serialize_semi_normal_ptn1(self): + ins = cfm.sender_id_tlv( + chassis_id_subtype=self.chassis_id_subtype, + chassis_id=self.chassis_id, + ma_domain=self.ma_domain, + ) + buf = ins.serialize() + form = '!BHBB1sB2sB' + res = struct.unpack_from(form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(7, res[1]) + eq_(self.chassis_id_length, res[2]) + eq_(self.chassis_id_subtype, res[3]) + eq_(self.chassis_id, res[4]) + eq_(self.ma_domain_length, res[5]) + eq_(self.ma_domain, res[6]) + eq_(0, res[7]) + + def test_serialize_semi_normal_ptn2(self): + ins = cfm.sender_id_tlv( + ma_domain=self.ma_domain, + ma=self.ma, + ) + buf = ins.serialize() + form = '!BHBB2sB3s' + res = struct.unpack_from(form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(8, res[1]) + eq_(0, res[2]) + eq_(self.ma_domain_length, res[3]) + eq_(self.ma_domain, res[4]) + eq_(self.ma_length, res[5]) + eq_(self.ma, res[6]) + + def test_serialize_semi_normal_ptn3(self): + ins = cfm.sender_id_tlv( + chassis_id_subtype=self.chassis_id_subtype, + chassis_id=self.chassis_id, + ) + buf = ins.serialize() + form = '!BHBB1sB' + res = struct.unpack_from(form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(4, res[1]) + eq_(self.chassis_id_length, res[2]) + eq_(self.chassis_id_subtype, res[3]) + eq_(self.chassis_id, res[4]) + eq_(0, res[5]) + + def test_serialize_semi_normal_ptn4(self): + ins = cfm.sender_id_tlv( + ma_domain=self.ma_domain, + ) + buf = ins.serialize() + form = '!BHBB2sB' + res = struct.unpack_from(form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(5, res[1]) + eq_(0, res[2]) + eq_(self.ma_domain_length, res[3]) + eq_(self.ma_domain, res[4]) + eq_(0, res[5]) + + def test_serialize_with_length_zero(self): + ins = cfm.sender_id_tlv( + 0, + 0, + self.chassis_id_subtype, + self.chassis_id, + 0, + self.ma_domain, + 0, + self.ma, + ) + buf = ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.chassis_id_length, res[2]) + eq_(self.chassis_id_subtype, res[3]) + eq_(self.chassis_id, res[4]) + eq_(self.ma_domain_length, res[5]) + eq_(self.ma_domain, res[6]) + eq_(self.ma_length, res[7]) + eq_(self.ma, res[8]) + + def test_len(self): + # tlv_length = type_len + length_len + value_len + eq_(1 + 2 + 10, len(self.ins)) + + def test_default_args(self): + ins = cfm.sender_id_tlv() + buf = ins.serialize() + res = struct.unpack_from(cfm.sender_id_tlv._PACK_STR, six.binary_type(buf)) + eq_(res[0], cfm.CFM_SENDER_ID_TLV) + eq_(res[1], 1) + eq_(res[2], 0) + + +class Test_port_status_tlv(unittest.TestCase): + + def setUp(self): + self._type = cfm.CFM_PORT_STATUS_TLV + self.length = 1 + self.port_status = 1 + self.ins = cfm.port_status_tlv( + self.length, + self.port_status + ) + self.form = '!BHB' + self.buf = struct.pack( + self.form, + self._type, + self.length, + self.port_status + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.length, self.ins.length) + eq_(self.port_status, self.ins.port_status) + + def test_parser(self): + _res = cfm.port_status_tlv.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.length, res.length) + eq_(self.port_status, res.port_status) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.port_status, res[2]) + + def test_len(self): + # tlv_length = type_len + length_len + value_len + eq_(1 + 2 + 1, len(self.ins)) + + def test_default_args(self): + ins = cfm.port_status_tlv() + buf = ins.serialize() + res = struct.unpack_from(cfm.port_status_tlv._PACK_STR, six.binary_type(buf)) + eq_(res[0], cfm.CFM_PORT_STATUS_TLV) + eq_(res[1], 1) + eq_(res[2], 2) + + +class Test_data_tlv(unittest.TestCase): + + def setUp(self): + self._type = cfm.CFM_DATA_TLV + self.length = 3 + self.data_value = b"\x01\x02\x03" + self.ins = cfm.data_tlv( + self.length, + self.data_value + ) + self.form = '!BH3s' + self.buf = struct.pack( + self.form, + self._type, + self.length, + self.data_value, + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.length, self.ins.length) + eq_(self.data_value, self.ins.data_value) + + def test_parser(self): + _res = cfm.data_tlv.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.length, res.length) + eq_(self.data_value, res.data_value) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.data_value, res[2]) + + def test_serialize_with_length_zero(self): + ins = cfm.data_tlv( + 0, + self.data_value + ) + buf = ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.data_value, res[2]) + + def test_len(self): + # tlv_length = type_len + length_len + value_len + eq_(1 + 2 + 3, len(self.ins)) + + def test_default_args(self): + ins = cfm.data_tlv() + buf = ins.serialize() + res = struct.unpack_from(cfm.data_tlv._PACK_STR, six.binary_type(buf)) + eq_(res[0], cfm.CFM_DATA_TLV) + eq_(res[1], 0) + + +class Test_interface_status_tlv(unittest.TestCase): + + def setUp(self): + self._type = cfm.CFM_INTERFACE_STATUS_TLV + self.length = 1 + self.interface_status = 4 + self.ins = cfm.interface_status_tlv( + self.length, + self.interface_status + ) + self.form = '!BHB' + self.buf = struct.pack( + self.form, + self._type, + self.length, + self.interface_status + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.length, self.ins.length) + eq_(self.interface_status, self.ins.interface_status) + + def test_parser(self): + _res = cfm.interface_status_tlv.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.length, res.length) + eq_(self.interface_status, res.interface_status) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.interface_status, res[2]) + + def test_len(self): + # tlv_length = type_len + length_len + value_len + eq_(1 + 2 + 1, len(self.ins)) + + def test_default_args(self): + ins = cfm.interface_status_tlv() + buf = ins.serialize() + res = struct.unpack_from(cfm.interface_status_tlv._PACK_STR, six.binary_type(buf)) + eq_(res[0], cfm.CFM_INTERFACE_STATUS_TLV) + eq_(res[1], 1) + eq_(res[2], 1) + + +class Test_ltm_egress_identifier_tlv(unittest.TestCase): + + def setUp(self): + self._type = cfm.CFM_LTM_EGRESS_IDENTIFIER_TLV + self.length = 8 + self.egress_id_ui = 7 + self.egress_id_mac = "11:22:33:44:55:66" + self.ins = cfm.ltm_egress_identifier_tlv( + self.length, + self.egress_id_ui, + self.egress_id_mac + ) + self.form = '!BHH6s' + self.buf = struct.pack( + self.form, + self._type, + self.length, + self.egress_id_ui, + addrconv.mac.text_to_bin(self.egress_id_mac) + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.length, self.ins.length) + eq_(self.egress_id_ui, self.ins.egress_id_ui) + eq_(self.egress_id_mac, self.ins.egress_id_mac) + + def test_parser(self): + _res = cfm.ltm_egress_identifier_tlv.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.length, res.length) + eq_(self.egress_id_ui, res.egress_id_ui) + eq_(self.egress_id_mac, res.egress_id_mac) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.egress_id_ui, res[2]) + eq_(addrconv.mac.text_to_bin(self.egress_id_mac), res[3]) + + def test_serialize_with_length_zero(self): + ins = cfm.ltm_egress_identifier_tlv( + 0, + self.egress_id_ui, + self.egress_id_mac + ) + buf = ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.egress_id_ui, res[2]) + eq_(addrconv.mac.text_to_bin(self.egress_id_mac), res[3]) + + def test_len(self): + # tlv_length = type_len + length_len + value_len + eq_(1 + 2 + 8, len(self.ins)) + + def test_default_args(self): + ins = cfm.ltm_egress_identifier_tlv() + buf = ins.serialize() + res = struct.unpack_from( + cfm.ltm_egress_identifier_tlv._PACK_STR, six.binary_type(buf)) + eq_(res[0], cfm.CFM_LTM_EGRESS_IDENTIFIER_TLV) + eq_(res[1], 8) + eq_(res[2], 0) + eq_(res[3], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + +class Test_ltr_egress_identifier_tlv(unittest.TestCase): + + def setUp(self): + self._type = cfm.CFM_LTR_EGRESS_IDENTIFIER_TLV + self.length = 16 + self.last_egress_id_ui = 7 + self.last_egress_id_mac = "11:22:33:44:55:66" + self.next_egress_id_ui = 5 + self.next_egress_id_mac = "33:11:33:aa:bb:cc" + self.ins = cfm.ltr_egress_identifier_tlv(self.length, + self.last_egress_id_ui, + self.last_egress_id_mac, + self.next_egress_id_ui, + self.next_egress_id_mac + ) + self.form = '!BHH6sH6s' + self.buf = struct.pack( + self.form, + self._type, + self.length, + self.last_egress_id_ui, + addrconv.mac.text_to_bin(self.last_egress_id_mac), + self.next_egress_id_ui, + addrconv.mac.text_to_bin(self.next_egress_id_mac)) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.length, self.ins.length) + eq_(self.last_egress_id_ui, self.ins.last_egress_id_ui) + eq_(self.last_egress_id_mac, self.ins.last_egress_id_mac) + eq_(self.next_egress_id_ui, self.ins.next_egress_id_ui) + eq_(self.next_egress_id_mac, self.ins.next_egress_id_mac) + + def test_parser(self): + _res = cfm.ltr_egress_identifier_tlv.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.length, res.length) + eq_(self.last_egress_id_ui, res.last_egress_id_ui) + eq_(self.last_egress_id_mac, res.last_egress_id_mac) + eq_(self.next_egress_id_ui, res.next_egress_id_ui) + eq_(self.next_egress_id_mac, res.next_egress_id_mac) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.last_egress_id_ui, res[2]) + eq_(addrconv.mac.text_to_bin(self.last_egress_id_mac), res[3]) + eq_(self.next_egress_id_ui, res[4]) + eq_(addrconv.mac.text_to_bin(self.next_egress_id_mac), res[5]) + + def test_serialize_with_length_zero(self): + ins = cfm.ltr_egress_identifier_tlv(0, + self.last_egress_id_ui, + self.last_egress_id_mac, + self.next_egress_id_ui, + self.next_egress_id_mac + ) + buf = ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.last_egress_id_ui, res[2]) + eq_(addrconv.mac.text_to_bin(self.last_egress_id_mac), res[3]) + eq_(self.next_egress_id_ui, res[4]) + eq_(addrconv.mac.text_to_bin(self.next_egress_id_mac), res[5]) + + def test_len(self): + # tlv_length = type_len + length_len + value_len + eq_(1 + 2 + 16, len(self.ins)) + + def test_default_args(self): + ins = cfm.ltr_egress_identifier_tlv() + buf = ins.serialize() + res = struct.unpack_from(cfm.ltr_egress_identifier_tlv._PACK_STR, + six.binary_type(buf)) + eq_(res[0], cfm.CFM_LTR_EGRESS_IDENTIFIER_TLV) + eq_(res[1], 16) + eq_(res[2], 0) + eq_(res[3], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + eq_(res[4], 0) + eq_(res[5], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + +class Test_organization_specific_tlv(unittest.TestCase): + + def setUp(self): + self._type = cfm.CFM_ORGANIZATION_SPECIFIC_TLV + self.length = 10 + self.oui = b"\xff\x12\x34" + self.subtype = 3 + self.value = b"\x01\x02\x0f\x0e\x0d\x0c" + self.ins = cfm.organization_specific_tlv(self.length, + self.oui, + self.subtype, + self.value + ) + self.form = '!BH3sB6s' + self.buf = struct.pack(self.form, + self._type, + self.length, + self.oui, + self.subtype, + self.value + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.length, self.ins.length) + eq_(self.oui, self.ins.oui) + eq_(self.subtype, self.ins.subtype) + eq_(self.value, self.ins.value) + + def test_parser(self): + _res = cfm.organization_specific_tlv.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.length, res.length) + eq_(self.oui, res.oui) + eq_(self.subtype, res.subtype) + eq_(self.value, res.value) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.oui, res[2]) + eq_(self.subtype, res[3]) + eq_(self.value, res[4]) + + def test_serialize_with_zero(self): + ins = cfm.organization_specific_tlv(0, + self.oui, + self.subtype, + self.value + ) + buf = ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.oui, res[2]) + eq_(self.subtype, res[3]) + eq_(self.value, res[4]) + + def test_len(self): + # tlv_length = type_len + length_len + value_len + eq_(1 + 2 + 10, len(self.ins)) + + def test_default_args(self): + ins = cfm.organization_specific_tlv() + buf = ins.serialize() + res = struct.unpack_from(cfm.organization_specific_tlv._PACK_STR, + six.binary_type(buf)) + eq_(res[0], cfm.CFM_ORGANIZATION_SPECIFIC_TLV) + eq_(res[1], 4) + eq_(res[2], b"\x00\x00\x00") + eq_(res[3], 0) + + +class Test_reply_ingress_tlv(unittest.TestCase): + + def setUp(self): + self._type = cfm.CFM_REPLY_INGRESS_TLV + self.length = 12 + self.action = 2 + self.mac_address = 'aa:bb:cc:56:34:12' + self.port_id_length = 3 + self.port_id_subtype = 2 + self.port_id = b"\x01\x04\x09" + self.ins = cfm.reply_ingress_tlv(self.length, self.action, + self.mac_address, + self.port_id_length, + self.port_id_subtype, + self.port_id + ) + self.form = '!BHB6sBB3s' + self.buf = struct.pack(self.form, + self._type, + self.length, + self.action, + addrconv.mac.text_to_bin(self.mac_address), + self.port_id_length, + self.port_id_subtype, + self.port_id + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.length, self.ins.length) + eq_(self.action, self.ins.action) + eq_(self.mac_address, self.ins.mac_address) + eq_(self.port_id_length, self.ins.port_id_length) + eq_(self.port_id_subtype, self.ins.port_id_subtype) + eq_(self.port_id, self.ins.port_id) + + def test_parser(self): + _res = cfm.reply_ingress_tlv.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.length, res.length) + eq_(self.action, res.action) + eq_(self.mac_address, res.mac_address) + eq_(self.port_id_length, res.port_id_length) + eq_(self.port_id_subtype, res.port_id_subtype) + eq_(self.port_id, res.port_id) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.action, res[2]) + eq_(addrconv.mac.text_to_bin(self.mac_address), res[3]) + eq_(self.port_id_length, res[4]) + eq_(self.port_id_subtype, res[5]) + eq_(self.port_id, res[6]) + + def test_serialize_with_zero(self): + ins = cfm.reply_ingress_tlv(0, + self.action, + self.mac_address, + 0, + self.port_id_subtype, + self.port_id + ) + buf = ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.action, res[2]) + eq_(addrconv.mac.text_to_bin(self.mac_address), res[3]) + eq_(self.port_id_length, res[4]) + eq_(self.port_id_subtype, res[5]) + eq_(self.port_id, res[6]) + + def test_len(self): + # tlv_length = type_len + length_len + value_len + eq_(1 + 2 + 12, len(self.ins)) + + def test_default_args(self): + ins = cfm.reply_ingress_tlv() + buf = ins.serialize() + res = struct.unpack_from(cfm.reply_ingress_tlv._PACK_STR, six.binary_type(buf)) + eq_(res[0], cfm.CFM_REPLY_INGRESS_TLV) + eq_(res[1], 7) + eq_(res[2], 1) + eq_(res[3], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + +class Test_reply_egress_tlv(unittest.TestCase): + + def setUp(self): + self._type = cfm.CFM_REPLY_EGRESS_TLV + self.length = 12 + self.action = 2 + self.mac_address = 'aa:bb:cc:56:34:12' + self.port_id_length = 3 + self.port_id_subtype = 2 + self.port_id = b"\x01\x04\x09" + self.ins = cfm.reply_egress_tlv(self.length, + self.action, + self.mac_address, + self.port_id_length, + self.port_id_subtype, + self.port_id + ) + self.form = '!BHB6sBB3s' + self.buf = struct.pack(self.form, + self._type, + self.length, + self.action, + addrconv.mac.text_to_bin(self.mac_address), + self.port_id_length, + self.port_id_subtype, + self.port_id + ) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.length, self.ins.length) + eq_(self.action, self.ins.action) + eq_(self.mac_address, self.ins.mac_address) + eq_(self.port_id_length, self.ins.port_id_length) + eq_(self.port_id_subtype, self.ins.port_id_subtype) + eq_(self.port_id, self.ins.port_id) + + def test_parser(self): + _res = cfm.reply_ingress_tlv.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.length, res.length) + eq_(self.action, res.action) + eq_(self.mac_address, res.mac_address) + eq_(self.port_id_length, res.port_id_length) + eq_(self.port_id_subtype, res.port_id_subtype) + eq_(self.port_id, res.port_id) + + def test_serialize(self): + buf = self.ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.action, res[2]) + eq_(addrconv.mac.text_to_bin(self.mac_address), res[3]) + eq_(self.port_id_length, res[4]) + eq_(self.port_id_subtype, res[5]) + eq_(self.port_id, res[6]) + + def test_serialize_with_zero(self): + ins = cfm.reply_egress_tlv(0, + self.action, + self.mac_address, + 0, + self.port_id_subtype, + self.port_id + ) + buf = ins.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self._type, res[0]) + eq_(self.length, res[1]) + eq_(self.action, res[2]) + eq_(addrconv.mac.text_to_bin(self.mac_address), res[3]) + eq_(self.port_id_length, res[4]) + eq_(self.port_id_subtype, res[5]) + eq_(self.port_id, res[6]) + + def test_len(self): + # tlv_length = type_len + length_len + value_len + eq_(1 + 2 + 12, len(self.ins)) + + def test_default_args(self): + ins = cfm.reply_egress_tlv() + buf = ins.serialize() + res = struct.unpack_from(cfm.reply_egress_tlv._PACK_STR, + six.binary_type(buf)) + eq_(res[0], cfm.CFM_REPLY_EGRESS_TLV) + eq_(res[1], 7) + eq_(res[2], 1) + eq_(res[3], addrconv.mac.text_to_bin('00:00:00:00:00:00')) diff --git a/tests/unit/packet/test_dhcp.py b/tests/unit/packet/test_dhcp.py new file mode 100644 index 00000000..cc96804b --- /dev/null +++ b/tests/unit/packet/test_dhcp.py @@ -0,0 +1,218 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import inspect +import logging +import struct +import unittest + +import six +from nose.tools import eq_ +from nose.tools import ok_ + +from ryu.lib import addrconv +from ryu.lib.packet import dhcp + + +LOG = logging.getLogger(__name__) + + +class Test_dhcp_offer(unittest.TestCase): + + op = dhcp.DHCP_BOOT_REPLY + chaddr = 'aa:aa:aa:aa:aa:aa' + htype = 1 + hlen = 6 + hops = 0 + xid = 1 + secs = 0 + flags = 1 + ciaddr = '192.168.10.10' + yiaddr = '192.168.20.20' + siaddr = '192.168.30.30' + giaddr = '192.168.40.40' + sname = 'abc' + boot_file = '' + + option_list = [ + dhcp.option(dhcp.DHCP_MESSAGE_TYPE_OPT, b'\x02', 1), + dhcp.option(dhcp.DHCP_SUBNET_MASK_OPT, b'\xff\xff\xff\x00', 4), + dhcp.option(dhcp.DHCP_GATEWAY_ADDR_OPT, b'\xc0\xa8\x0a\x09', 4), + dhcp.option(dhcp.DHCP_DNS_SERVER_ADDR_OPT, b'\xc0\xa8\x0a\x09', 4), + dhcp.option(dhcp.DHCP_IP_ADDR_LEASE_TIME_OPT, b'\x00\x03\xf4\x80', 4), + dhcp.option(dhcp.DHCP_RENEWAL_TIME_OPT, b'\x00\x01\xfa\x40', 4), + dhcp.option(dhcp.DHCP_REBINDING_TIME_OPT, b'\x00\x03\x75\xf0', 4), + dhcp.option(dhcp.DHCP_SERVER_IDENTIFIER_OPT, b'\xc0\xa8\x0a\x09', 4)] + magic_cookie = '99.130.83.99' + options = dhcp.options(option_list=option_list, options_len=50, + magic_cookie=magic_cookie) + + dh = dhcp.dhcp(op, chaddr, options, htype=htype, hlen=hlen, + hops=hops, xid=xid, secs=secs, flags=flags, + ciaddr=ciaddr, yiaddr=yiaddr, siaddr=siaddr, + giaddr=giaddr, sname=sname, boot_file=boot_file) + + buf = ( + b"\x02\x01\x06\x00\x00\x00\x00\x01\x00\x00\x00\x01\xc0\xa8\x0a\x0a" + b"\xc0\xa8\x14\x14\xc0\xa8\x1e\x1e\xc0\xa8\x28\x28\xaa\xaa\xaa\xaa" + b"\xaa\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x61\x62\x63\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" + b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x63\x82\x53\x63" + b"\x35\x01\x02\x01\x04\xff\xff\xff\x00\x03\x04\xc0\xa8\x0a\x09\x06" + b"\x04\xc0\xa8\x0a\x09\x33\x04\x00\x03\xf4\x80\x3a\x04\x00\x01\xfa" + b"\x40\x3b\x04\x00\x03\x75\xf0\x36\x04\xc0\xa8\x0a\x09\xff") + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.op, self.dh.op) + eq_(self.htype, self.dh.htype) + eq_(self.hlen, self.dh.hlen) + eq_(self.hops, self.dh.hops) + eq_(self.xid, self.dh.xid) + eq_(self.secs, self.dh.secs) + eq_(self.flags, self.dh.flags) + eq_(self.ciaddr, self.dh.ciaddr) + eq_(self.yiaddr, self.dh.yiaddr) + eq_(self.siaddr, self.dh.siaddr) + eq_(self.giaddr, self.dh.giaddr) + eq_(self.chaddr, self.dh.chaddr) + eq_(self.sname, self.dh.sname) + eq_(self.boot_file, self.dh.boot_file) + eq_(str(self.options), str(self.dh.options)) + + def test_parser(self): + res, _, rest = dhcp.dhcp.parser(self.buf) + + eq_(self.op, res.op) + eq_(self.htype, res.htype) + eq_(self.hlen, res.hlen) + eq_(self.hops, res.hops) + eq_(self.xid, res.xid) + eq_(self.secs, res.secs) + eq_(self.flags, res.flags) + eq_(self.ciaddr, res.ciaddr) + eq_(self.yiaddr, res.yiaddr) + eq_(self.siaddr, res.siaddr) + eq_(self.giaddr, res.giaddr) + eq_(self.chaddr, res.chaddr) + # sname is 64 byte length. rest of data is filled by '\x00'. + eq_(self.sname.ljust(64, '\x00'), res.sname) + # boof_file is 128 byte length. rest of data is filled by '\x00'. + eq_(self.boot_file.ljust(128, '\x00'), res.boot_file) + eq_(str(self.options), str(res.options)) + eq_(b'', rest) + + def test_parser_corrupted(self): + corrupt_buf = self.buf[:-4] + pkt, _, rest = dhcp.dhcp.parser(corrupt_buf) + + ok_(isinstance(pkt, dhcp.dhcp)) + ok_(isinstance(pkt.options, dhcp.options)) + for opt in pkt.options.option_list[:-1]: + ok_(isinstance(opt, dhcp.option)) + ok_(isinstance(pkt.options.option_list[-1], six.binary_type)) + + buf = pkt.serialize() + eq_(str(buf), str(corrupt_buf)) + eq_(b'', rest) + + def test_serialize(self): + buf = self.dh.serialize() + + res = struct.unpack_from(dhcp.dhcp._DHCP_PACK_STR, + six.binary_type(buf)) + + eq_(self.op, res[0]) + eq_(self.htype, res[1]) + eq_(self.hlen, res[2]) + eq_(self.hops, res[3]) + eq_(self.xid, res[4]) + eq_(self.secs, res[5]) + eq_(self.flags, res[6]) + eq_(self.ciaddr, addrconv.ipv4.bin_to_text(res[7])) + eq_(self.yiaddr, addrconv.ipv4.bin_to_text(res[8])) + eq_(self.siaddr, addrconv.ipv4.bin_to_text(res[9])) + eq_(self.giaddr, addrconv.ipv4.bin_to_text(res[10])) + eq_(self.chaddr, addrconv.mac.bin_to_text(res[11][:6])) + # sname is 64 byte length. rest of data is filled by '\x00'. + eq_(self.sname.ljust(64, '\x00'), res[12].decode('ascii')) + # boof_file is 128 byte length. rest of data is filled by '\x00'. + eq_(self.boot_file.ljust(128, '\x00'), res[13].decode('ascii')) + options = dhcp.options.parser( + buf[struct.calcsize(dhcp.dhcp._DHCP_PACK_STR):]) + eq_(str(self.options), str(options)) + + def test_to_string(self): + option_values = ['tag', 'length', 'value'] + opt_str_list = [] + for option in self.option_list: + _opt_str = ','.join(['%s=%s' % (k, repr(getattr(option, k))) + for k, v in inspect.getmembers(option) + if k in option_values]) + opt_str = '%s(%s)' % (dhcp.option.__name__, _opt_str) + opt_str_list.append(opt_str) + option_str = '[%s]' % ', '.join(opt_str_list) + + opts_vals = {'magic_cookie': repr(self.magic_cookie), + 'option_list': option_str, + 'options_len': repr(self.options.options_len)} + _options_str = ','.join(['%s=%s' % (k, opts_vals[k]) + for k, v in inspect.getmembers(self.options) + if k in opts_vals]) + options_str = '%s(%s)' % (dhcp.options.__name__, _options_str) + + dhcp_values = {'op': repr(self.op), + 'htype': repr(self.htype), + 'hlen': repr(self.hlen), + 'hops': repr(self.hops), + 'xid': repr(self.xid), + 'secs': repr(self.secs), + 'flags': repr(self.flags), + 'ciaddr': repr(self.ciaddr), + 'yiaddr': repr(self.yiaddr), + 'siaddr': repr(self.siaddr), + 'giaddr': repr(self.giaddr), + 'chaddr': repr(self.chaddr), + 'sname': repr(self.sname), + 'boot_file': repr(self.boot_file), + 'options': options_str} + _dh_str = ','.join(['%s=%s' % (k, dhcp_values[k]) + for k, v in inspect.getmembers(self.dh) + if k in dhcp_values]) + dh_str = '%s(%s)' % (dhcp.dhcp.__name__, _dh_str) + + eq_(str(self.dh), dh_str) + eq_(repr(self.dh), dh_str) + + def test_json(self): + jsondict = self.dh.to_jsondict() + dh = dhcp.dhcp.from_jsondict(jsondict['dhcp']) + eq_(str(self.dh), str(dh)) diff --git a/tests/unit/packet/test_ethernet.py b/tests/unit/packet/test_ethernet.py new file mode 100644 index 00000000..6fd767bd --- /dev/null +++ b/tests/unit/packet/test_ethernet.py @@ -0,0 +1,103 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import six +import struct +import netaddr +from struct import * +from nose.tools import * +from ryu.ofproto import ether, inet +from ryu.lib.packet.ethernet import ethernet +from ryu.lib.packet.packet import Packet +from ryu.lib.packet.arp import arp +from ryu.lib import addrconv + + +LOG = logging.getLogger('test_ethernet') + + +class Test_ethernet(unittest.TestCase): + """ Test case for ethernet + """ + + dst = 'aa:aa:aa:aa:aa:aa' + src = 'bb:bb:bb:bb:bb:bb' + ethertype = ether.ETH_TYPE_ARP + + buf = pack(ethernet._PACK_STR, + addrconv.mac.text_to_bin(dst), + addrconv.mac.text_to_bin(src), ethertype) + + e = ethernet(dst, src, ethertype) + + def setUp(self): + pass + + def tearDown(self): + pass + + def find_protocol(self, pkt, name): + for p in pkt.protocols: + if p.protocol_name == name: + return p + + def test_init(self): + eq_(self.dst, self.e.dst) + eq_(self.src, self.e.src) + eq_(self.ethertype, self.e.ethertype) + + def test_parser(self): + res, ptype, _ = self.e.parser(self.buf) + LOG.debug((res, ptype)) + + eq_(res.dst, self.dst) + eq_(res.src, self.src) + eq_(res.ethertype, self.ethertype) + eq_(ptype, arp) + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.e.serialize(data, prev) + + fmt = ethernet._PACK_STR + res = struct.unpack(fmt, buf) + + eq_(res[0], addrconv.mac.text_to_bin(self.dst)) + eq_(res[1], addrconv.mac.text_to_bin(self.src)) + eq_(res[2], self.ethertype) + + @raises(Exception) + def test_malformed_ethernet(self): + m_short_buf = self.buf[1:ethernet._MIN_LEN] + ethernet.parser(m_short_buf) + + def test_default_args(self): + e = ethernet() + buf = e.serialize(bytearray(), None) + res = struct.unpack(e._PACK_STR, six.binary_type(buf)) + + eq_(res[0], addrconv.mac.text_to_bin('ff:ff:ff:ff:ff:ff')) + eq_(res[1], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + eq_(res[2], ether.ETH_TYPE_IP) + + def test_json(self): + jsondict = self.e.to_jsondict() + e = ethernet.from_jsondict(jsondict['ethernet']) + eq_(str(self.e), str(e)) diff --git a/tests/unit/packet/test_geneve.py b/tests/unit/packet/test_geneve.py new file mode 100644 index 00000000..919d05f8 --- /dev/null +++ b/tests/unit/packet/test_geneve.py @@ -0,0 +1,62 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import logging +import os +import sys + +import unittest +from nose.tools import eq_ +from nose.tools import ok_ + +from ryu.lib import pcaplib +from ryu.lib.packet import geneve +from ryu.lib.packet import packet +from ryu.utils import binary_str + + +LOG = logging.getLogger(__name__) + +GENEVE_DATA_DIR = os.path.join( + os.path.dirname(sys.modules[__name__].__file__), + '../../packet_data/pcap/') + + +class Test_geneve(unittest.TestCase): + """ + Test case for ryu.lib.packet.geneve. + """ + + def test_parser(self): + files = [ + 'geneve_unknown', + ] + + for f in files: + # print('*** testing %s ...' % f) + for _, buf in pcaplib.Reader( + open(GENEVE_DATA_DIR + f + '.pcap', 'rb')): + # Checks if message can be parsed as expected. + pkt = packet.Packet(buf) + geneve_pkt = pkt.get_protocol(geneve.geneve) + ok_(isinstance(geneve_pkt, geneve.geneve), + 'Failed to parse Geneve message: %s' % pkt) + + # Checks if message can be serialized as expected. + pkt.serialize() + eq_(buf, pkt.data, + "b'%s' != b'%s'" % (binary_str(buf), binary_str(pkt.data))) diff --git a/tests/unit/packet/test_gre.py b/tests/unit/packet/test_gre.py new file mode 100644 index 00000000..c955ec70 --- /dev/null +++ b/tests/unit/packet/test_gre.py @@ -0,0 +1,115 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import logging +import os +import sys + +import unittest +from nose.tools import eq_ +from nose.tools import ok_ + +from ryu.lib import pcaplib +from ryu.lib.packet import gre +from ryu.lib.packet import packet +from ryu.utils import binary_str +from ryu.lib.packet.ether_types import ETH_TYPE_IP, ETH_TYPE_TEB + +LOG = logging.getLogger(__name__) + +GENEVE_DATA_DIR = os.path.join( + os.path.dirname(sys.modules[__name__].__file__), + '../../packet_data/pcap/') + + +class Test_gre(unittest.TestCase): + """ + Test case gre for ryu.lib.packet.gre. + """ + + version = 0 + gre_proto = ETH_TYPE_IP + nvgre_proto = ETH_TYPE_TEB + checksum = 0x440d + seq_number = 10 + key = 256100 + vsid = 1000 + flow_id = 100 + + gre = gre.gre(version=version, protocol=gre_proto, checksum=checksum, + key=key, seq_number=seq_number) + + def test_key_setter(self): + self.gre.key = self.key + eq_(self.gre._key, self.key) + eq_(self.gre._vsid, self.vsid) + eq_(self.gre._flow_id, self.flow_id) + + def test_key_setter_none(self): + self.gre.key = None + eq_(self.gre._key, None) + eq_(self.gre._vsid, None) + eq_(self.gre._flow_id, None) + + self.gre.key = self.key + + def test_vsid_setter(self): + self.gre.vsid = self.vsid + eq_(self.gre._key, self.key) + eq_(self.gre._vsid, self.vsid) + eq_(self.gre._flow_id, self.flow_id) + + def test_flowid_setter(self): + self.gre.flow_id = self.flow_id + eq_(self.gre._key, self.key) + eq_(self.gre._vsid, self.vsid) + eq_(self.gre._flow_id, self.flow_id) + + def test_nvgre_init(self): + nvgre = gre.nvgre(version=self.version, vsid=self.vsid, + flow_id=self.flow_id) + + eq_(nvgre.version, self.version) + eq_(nvgre.protocol, self.nvgre_proto) + eq_(nvgre.checksum, None) + eq_(nvgre.seq_number, None) + eq_(nvgre._key, self.key) + eq_(nvgre._vsid, self.vsid) + eq_(nvgre._flow_id, self.flow_id) + + def test_parser(self): + files = [ + 'gre_full_options', + 'gre_no_option', + 'gre_nvgre_option', + ] + + for f in files: + # print('*** testing %s ...' % f) + for _, buf in pcaplib.Reader( + open(GENEVE_DATA_DIR + f + '.pcap', 'rb')): + # Checks if message can be parsed as expected. + pkt = packet.Packet(buf) + gre_pkt = pkt.get_protocol(gre.gre) + ok_(isinstance(gre_pkt, gre.gre), + 'Failed to parse Gre message: %s' % pkt) + + # Checks if message can be serialized as expected. + pkt.serialize() + + eq_(buf, pkt.data, + "b'%s' != b'%s'" % (binary_str(buf), binary_str(pkt.data))) diff --git a/tests/unit/packet/test_icmp.py b/tests/unit/packet/test_icmp.py new file mode 100644 index 00000000..f9438893 --- /dev/null +++ b/tests/unit/packet/test_icmp.py @@ -0,0 +1,380 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import inspect +import logging +import six +import struct +import unittest + +from nose.tools import eq_ +from ryu.lib.packet import icmp +from ryu.lib.packet import packet_utils + + +LOG = logging.getLogger(__name__) + + +class Test_icmp(unittest.TestCase): + + echo_id = None + echo_seq = None + echo_data = None + + unreach_mtu = None + unreach_data = None + unreach_data_len = None + + te_data = None + te_data_len = None + + def setUp(self): + self.type_ = icmp.ICMP_ECHO_REQUEST + self.code = 0 + self.csum = 0 + self.data = None + + self.ic = icmp.icmp(self.type_, self.code, self.csum, self.data) + + self.buf = bytearray(struct.pack( + icmp.icmp._PACK_STR, self.type_, self.code, self.csum)) + self.csum_calc = packet_utils.checksum(self.buf) + struct.pack_into('!H', self.buf, 2, self.csum_calc) + + def setUp_with_echo(self): + self.echo_id = 13379 + self.echo_seq = 1 + self.echo_data = b'\x30\x0e\x09\x00\x00\x00\x00\x00' \ + + b'\x10\x11\x12\x13\x14\x15\x16\x17' \ + + b'\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' \ + + b'\x20\x21\x22\x23\x24\x25\x26\x27' \ + + b'\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f' \ + + b'\x30\x31\x32\x33\x34\x35\x36\x37' + self.data = icmp.echo( + id_=self.echo_id, seq=self.echo_seq, data=self.echo_data) + + self.type_ = icmp.ICMP_ECHO_REQUEST + self.code = 0 + self.ic = icmp.icmp(self.type_, self.code, self.csum, self.data) + + self.buf = bytearray(struct.pack( + icmp.icmp._PACK_STR, self.type_, self.code, self.csum)) + self.buf += self.data.serialize() + self.csum_calc = packet_utils.checksum(self.buf) + struct.pack_into('!H', self.buf, 2, self.csum_calc) + + def setUp_with_dest_unreach(self): + self.unreach_mtu = 10 + self.unreach_data = b'abc' + self.unreach_data_len = len(self.unreach_data) + self.data = icmp.dest_unreach( + data_len=self.unreach_data_len, mtu=self.unreach_mtu, + data=self.unreach_data) + + self.type_ = icmp.ICMP_DEST_UNREACH + self.code = icmp.ICMP_HOST_UNREACH_CODE + self.ic = icmp.icmp(self.type_, self.code, self.csum, self.data) + + self.buf = bytearray(struct.pack( + icmp.icmp._PACK_STR, self.type_, self.code, self.csum)) + self.buf += self.data.serialize() + self.csum_calc = packet_utils.checksum(self.buf) + struct.pack_into('!H', self.buf, 2, self.csum_calc) + + def setUp_with_TimeExceeded(self): + self.te_data = b'abc' + self.te_data_len = len(self.te_data) + self.data = icmp.TimeExceeded( + data_len=self.te_data_len, data=self.te_data) + + self.type_ = icmp.ICMP_TIME_EXCEEDED + self.code = 0 + self.ic = icmp.icmp(self.type_, self.code, self.csum, self.data) + + self.buf = bytearray(struct.pack( + icmp.icmp._PACK_STR, self.type_, self.code, self.csum)) + self.buf += self.data.serialize() + self.csum_calc = packet_utils.checksum(self.buf) + struct.pack_into('!H', self.buf, 2, self.csum_calc) + + def test_init(self): + eq_(self.type_, self.ic.type) + eq_(self.code, self.ic.code) + eq_(self.csum, self.ic.csum) + eq_(str(self.data), str(self.ic.data)) + + def test_init_with_echo(self): + self.setUp_with_echo() + self.test_init() + + def test_init_with_dest_unreach(self): + self.setUp_with_dest_unreach() + self.test_init() + + def test_init_with_TimeExceeded(self): + self.setUp_with_TimeExceeded() + self.test_init() + + def test_parser(self): + _res = icmp.icmp.parser(six.binary_type(self.buf)) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + + eq_(self.type_, res.type) + eq_(self.code, res.code) + eq_(self.csum_calc, res.csum) + eq_(str(self.data), str(res.data)) + + def test_parser_with_echo(self): + self.setUp_with_echo() + self.test_parser() + + def test_parser_with_dest_unreach(self): + self.setUp_with_dest_unreach() + self.test_parser() + + def test_parser_with_TimeExceeded(self): + self.setUp_with_TimeExceeded() + self.test_parser() + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.ic.serialize(data, prev) + + res = struct.unpack_from(icmp.icmp._PACK_STR, six.binary_type(buf)) + + eq_(self.type_, res[0]) + eq_(self.code, res[1]) + eq_(self.csum_calc, res[2]) + + def test_serialize_with_echo(self): + self.setUp_with_echo() + self.test_serialize() + + data = bytearray() + prev = None + buf = self.ic.serialize(data, prev) + echo = icmp.echo.parser(six.binary_type(buf), icmp.icmp._MIN_LEN) + eq_(repr(self.data), repr(echo)) + + def test_serialize_with_dest_unreach(self): + self.setUp_with_dest_unreach() + self.test_serialize() + + data = bytearray() + prev = None + buf = self.ic.serialize(data, prev) + unreach = icmp.dest_unreach.parser(six.binary_type(buf), icmp.icmp._MIN_LEN) + eq_(repr(self.data), repr(unreach)) + + def test_serialize_with_TimeExceeded(self): + self.setUp_with_TimeExceeded() + self.test_serialize() + + data = bytearray() + prev = None + buf = self.ic.serialize(data, prev) + te = icmp.TimeExceeded.parser(six.binary_type(buf), icmp.icmp._MIN_LEN) + eq_(repr(self.data), repr(te)) + + def test_to_string(self): + icmp_values = {'type': repr(self.type_), + 'code': repr(self.code), + 'csum': repr(self.csum), + 'data': repr(self.data)} + _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) + for k, v in inspect.getmembers(self.ic) + if k in icmp_values]) + ic_str = '%s(%s)' % (icmp.icmp.__name__, _ic_str) + + eq_(str(self.ic), ic_str) + eq_(repr(self.ic), ic_str) + + def test_to_string_with_echo(self): + self.setUp_with_echo() + self.test_to_string() + + def test_to_string_with_dest_unreach(self): + self.setUp_with_dest_unreach() + self.test_to_string() + + def test_to_string_with_TimeExceeded(self): + self.setUp_with_TimeExceeded() + self.test_to_string() + + def test_default_args(self): + ic = icmp.icmp() + buf = ic.serialize(bytearray(), None) + res = struct.unpack(icmp.icmp._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], 8) + eq_(res[1], 0) + eq_(buf[4:], b'\x00\x00\x00\x00') + + # with data + ic = icmp.icmp(type_=icmp.ICMP_DEST_UNREACH, data=icmp.dest_unreach()) + buf = ic.serialize(bytearray(), None) + res = struct.unpack(icmp.icmp._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], 3) + eq_(res[1], 0) + eq_(buf[4:], b'\x00\x00\x00\x00') + + def test_json(self): + jsondict = self.ic.to_jsondict() + ic = icmp.icmp.from_jsondict(jsondict['icmp']) + eq_(str(self.ic), str(ic)) + + def test_json_with_echo(self): + self.setUp_with_echo() + self.test_json() + + def test_json_with_dest_unreach(self): + self.setUp_with_dest_unreach() + self.test_json() + + def test_json_with_TimeExceeded(self): + self.setUp_with_TimeExceeded() + self.test_json() + + +class Test_echo(unittest.TestCase): + + def setUp(self): + self.id_ = 13379 + self.seq = 1 + self.data = b'\x30\x0e\x09\x00\x00\x00\x00\x00' \ + + b'\x10\x11\x12\x13\x14\x15\x16\x17' \ + + b'\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' \ + + b'\x20\x21\x22\x23\x24\x25\x26\x27' \ + + b'\x28\x29\x2a\x2b\x2c\x2d\x2e\x2f' \ + + b'\x30\x31\x32\x33\x34\x35\x36\x37' + self.echo = icmp.echo( + self.id_, self.seq, self.data) + self.buf = struct.pack('!HH', self.id_, self.seq) + self.buf += self.data + + def test_init(self): + eq_(self.id_, self.echo.id) + eq_(self.seq, self.echo.seq) + eq_(self.data, self.echo.data) + + def test_parser(self): + _res = icmp.echo.parser(self.buf, 0) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.id_, res.id) + eq_(self.seq, res.seq) + eq_(self.data, res.data) + + def test_serialize(self): + buf = self.echo.serialize() + res = struct.unpack_from('!HH', six.binary_type(buf)) + eq_(self.id_, res[0]) + eq_(self.seq, res[1]) + eq_(self.data, buf[struct.calcsize('!HH'):]) + + def test_default_args(self): + ec = icmp.echo() + buf = ec.serialize() + res = struct.unpack(icmp.echo._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0) + eq_(res[1], 0) + + +class Test_dest_unreach(unittest.TestCase): + + def setUp(self): + self.mtu = 10 + self.data = b'abc' + self.data_len = len(self.data) + self.dest_unreach = icmp.dest_unreach( + data_len=self.data_len, mtu=self.mtu, data=self.data) + self.buf = struct.pack('!xBH', self.data_len, self.mtu) + self.buf += self.data + + def test_init(self): + eq_(self.data_len, self.dest_unreach.data_len) + eq_(self.mtu, self.dest_unreach.mtu) + eq_(self.data, self.dest_unreach.data) + + def test_parser(self): + _res = icmp.dest_unreach.parser(self.buf, 0) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.data_len, res.data_len) + eq_(self.mtu, res.mtu) + eq_(self.data, res.data) + + def test_serialize(self): + buf = self.dest_unreach.serialize() + res = struct.unpack_from('!xBH', six.binary_type(buf)) + eq_(self.data_len, res[0]) + eq_(self.mtu, res[1]) + eq_(self.data, buf[struct.calcsize('!xBH'):]) + + def test_default_args(self): + du = icmp.dest_unreach() + buf = du.serialize() + res = struct.unpack(icmp.dest_unreach._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0) + eq_(res[1], 0) + + +class Test_TimeExceeded(unittest.TestCase): + + def setUp(self): + self.data = b'abc' + self.data_len = len(self.data) + self.te = icmp.TimeExceeded( + data_len=self.data_len, data=self.data) + self.buf = struct.pack('!xBxx', self.data_len) + self.buf += self.data + + def test_init(self): + eq_(self.data_len, self.te.data_len) + eq_(self.data, self.te.data) + + def test_parser(self): + _res = icmp.TimeExceeded.parser(self.buf, 0) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.data_len, res.data_len) + eq_(self.data, res.data) + + def test_serialize(self): + buf = self.te.serialize() + res = struct.unpack_from('!xBxx', six.binary_type(buf)) + eq_(self.data_len, res[0]) + eq_(self.data, buf[struct.calcsize('!xBxx'):]) + + def test_default_args(self): + te = icmp.TimeExceeded() + buf = te.serialize() + res = struct.unpack(icmp.TimeExceeded._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0) diff --git a/tests/unit/packet/test_icmpv6.py b/tests/unit/packet/test_icmpv6.py new file mode 100644 index 00000000..c6438171 --- /dev/null +++ b/tests/unit/packet/test_icmpv6.py @@ -0,0 +1,2039 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import six +import struct +import inspect + +from nose.tools import ok_, eq_, nottest, raises +from ryu.ofproto import ether, inet +from ryu.lib.packet.ethernet import ethernet +from ryu.lib.packet.packet import Packet +from ryu.lib.packet import icmpv6 +from ryu.lib.packet.ipv6 import ipv6 +from ryu.lib.packet import packet_utils +from ryu.lib import addrconv + + +LOG = logging.getLogger(__name__) + + +def icmpv6_csum(prev, buf): + ph = struct.pack('!16s16sI3xB', + addrconv.ipv6.text_to_bin(prev.src), + addrconv.ipv6.text_to_bin(prev.dst), + prev.payload_length, prev.nxt) + h = bytearray(buf) + struct.pack_into('!H', h, 2, 0) + + return packet_utils.checksum(ph + h) + + +class Test_icmpv6_header(unittest.TestCase): + type_ = 255 + code = 0 + csum = 207 + buf = b'\xff\x00\x00\xcf' + icmp = icmpv6.icmpv6(type_, code, 0) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.type_, self.icmp.type_) + eq_(self.code, self.icmp.code) + eq_(0, self.icmp.csum) + + def test_parser(self): + msg, n, _ = self.icmp.parser(self.buf) + + eq_(msg.type_, self.type_) + eq_(msg.code, self.code) + eq_(msg.csum, self.csum) + eq_(msg.data, None) + eq_(n, None) + + def test_serialize(self): + src_ipv6 = 'fe80::200:ff:fe00:ef' + dst_ipv6 = 'fe80::200:ff:fe00:1' + prev = ipv6(6, 0, 0, 4, 58, 255, src_ipv6, dst_ipv6) + + buf = self.icmp.serialize(bytearray(), prev) + (type_, code, csum) = struct.unpack(self.icmp._PACK_STR, six.binary_type(buf)) + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, self.csum) + + @raises(Exception) + def test_malformed_icmpv6(self): + m_short_buf = self.buf[1:self.icmp._MIN_LEN] + self.icmp.parser(m_short_buf) + + def test_default_args(self): + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6() + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + def test_json(self): + jsondict = self.icmp.to_jsondict() + icmp = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) + eq_(str(self.icmp), str(icmp)) + + +class Test_icmpv6_echo_request(unittest.TestCase): + type_ = 128 + code = 0 + csum = 0xa572 + id_ = 0x7620 + seq = 0 + data = b'\x01\xc9\xe7\x36\xd3\x39\x06\x00' + buf = b'\x80\x00\xa5\x72\x76\x20\x00\x00' + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + echo = icmpv6.echo(0, 0) + eq_(echo.id, 0) + eq_(echo.seq, 0) + eq_(echo.data, None) + + def _test_parser(self, data=None): + buf = self.buf + (data or b'') + msg, n, _ = icmpv6.icmpv6.parser(buf) + + eq_(msg.type_, self.type_) + eq_(msg.code, self.code) + eq_(msg.csum, self.csum) + eq_(msg.data.id, self.id_) + eq_(msg.data.seq, self.seq) + eq_(msg.data.data, data) + eq_(n, None) + + def test_parser_without_data(self): + self._test_parser() + + def test_parser_with_data(self): + self._test_parser(self.data) + + def _test_serialize(self, echo_data=None): + buf = self.buf + (echo_data or b'') + src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' + dst_ipv6 = '3ffe:501:0:1001::2' + prev = ipv6(6, 0, 0, len(buf), 64, 255, src_ipv6, dst_ipv6) + echo_csum = icmpv6_csum(prev, buf) + + echo = icmpv6.echo(self.id_, self.seq, echo_data) + icmp = icmpv6.icmpv6(self.type_, self.code, 0, echo) + buf = six.binary_type(icmp.serialize(bytearray(), prev)) + + (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) + (id_, seq) = struct.unpack_from(echo._PACK_STR, buf, icmp._MIN_LEN) + data = buf[(icmp._MIN_LEN + echo._MIN_LEN):] + data = data if len(data) != 0 else None + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, echo_csum) + eq_(id_, self.id_) + eq_(seq, self.seq) + eq_(data, echo_data) + + def test_serialize_without_data(self): + self._test_serialize() + + def test_serialize_with_data(self): + self._test_serialize(self.data) + + def test_to_string(self): + ec = icmpv6.echo(self.id_, self.seq, self.data) + ic = icmpv6.icmpv6(self.type_, self.code, self.csum, ec) + + echo_values = {'id': self.id_, + 'seq': self.seq, + 'data': self.data} + _echo_str = ','.join(['%s=%s' % (k, repr(echo_values[k])) + for k, v in inspect.getmembers(ec) + if k in echo_values]) + echo_str = '%s(%s)' % (icmpv6.echo.__name__, _echo_str) + + icmp_values = {'type_': repr(self.type_), + 'code': repr(self.code), + 'csum': repr(self.csum), + 'data': echo_str} + _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) + for k, v in inspect.getmembers(ic) + if k in icmp_values]) + ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) + + eq_(str(ic), ic_str) + eq_(repr(ic), ic_str) + + def test_default_args(self): + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ICMPV6_ECHO_REQUEST, data=icmpv6.echo()) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ICMPV6_ECHO_REQUEST) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.echo._PACK_STR, six.binary_type(buf[4:])) + + eq_(res[0], 0) + eq_(res[1], 0) + + def test_json(self): + ec = icmpv6.echo(self.id_, self.seq, self.data) + ic1 = icmpv6.icmpv6(self.type_, self.code, self.csum, ec) + jsondict = ic1.to_jsondict() + ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) + eq_(str(ic1), str(ic2)) + + +class Test_icmpv6_echo_reply(Test_icmpv6_echo_request): + def setUp(self): + self.type_ = 129 + self.csum = 0xa472 + self.buf = b'\x81\x00\xa4\x72\x76\x20\x00\x00' + + def test_default_args(self): + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ICMPV6_ECHO_REPLY, data=icmpv6.echo()) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ICMPV6_ECHO_REPLY) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.echo._PACK_STR, six.binary_type(buf[4:])) + + eq_(res[0], 0) + eq_(res[1], 0) + + +class Test_icmpv6_neighbor_solicit(unittest.TestCase): + type_ = 135 + code = 0 + csum = 0x952d + res = 0 + dst = '3ffe:507:0:1:200:86ff:fe05:80da' + nd_type = 1 + nd_length = 1 + nd_hw_src = '00:60:97:07:69:ea' + data = b'\x01\x01\x00\x60\x97\x07\x69\xea' + buf = b'\x87\x00\x95\x2d\x00\x00\x00\x00' \ + + b'\x3f\xfe\x05\x07\x00\x00\x00\x01' \ + + b'\x02\x00\x86\xff\xfe\x05\x80\xda' + src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' + dst_ipv6 = '3ffe:501:0:1001::2' + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + nd = icmpv6.nd_neighbor(self.res, self.dst) + eq_(nd.res, self.res) + eq_(nd.dst, self.dst) + eq_(nd.option, None) + + def _test_parser(self, data=None): + buf = self.buf + (data or b'') + msg, n, _ = icmpv6.icmpv6.parser(buf) + + eq_(msg.type_, self.type_) + eq_(msg.code, self.code) + eq_(msg.csum, self.csum) + eq_(msg.data.res, self.res) + eq_(addrconv.ipv6.text_to_bin(msg.data.dst), + addrconv.ipv6.text_to_bin(self.dst)) + eq_(n, None) + if data: + nd = msg.data.option + eq_(nd.length, self.nd_length) + eq_(nd.hw_src, self.nd_hw_src) + eq_(nd.data, None) + + def test_parser_without_data(self): + self._test_parser() + + def test_parser_with_data(self): + self._test_parser(self.data) + + def test_serialize_without_data(self): + nd = icmpv6.nd_neighbor(self.res, self.dst) + prev = ipv6(6, 0, 0, 24, 64, 255, self.src_ipv6, self.dst_ipv6) + nd_csum = icmpv6_csum(prev, self.buf) + + icmp = icmpv6.icmpv6(self.type_, self.code, 0, nd) + buf = six.binary_type(icmp.serialize(bytearray(), prev)) + + (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) + (res, dst) = struct.unpack_from(nd._PACK_STR, buf, icmp._MIN_LEN) + data = buf[(icmp._MIN_LEN + nd._MIN_LEN):] + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, nd_csum) + eq_(res >> 29, self.res) + eq_(dst, addrconv.ipv6.text_to_bin(self.dst)) + eq_(data, b'') + + def test_serialize_with_data(self): + nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) + nd = icmpv6.nd_neighbor(self.res, self.dst, nd_opt) + prev = ipv6(6, 0, 0, 32, 64, 255, self.src_ipv6, self.dst_ipv6) + nd_csum = icmpv6_csum(prev, self.buf + self.data) + + icmp = icmpv6.icmpv6(self.type_, self.code, 0, nd) + buf = six.binary_type(icmp.serialize(bytearray(), prev)) + + (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) + (res, dst) = struct.unpack_from(nd._PACK_STR, buf, icmp._MIN_LEN) + (nd_type, nd_length, nd_hw_src) = struct.unpack_from( + nd_opt._PACK_STR, buf, icmp._MIN_LEN + nd._MIN_LEN) + data = buf[(icmp._MIN_LEN + nd._MIN_LEN + 8):] + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, nd_csum) + eq_(res >> 29, self.res) + eq_(dst, addrconv.ipv6.text_to_bin(self.dst)) + eq_(nd_type, self.nd_type) + eq_(nd_length, self.nd_length) + eq_(nd_hw_src, addrconv.mac.text_to_bin(self.nd_hw_src)) + + def test_to_string(self): + nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) + nd = icmpv6.nd_neighbor(self.res, self.dst, nd_opt) + ic = icmpv6.icmpv6(self.type_, self.code, self.csum, nd) + + nd_opt_values = {'length': self.nd_length, + 'hw_src': self.nd_hw_src, + 'data': None} + _nd_opt_str = ','.join(['%s=%s' % (k, repr(nd_opt_values[k])) + for k, v in inspect.getmembers(nd_opt) + if k in nd_opt_values]) + nd_opt_str = '%s(%s)' % (icmpv6.nd_option_sla.__name__, _nd_opt_str) + + nd_values = {'res': repr(nd.res), + 'dst': repr(self.dst), + 'option': nd_opt_str} + _nd_str = ','.join(['%s=%s' % (k, nd_values[k]) + for k, v in inspect.getmembers(nd) + if k in nd_values]) + nd_str = '%s(%s)' % (icmpv6.nd_neighbor.__name__, _nd_str) + + icmp_values = {'type_': repr(self.type_), + 'code': repr(self.code), + 'csum': repr(self.csum), + 'data': nd_str} + _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) + for k, v in inspect.getmembers(ic) + if k in icmp_values]) + ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) + + eq_(str(ic), ic_str) + eq_(repr(ic), ic_str) + + def test_default_args(self): + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_NEIGHBOR_SOLICIT, data=icmpv6.nd_neighbor()) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_NEIGHBOR_SOLICIT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_neighbor._PACK_STR, six.binary_type(buf[4:])) + + eq_(res[0], 0) + eq_(res[1], addrconv.ipv6.text_to_bin('::')) + + # with nd_option_sla + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_NEIGHBOR_SOLICIT, + data=icmpv6.nd_neighbor( + option=icmpv6.nd_option_sla())) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_NEIGHBOR_SOLICIT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_neighbor._PACK_STR, + six.binary_type(buf[4:24])) + + eq_(res[0], 0) + eq_(res[1], addrconv.ipv6.text_to_bin('::')) + + res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, + six.binary_type(buf[24:])) + + eq_(res[0], icmpv6.ND_OPTION_SLA) + eq_(res[1], len(icmpv6.nd_option_sla()) // 8) + eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + def test_json(self): + nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) + nd = icmpv6.nd_neighbor(self.res, self.dst, nd_opt) + ic1 = icmpv6.icmpv6(self.type_, self.code, self.csum, nd) + jsondict = ic1.to_jsondict() + ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) + eq_(str(ic1), str(ic2)) + + +class Test_icmpv6_neighbor_advert(Test_icmpv6_neighbor_solicit): + def setUp(self): + self.type_ = 136 + self.csum = 0xb8ba + self.res = 7 + self.dst = '3ffe:507:0:1:260:97ff:fe07:69ea' + self.nd_type = 2 + self.nd_length = 1 + self.nd_data = None + self.nd_hw_src = '00:60:97:07:69:ea' + self.data = b'\x02\x01\x00\x60\x97\x07\x69\xea' + self.buf = b'\x88\x00\xb8\xba\xe0\x00\x00\x00' \ + + b'\x3f\xfe\x05\x07\x00\x00\x00\x01' \ + + b'\x02\x60\x97\xff\xfe\x07\x69\xea' + + def test_serialize_with_data(self): + nd_opt = icmpv6.nd_option_tla(self.nd_length, self.nd_hw_src) + nd = icmpv6.nd_neighbor(self.res, self.dst, nd_opt) + prev = ipv6(6, 0, 0, 32, 64, 255, self.src_ipv6, self.dst_ipv6) + nd_csum = icmpv6_csum(prev, self.buf + self.data) + + icmp = icmpv6.icmpv6(self.type_, self.code, 0, nd) + buf = six.binary_type(icmp.serialize(bytearray(), prev)) + + (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) + (res, dst) = struct.unpack_from(nd._PACK_STR, buf, icmp._MIN_LEN) + (nd_type, nd_length, nd_hw_src) = struct.unpack_from( + nd_opt._PACK_STR, buf, icmp._MIN_LEN + nd._MIN_LEN) + data = buf[(icmp._MIN_LEN + nd._MIN_LEN + 8):] + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, nd_csum) + eq_(res >> 29, self.res) + eq_(dst, addrconv.ipv6.text_to_bin(self.dst)) + eq_(nd_type, self.nd_type) + eq_(nd_length, self.nd_length) + eq_(nd_hw_src, addrconv.mac.text_to_bin(self.nd_hw_src)) + + def test_to_string(self): + nd_opt = icmpv6.nd_option_tla(self.nd_length, self.nd_hw_src) + nd = icmpv6.nd_neighbor(self.res, self.dst, nd_opt) + ic = icmpv6.icmpv6(self.type_, self.code, self.csum, nd) + + nd_opt_values = {'length': self.nd_length, + 'hw_src': self.nd_hw_src, + 'data': None} + _nd_opt_str = ','.join(['%s=%s' % (k, repr(nd_opt_values[k])) + for k, v in inspect.getmembers(nd_opt) + if k in nd_opt_values]) + nd_opt_str = '%s(%s)' % (icmpv6.nd_option_tla.__name__, _nd_opt_str) + + nd_values = {'res': repr(nd.res), + 'dst': repr(self.dst), + 'option': nd_opt_str} + _nd_str = ','.join(['%s=%s' % (k, nd_values[k]) + for k, v in inspect.getmembers(nd) + if k in nd_values]) + nd_str = '%s(%s)' % (icmpv6.nd_neighbor.__name__, _nd_str) + + icmp_values = {'type_': repr(self.type_), + 'code': repr(self.code), + 'csum': repr(self.csum), + 'data': nd_str} + _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) + for k, v in inspect.getmembers(ic) + if k in icmp_values]) + ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) + + eq_(str(ic), ic_str) + eq_(repr(ic), ic_str) + + def test_default_args(self): + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_NEIGHBOR_ADVERT, data=icmpv6.nd_neighbor()) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_NEIGHBOR_ADVERT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_neighbor._PACK_STR, six.binary_type(buf[4:])) + + eq_(res[0], 0) + eq_(res[1], addrconv.ipv6.text_to_bin('::')) + + # with nd_option_tla + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_NEIGHBOR_ADVERT, + data=icmpv6.nd_neighbor( + option=icmpv6.nd_option_tla())) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_NEIGHBOR_ADVERT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_neighbor._PACK_STR, + six.binary_type(buf[4:24])) + + eq_(res[0], 0) + eq_(res[1], addrconv.ipv6.text_to_bin('::')) + + res = struct.unpack(icmpv6.nd_option_tla._PACK_STR, + six.binary_type(buf[24:])) + + eq_(res[0], icmpv6.ND_OPTION_TLA) + eq_(res[1], len(icmpv6.nd_option_tla()) // 8) + eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + +class Test_icmpv6_router_solicit(unittest.TestCase): + type_ = 133 + code = 0 + csum = 0x97d9 + res = 0 + nd_type = 1 + nd_length = 1 + nd_hw_src = '12:2d:a5:6d:bc:0f' + data = b'\x00\x00\x00\x00\x01\x01\x12\x2d\xa5\x6d\xbc\x0f' + buf = b'\x85\x00\x97\xd9' + src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' + dst_ipv6 = '3ffe:501:0:1001::2' + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + rs = icmpv6.nd_router_solicit(self.res) + eq_(rs.res, self.res) + eq_(rs.option, None) + + def _test_parser(self, data=None): + buf = self.buf + (data or b'') + msg, n, _ = icmpv6.icmpv6.parser(buf) + + eq_(msg.type_, self.type_) + eq_(msg.code, self.code) + eq_(msg.csum, self.csum) + if data is not None: + eq_(msg.data.res, self.res) + eq_(n, None) + if data: + rs = msg.data.option + eq_(rs.length, self.nd_length) + eq_(rs.hw_src, self.nd_hw_src) + eq_(rs.data, None) + + def test_parser_without_data(self): + self._test_parser() + + def test_parser_with_data(self): + self._test_parser(self.data) + + def test_serialize_without_data(self): + rs = icmpv6.nd_router_solicit(self.res) + prev = ipv6(6, 0, 0, 8, 64, 255, self.src_ipv6, self.dst_ipv6) + rs_csum = icmpv6_csum(prev, self.buf) + + icmp = icmpv6.icmpv6(self.type_, self.code, 0, rs) + buf = six.binary_type(icmp.serialize(bytearray(), prev)) + + (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) + res = struct.unpack_from(rs._PACK_STR, buf, icmp._MIN_LEN) + data = buf[(icmp._MIN_LEN + rs._MIN_LEN):] + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, rs_csum) + eq_(res[0], self.res) + eq_(data, b'') + + def test_serialize_with_data(self): + nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) + rs = icmpv6.nd_router_solicit(self.res, nd_opt) + prev = ipv6(6, 0, 0, 16, 64, 255, self.src_ipv6, self.dst_ipv6) + rs_csum = icmpv6_csum(prev, self.buf + self.data) + + icmp = icmpv6.icmpv6(self.type_, self.code, 0, rs) + buf = six.binary_type(icmp.serialize(bytearray(), prev)) + + (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) + res = struct.unpack_from(rs._PACK_STR, buf, icmp._MIN_LEN) + (nd_type, nd_length, nd_hw_src) = struct.unpack_from( + nd_opt._PACK_STR, buf, icmp._MIN_LEN + rs._MIN_LEN) + data = buf[(icmp._MIN_LEN + rs._MIN_LEN + 8):] + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, rs_csum) + eq_(res[0], self.res) + eq_(nd_type, self.nd_type) + eq_(nd_length, self.nd_length) + eq_(nd_hw_src, addrconv.mac.text_to_bin(self.nd_hw_src)) + + def test_to_string(self): + nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) + rs = icmpv6.nd_router_solicit(self.res, nd_opt) + ic = icmpv6.icmpv6(self.type_, self.code, self.csum, rs) + + nd_opt_values = {'length': self.nd_length, + 'hw_src': self.nd_hw_src, + 'data': None} + _nd_opt_str = ','.join(['%s=%s' % (k, repr(nd_opt_values[k])) + for k, v in inspect.getmembers(nd_opt) + if k in nd_opt_values]) + nd_opt_str = '%s(%s)' % (icmpv6.nd_option_sla.__name__, _nd_opt_str) + + rs_values = {'res': repr(rs.res), + 'option': nd_opt_str} + _rs_str = ','.join(['%s=%s' % (k, rs_values[k]) + for k, v in inspect.getmembers(rs) + if k in rs_values]) + rs_str = '%s(%s)' % (icmpv6.nd_router_solicit.__name__, _rs_str) + + icmp_values = {'type_': repr(self.type_), + 'code': repr(self.code), + 'csum': repr(self.csum), + 'data': rs_str} + _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) + for k, v in inspect.getmembers(ic) + if k in icmp_values]) + ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) + + eq_(str(ic), ic_str) + eq_(repr(ic), ic_str) + + def test_default_args(self): + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_ROUTER_SOLICIT, data=icmpv6.nd_router_solicit()) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_ROUTER_SOLICIT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_router_solicit._PACK_STR, + six.binary_type(buf[4:])) + + eq_(res[0], 0) + + # with nd_option_sla + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_ROUTER_SOLICIT, + data=icmpv6.nd_router_solicit( + option=icmpv6.nd_option_sla())) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_ROUTER_SOLICIT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_router_solicit._PACK_STR, + six.binary_type(buf[4:8])) + + eq_(res[0], 0) + + res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, + six.binary_type(buf[8:])) + + eq_(res[0], icmpv6.ND_OPTION_SLA) + eq_(res[1], len(icmpv6.nd_option_sla()) // 8) + eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + def test_json(self): + nd_opt = icmpv6.nd_option_sla(self.nd_length, self.nd_hw_src) + rs = icmpv6.nd_router_solicit(self.res, nd_opt) + ic1 = icmpv6.icmpv6(self.type_, self.code, self.csum, rs) + jsondict = ic1.to_jsondict() + ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) + eq_(str(ic1), str(ic2)) + + +class Test_icmpv6_router_advert(unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_default_args(self): + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_ROUTER_ADVERT, data=icmpv6.nd_router_advert()) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_ROUTER_ADVERT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_router_advert._PACK_STR, + six.binary_type(buf[4:])) + + eq_(res[0], 0) + eq_(res[1], 0) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 0) + + # with nd_option_sla + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_ROUTER_ADVERT, + data=icmpv6.nd_router_advert( + options=[icmpv6.nd_option_sla()])) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_ROUTER_ADVERT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_router_advert._PACK_STR, + six.binary_type(buf[4:16])) + + eq_(res[0], 0) + eq_(res[1], 0) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 0) + + res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, + six.binary_type(buf[16:])) + + eq_(res[0], icmpv6.ND_OPTION_SLA) + eq_(res[1], len(icmpv6.nd_option_sla()) // 8) + eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + # with nd_option_pi + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_ROUTER_ADVERT, + data=icmpv6.nd_router_advert( + options=[icmpv6.nd_option_pi()])) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_ROUTER_ADVERT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_router_advert._PACK_STR, + six.binary_type(buf[4:16])) + + eq_(res[0], 0) + eq_(res[1], 0) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 0) + + res = struct.unpack(icmpv6.nd_option_pi._PACK_STR, + six.binary_type(buf[16:])) + + eq_(res[0], icmpv6.ND_OPTION_PI) + eq_(res[1], 4) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 0) + eq_(res[5], 0) + eq_(res[6], 0) + eq_(res[7], addrconv.ipv6.text_to_bin('::')) + + # with nd_option_sla and nd_option_pi + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_ROUTER_ADVERT, + data=icmpv6.nd_router_advert( + options=[icmpv6.nd_option_sla(), icmpv6.nd_option_pi()])) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_ROUTER_ADVERT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_router_advert._PACK_STR, + six.binary_type(buf[4:16])) + + eq_(res[0], 0) + eq_(res[1], 0) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 0) + + res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, + six.binary_type(buf[16:24])) + + eq_(res[0], icmpv6.ND_OPTION_SLA) + eq_(res[1], len(icmpv6.nd_option_sla()) // 8) + eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + res = struct.unpack(icmpv6.nd_option_pi._PACK_STR, + six.binary_type(buf[24:])) + + eq_(res[0], icmpv6.ND_OPTION_PI) + eq_(res[1], len(icmpv6.nd_option_pi()) // 8) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 0) + eq_(res[5], 0) + eq_(res[6], 0) + eq_(res[7], addrconv.ipv6.text_to_bin('::')) + + def test_json(self): + ic1 = icmpv6.icmpv6( + type_=icmpv6.ND_ROUTER_ADVERT, + data=icmpv6.nd_router_advert( + options=[icmpv6.nd_option_sla(), icmpv6.nd_option_pi()])) + jsondict = ic1.to_jsondict() + ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) + eq_(str(ic1), str(ic2)) + + +class Test_icmpv6_nd_option_la(unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_default_args(self): + la = icmpv6.nd_option_sla() + buf = la.serialize() + res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, six.binary_type(buf)) + + eq_(res[0], icmpv6.ND_OPTION_SLA) + eq_(res[1], len(icmpv6.nd_option_sla()) // 8) + eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + # with nd_neighbor + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_NEIGHBOR_ADVERT, + data=icmpv6.nd_neighbor( + option=icmpv6.nd_option_tla())) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_NEIGHBOR_ADVERT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_neighbor._PACK_STR, + six.binary_type(buf[4:24])) + + eq_(res[0], 0) + eq_(res[1], addrconv.ipv6.text_to_bin('::')) + + res = struct.unpack(icmpv6.nd_option_tla._PACK_STR, + six.binary_type(buf[24:])) + + eq_(res[0], icmpv6.ND_OPTION_TLA) + eq_(res[1], len(icmpv6.nd_option_tla()) // 8) + eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + # with nd_router_solicit + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_ROUTER_SOLICIT, + data=icmpv6.nd_router_solicit( + option=icmpv6.nd_option_sla())) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_ROUTER_SOLICIT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_router_solicit._PACK_STR, + six.binary_type(buf[4:8])) + + eq_(res[0], 0) + + res = struct.unpack(icmpv6.nd_option_sla._PACK_STR, + six.binary_type(buf[8:])) + + eq_(res[0], icmpv6.ND_OPTION_SLA) + eq_(res[1], len(icmpv6.nd_option_sla()) // 8) + eq_(res[2], addrconv.mac.text_to_bin('00:00:00:00:00:00')) + + +class Test_icmpv6_nd_option_pi(unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_default_args(self): + pi = icmpv6.nd_option_pi() + buf = pi.serialize() + res = struct.unpack(icmpv6.nd_option_pi._PACK_STR, six.binary_type(buf)) + + eq_(res[0], icmpv6.ND_OPTION_PI) + eq_(res[1], len(icmpv6.nd_option_pi()) // 8) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 0) + eq_(res[5], 0) + eq_(res[6], 0) + eq_(res[7], addrconv.ipv6.text_to_bin('::')) + + # with nd_router_advert + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.ND_ROUTER_ADVERT, + data=icmpv6.nd_router_advert( + options=[icmpv6.nd_option_pi()])) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.ND_ROUTER_ADVERT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.nd_router_advert._PACK_STR, + six.binary_type(buf[4:16])) + + eq_(res[0], 0) + eq_(res[1], 0) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 0) + + res = struct.unpack(icmpv6.nd_option_pi._PACK_STR, + six.binary_type(buf[16:])) + + eq_(res[0], icmpv6.ND_OPTION_PI) + eq_(res[1], 4) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 0) + eq_(res[5], 0) + eq_(res[6], 0) + eq_(res[7], addrconv.ipv6.text_to_bin('::')) + + +class Test_icmpv6_membership_query(unittest.TestCase): + type_ = 130 + code = 0 + csum = 0xb5a4 + maxresp = 10000 + address = 'ff08::1' + buf = b'\x82\x00\xb5\xa4\x27\x10\x00\x00' \ + + b'\xff\x08\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + mld = icmpv6.mld(self.maxresp, self.address) + eq_(mld.maxresp, self.maxresp) + eq_(mld.address, self.address) + + def test_parser(self): + msg, n, _ = icmpv6.icmpv6.parser(self.buf) + + eq_(msg.type_, self.type_) + eq_(msg.code, self.code) + eq_(msg.csum, self.csum) + eq_(msg.data.maxresp, self.maxresp) + eq_(msg.data.address, self.address) + eq_(n, None) + + def test_serialize(self): + src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' + dst_ipv6 = '3ffe:501:0:1001::2' + prev = ipv6(6, 0, 0, len(self.buf), 64, 255, src_ipv6, dst_ipv6) + mld_csum = icmpv6_csum(prev, self.buf) + + mld = icmpv6.mld(self.maxresp, self.address) + icmp = icmpv6.icmpv6(self.type_, self.code, 0, mld) + buf = six.binary_type(icmp.serialize(bytearray(), prev)) + + (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, buf, 0) + (maxresp, address) = struct.unpack_from( + mld._PACK_STR, buf, icmp._MIN_LEN) + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, mld_csum) + eq_(maxresp, self.maxresp) + eq_(address, addrconv.ipv6.text_to_bin(self.address)) + + def test_to_string(self): + ml = icmpv6.mld(self.maxresp, self.address) + ic = icmpv6.icmpv6(self.type_, self.code, self.csum, ml) + + mld_values = {'maxresp': self.maxresp, + 'address': self.address} + _mld_str = ','.join(['%s=%s' % (k, repr(mld_values[k])) + for k, v in inspect.getmembers(ml) + if k in mld_values]) + mld_str = '%s(%s)' % (icmpv6.mld.__name__, _mld_str) + + icmp_values = {'type_': repr(self.type_), + 'code': repr(self.code), + 'csum': repr(self.csum), + 'data': mld_str} + _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) + for k, v in inspect.getmembers(ic) + if k in icmp_values]) + ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) + + eq_(str(ic), ic_str) + eq_(repr(ic), ic_str) + + def test_default_args(self): + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.MLD_LISTENER_QUERY, data=icmpv6.mld()) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.MLD_LISTENER_QUERY) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.mld._PACK_STR, six.binary_type(buf[4:])) + + eq_(res[0], 0) + eq_(res[1], addrconv.ipv6.text_to_bin('::')) + + def test_json(self): + ic1 = icmpv6.icmpv6( + type_=icmpv6.MLD_LISTENER_QUERY, + data=icmpv6.mld()) + jsondict = ic1.to_jsondict() + ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) + eq_(str(ic1), str(ic2)) + + +class Test_icmpv6_membership_report(Test_icmpv6_membership_query): + type_ = 131 + code = 0 + csum = 0xb4a4 + maxresp = 10000 + address = 'ff08::1' + buf = b'\x83\x00\xb4\xa4\x27\x10\x00\x00' \ + + b'\xff\x08\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' + + def test_json(self): + ic1 = icmpv6.icmpv6( + type_=icmpv6.MLD_LISTENER_REPOR, + data=icmpv6.mld()) + jsondict = ic1.to_jsondict() + ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) + eq_(str(ic1), str(ic2)) + + +class Test_icmpv6_membership_done(Test_icmpv6_membership_query): + type_ = 132 + code = 0 + csum = 0xb3a4 + maxresp = 10000 + address = 'ff08::1' + buf = b'\x84\x00\xb3\xa4\x27\x10\x00\x00' \ + + b'\xff\x08\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' + + def test_json(self): + ic1 = icmpv6.icmpv6( + type_=icmpv6.MLD_LISTENER_DONE, + data=icmpv6.mld()) + jsondict = ic1.to_jsondict() + ic2 = icmpv6.icmpv6.from_jsondict(jsondict['icmpv6']) + eq_(str(ic1), str(ic2)) + + +class Test_mldv2_query(unittest.TestCase): + type_ = 130 + code = 0 + csum = 0xb5a4 + maxresp = 10000 + address = 'ff08::1' + s_flg = 0 + qrv = 2 + s_qrv = s_flg << 3 | qrv + qqic = 10 + num = 0 + srcs = [] + + mld = icmpv6.mldv2_query( + maxresp, address, s_flg, qrv, qqic, num, srcs) + + buf = b'\x82\x00\xb5\xa4\x27\x10\x00\x00' \ + + b'\xff\x08\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ + + b'\x02\x0a\x00\x00' + + def setUp(self): + pass + + def setUp_with_srcs(self): + self.num = 2 + self.srcs = ['ff80::1', 'ff80::2'] + self.mld = icmpv6.mldv2_query( + self.maxresp, self.address, self.s_flg, self.qrv, self.qqic, + self.num, self.srcs) + self.buf = b'\x82\x00\xb5\xa4\x27\x10\x00\x00' \ + + b'\xff\x08\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ + + b'\x02\x0a\x00\x02' \ + + b'\xff\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ + + b'\xff\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x02' + + def tearDown(self): + pass + + def find_protocol(self, pkt, name): + for p in pkt.protocols: + if p.protocol_name == name: + return p + + def test_init(self): + eq_(self.mld.maxresp, self.maxresp) + eq_(self.mld.address, self.address) + eq_(self.mld.s_flg, self.s_flg) + eq_(self.mld.qrv, self.qrv) + eq_(self.mld.qqic, self.qqic) + eq_(self.mld.num, self.num) + eq_(self.mld.srcs, self.srcs) + + def test_init_with_srcs(self): + self.setUp_with_srcs() + self.test_init() + + def test_parser(self): + msg, n, _ = icmpv6.icmpv6.parser(self.buf) + + eq_(msg.type_, self.type_) + eq_(msg.code, self.code) + eq_(msg.csum, self.csum) + eq_(msg.data.maxresp, self.maxresp) + eq_(msg.data.address, self.address) + eq_(msg.data.s_flg, self.s_flg) + eq_(msg.data.qrv, self.qrv) + eq_(msg.data.qqic, self.qqic) + eq_(msg.data.num, self.num) + eq_(msg.data.srcs, self.srcs) + eq_(n, None) + + def test_parser_with_srcs(self): + self.setUp_with_srcs() + self.test_parser() + + def test_serialize(self): + src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' + dst_ipv6 = '3ffe:501:0:1001::2' + prev = ipv6(6, 0, 0, len(self.buf), 64, 255, src_ipv6, dst_ipv6) + mld_csum = icmpv6_csum(prev, self.buf) + + icmp = icmpv6.icmpv6(self.type_, self.code, 0, self.mld) + buf = icmp.serialize(bytearray(), prev) + + (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, + six.binary_type(buf)) + (maxresp, address, s_qrv, qqic, num) = struct.unpack_from( + self.mld._PACK_STR, six.binary_type(buf), icmp._MIN_LEN) + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, mld_csum) + eq_(maxresp, self.maxresp) + eq_(address, addrconv.ipv6.text_to_bin(self.address)) + s_flg = (s_qrv >> 3) & 0b1 + qrv = s_qrv & 0b111 + eq_(s_flg, self.s_flg) + eq_(qrv, self.qrv) + eq_(qqic, self.qqic) + eq_(num, self.num) + + def test_serialize_with_srcs(self): + self.setUp_with_srcs() + src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' + dst_ipv6 = '3ffe:501:0:1001::2' + prev = ipv6(6, 0, 0, len(self.buf), 64, 255, src_ipv6, dst_ipv6) + mld_csum = icmpv6_csum(prev, self.buf) + + icmp = icmpv6.icmpv6(self.type_, self.code, 0, self.mld) + buf = icmp.serialize(bytearray(), prev) + + (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, + six.binary_type(buf)) + (maxresp, address, s_qrv, qqic, num) = struct.unpack_from( + self.mld._PACK_STR, six.binary_type(buf), icmp._MIN_LEN) + (addr1, addr2) = struct.unpack_from( + '!16s16s', six.binary_type(buf), icmp._MIN_LEN + self.mld._MIN_LEN) + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, mld_csum) + eq_(maxresp, self.maxresp) + eq_(address, addrconv.ipv6.text_to_bin(self.address)) + s_flg = (s_qrv >> 3) & 0b1 + qrv = s_qrv & 0b111 + eq_(s_flg, self.s_flg) + eq_(qrv, self.qrv) + eq_(qqic, self.qqic) + eq_(num, self.num) + eq_(addr1, addrconv.ipv6.text_to_bin(self.srcs[0])) + eq_(addr2, addrconv.ipv6.text_to_bin(self.srcs[1])) + + def _build_mldv2_query(self): + e = ethernet(ethertype=ether.ETH_TYPE_IPV6) + i = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6(type_=icmpv6.MLD_LISTENER_QUERY, + data=self.mld) + p = e / i / ic + return p + + def test_build_mldv2_query(self): + p = self._build_mldv2_query() + + e = self.find_protocol(p, "ethernet") + ok_(e) + eq_(e.ethertype, ether.ETH_TYPE_IPV6) + + i = self.find_protocol(p, "ipv6") + ok_(i) + eq_(i.nxt, inet.IPPROTO_ICMPV6) + + ic = self.find_protocol(p, "icmpv6") + ok_(ic) + eq_(ic.type_, icmpv6.MLD_LISTENER_QUERY) + + eq_(ic.data.maxresp, self.maxresp) + eq_(ic.data.address, self.address) + eq_(ic.data.s_flg, self.s_flg) + eq_(ic.data.qrv, self.qrv) + eq_(ic.data.num, self.num) + eq_(ic.data.srcs, self.srcs) + + def test_build_mldv2_query_with_srcs(self): + self.setUp_with_srcs() + self.test_build_mldv2_query() + + def test_to_string(self): + ic = icmpv6.icmpv6(self.type_, self.code, self.csum, self.mld) + + mld_values = {'maxresp': self.maxresp, + 'address': self.address, + 's_flg': self.s_flg, + 'qrv': self.qrv, + 'qqic': self.qqic, + 'num': self.num, + 'srcs': self.srcs} + _mld_str = ','.join(['%s=%s' % (k, repr(mld_values[k])) + for k, v in inspect.getmembers(self.mld) + if k in mld_values]) + mld_str = '%s(%s)' % (icmpv6.mldv2_query.__name__, _mld_str) + + icmp_values = {'type_': repr(self.type_), + 'code': repr(self.code), + 'csum': repr(self.csum), + 'data': mld_str} + _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) + for k, v in inspect.getmembers(ic) + if k in icmp_values]) + ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) + + eq_(str(ic), ic_str) + eq_(repr(ic), ic_str) + + def test_to_string_with_srcs(self): + self.setUp_with_srcs() + self.test_to_string() + + @raises(Exception) + def test_num_larger_than_srcs(self): + self.srcs = ['ff80::1', 'ff80::2', 'ff80::3'] + self.num = len(self.srcs) + 1 + self.buf = pack(icmpv6.mldv2_query._PACK_STR, self.maxresp, + addrconv.ipv6.text_to_bin(self.address), + self.s_qrv, self.qqic, self.num) + for src in self.srcs: + self.buf += pack('16s', addrconv.ipv6.text_to_bin(src)) + self.mld = icmpv6.mldv2_query( + self.maxresp, self.address, self.s_flg, self.qrv, self.qqic, + self.num, self.srcs) + self.test_parser() + + @raises(Exception) + def test_num_smaller_than_srcs(self): + self.srcs = ['ff80::1', 'ff80::2', 'ff80::3'] + self.num = len(self.srcs) - 1 + self.buf = pack(icmpv6.mldv2_query._PACK_STR, self.maxresp, + addrconv.ipv6.text_to_bin(self.address), + self.s_qrv, self.qqic, self.num) + for src in self.srcs: + self.buf += pack('16s', addrconv.ipv6.text_to_bin(src)) + self.mld = icmpv6.mldv2_query( + self.maxresp, self.address, self.s_flg, self.qrv, self.qqic, + self.num, self.srcs) + self.test_parser() + + def test_default_args(self): + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.MLD_LISTENER_QUERY, data=icmpv6.mldv2_query()) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.MLD_LISTENER_QUERY) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.mldv2_query._PACK_STR, six.binary_type(buf[4:])) + + eq_(res[0], 0) + eq_(res[1], addrconv.ipv6.text_to_bin('::')) + eq_(res[2], 2) + eq_(res[3], 0) + eq_(res[4], 0) + + # srcs without num + srcs = ['ff80::1', 'ff80::2', 'ff80::3'] + que = icmpv6.mldv2_query(srcs=srcs) + buf = que.serialize() + res = struct.unpack_from( + icmpv6.mldv2_query._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0) + eq_(res[1], addrconv.ipv6.text_to_bin('::')) + eq_(res[2], 2) + eq_(res[3], 0) + eq_(res[4], len(srcs)) + + (src1, src2, src3) = struct.unpack_from( + '16s16s16s', six.binary_type(buf), icmpv6.mldv2_query._MIN_LEN) + + eq_(src1, addrconv.ipv6.text_to_bin(srcs[0])) + eq_(src2, addrconv.ipv6.text_to_bin(srcs[1])) + eq_(src3, addrconv.ipv6.text_to_bin(srcs[2])) + + def test_json(self): + jsondict = self.mld.to_jsondict() + mld = icmpv6.mldv2_query.from_jsondict(jsondict['mldv2_query']) + eq_(str(self.mld), str(mld)) + + def test_json_with_srcs(self): + self.setUp_with_srcs() + self.test_json() + + +class Test_mldv2_report(unittest.TestCase): + type_ = 143 + code = 0 + csum = 0xb5a4 + record_num = 0 + records = [] + + mld = icmpv6.mldv2_report(record_num, records) + + buf = b'\x8f\x00\xb5\xa4\x00\x00\x00\x00' + + def setUp(self): + pass + + def setUp_with_records(self): + self.record1 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 0, 0, 'ff00::1') + self.record2 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 0, 2, 'ff00::2', + ['fe80::1', 'fe80::2']) + self.record3 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 1, 0, 'ff00::3', [], b'abc\x00') + self.record4 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 2, 2, 'ff00::4', + ['fe80::1', 'fe80::2'], b'abcde\x00\x00\x00') + self.records = [self.record1, self.record2, self.record3, + self.record4] + self.record_num = len(self.records) + self.mld = icmpv6.mldv2_report(self.record_num, self.records) + self.buf = b'\x8f\x00\xb5\xa4\x00\x00\x00\x04' \ + + b'\x01\x00\x00\x00' \ + + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ + + b'\x01\x00\x00\x02' \ + + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x02' \ + + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ + + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x02' \ + + b'\x01\x01\x00\x00' \ + + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x03' \ + + b'\x61\x62\x63\x00' \ + + b'\x01\x02\x00\x02' \ + + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x04' \ + + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ + + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x02' \ + + b'\x61\x62\x63\x64\x65\x00\x00\x00' + + def tearDown(self): + pass + + def find_protocol(self, pkt, name): + for p in pkt.protocols: + if p.protocol_name == name: + return p + + def test_init(self): + eq_(self.mld.record_num, self.record_num) + eq_(self.mld.records, self.records) + + def test_init_with_records(self): + self.setUp_with_records() + self.test_init() + + def test_parser(self): + msg, n, _ = icmpv6.icmpv6.parser(self.buf) + + eq_(msg.type_, self.type_) + eq_(msg.code, self.code) + eq_(msg.csum, self.csum) + eq_(msg.data.record_num, self.record_num) + eq_(repr(msg.data.records), repr(self.records)) + + def test_parser_with_records(self): + self.setUp_with_records() + self.test_parser() + + def test_serialize(self): + src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' + dst_ipv6 = '3ffe:501:0:1001::2' + prev = ipv6(6, 0, 0, len(self.buf), 64, 255, src_ipv6, dst_ipv6) + mld_csum = icmpv6_csum(prev, self.buf) + + icmp = icmpv6.icmpv6(self.type_, self.code, 0, self.mld) + buf = icmp.serialize(bytearray(), prev) + + (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, + six.binary_type(buf)) + (record_num, ) = struct.unpack_from( + self.mld._PACK_STR, six.binary_type(buf), icmp._MIN_LEN) + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, mld_csum) + eq_(record_num, self.record_num) + + def test_serialize_with_records(self): + self.setUp_with_records() + src_ipv6 = '3ffe:507:0:1:200:86ff:fe05:80da' + dst_ipv6 = '3ffe:501:0:1001::2' + prev = ipv6(6, 0, 0, len(self.buf), 64, 255, src_ipv6, dst_ipv6) + mld_csum = icmpv6_csum(prev, self.buf) + + icmp = icmpv6.icmpv6(self.type_, self.code, 0, self.mld) + buf = six.binary_type(icmp.serialize(bytearray(), prev)) + + (type_, code, csum) = struct.unpack_from(icmp._PACK_STR, + six.binary_type(buf)) + (record_num, ) = struct.unpack_from( + self.mld._PACK_STR, six.binary_type(buf), icmp._MIN_LEN) + offset = icmp._MIN_LEN + self.mld._MIN_LEN + rec1 = icmpv6.mldv2_report_group.parser(buf[offset:]) + offset += len(rec1) + rec2 = icmpv6.mldv2_report_group.parser(buf[offset:]) + offset += len(rec2) + rec3 = icmpv6.mldv2_report_group.parser(buf[offset:]) + offset += len(rec3) + rec4 = icmpv6.mldv2_report_group.parser(buf[offset:]) + + eq_(type_, self.type_) + eq_(code, self.code) + eq_(csum, mld_csum) + eq_(record_num, self.record_num) + eq_(repr(rec1), repr(self.record1)) + eq_(repr(rec2), repr(self.record2)) + eq_(repr(rec3), repr(self.record3)) + eq_(repr(rec4), repr(self.record4)) + + def _build_mldv2_report(self): + e = ethernet(ethertype=ether.ETH_TYPE_IPV6) + i = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6(type_=icmpv6.MLDV2_LISTENER_REPORT, + data=self.mld) + p = e / i / ic + return p + + def test_build_mldv2_report(self): + p = self._build_mldv2_report() + + e = self.find_protocol(p, "ethernet") + ok_(e) + eq_(e.ethertype, ether.ETH_TYPE_IPV6) + + i = self.find_protocol(p, "ipv6") + ok_(i) + eq_(i.nxt, inet.IPPROTO_ICMPV6) + + ic = self.find_protocol(p, "icmpv6") + ok_(ic) + eq_(ic.type_, icmpv6.MLDV2_LISTENER_REPORT) + + eq_(ic.data.record_num, self.record_num) + eq_(ic.data.records, self.records) + + def test_build_mldv2_report_with_records(self): + self.setUp_with_records() + self.test_build_mldv2_report() + + def test_to_string(self): + ic = icmpv6.icmpv6(self.type_, self.code, self.csum, self.mld) + + mld_values = {'record_num': self.record_num, + 'records': self.records} + _mld_str = ','.join(['%s=%s' % (k, repr(mld_values[k])) + for k, v in inspect.getmembers(self.mld) + if k in mld_values]) + mld_str = '%s(%s)' % (icmpv6.mldv2_report.__name__, _mld_str) + + icmp_values = {'type_': repr(self.type_), + 'code': repr(self.code), + 'csum': repr(self.csum), + 'data': mld_str} + _ic_str = ','.join(['%s=%s' % (k, icmp_values[k]) + for k, v in inspect.getmembers(ic) + if k in icmp_values]) + ic_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _ic_str) + + eq_(str(ic), ic_str) + eq_(repr(ic), ic_str) + + def test_to_string_with_records(self): + self.setUp_with_records() + self.test_to_string() + + @raises(Exception) + def test_record_num_larger_than_records(self): + self.record1 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 0, 0, 'ff00::1') + self.record2 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 0, 2, 'ff00::2', + ['fe80::1', 'fe80::2']) + self.record3 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 1, 0, 'ff00::3', [], b'abc\x00') + self.record4 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 2, 2, 'ff00::4', + ['fe80::1', 'fe80::2'], b'abcde\x00\x00\x00') + self.records = [self.record1, self.record2, self.record3, + self.record4] + self.record_num = len(self.records) + 1 + self.buf = struct.pack( + icmpv6.mldv2_report._PACK_STR, self.record_num) + self.buf += self.record1.serialize() + self.buf += self.record2.serialize() + self.buf += self.record3.serialize() + self.buf += self.record4.serialize() + self.mld = icmpv6.mldv2_report(self.record_num, self.records) + self.test_parser() + + @raises(Exception) + def test_record_num_smaller_than_records(self): + self.record1 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 0, 0, 'ff00::1') + self.record2 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 0, 2, 'ff00::2', + ['fe80::1', 'fe80::2']) + self.record3 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 1, 0, 'ff00::3', [], b'abc\x00') + self.record4 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 2, 2, 'ff00::4', + ['fe80::1', 'fe80::2'], b'abcde\x00\x00\x00') + self.records = [self.record1, self.record2, self.record3, + self.record4] + self.record_num = len(self.records) - 1 + self.buf = struct.pack( + icmpv6.mldv2_report._PACK_STR, self.record_num) + self.buf += self.record1.serialize() + self.buf += self.record2.serialize() + self.buf += self.record3.serialize() + self.buf += self.record4.serialize() + self.mld = icmpv6.mldv2_report(self.record_num, self.records) + self.test_parser() + + def test_default_args(self): + prev = ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6( + type_=icmpv6.MLDV2_LISTENER_REPORT, data=icmpv6.mldv2_report()) + prev.serialize(ic, None) + buf = ic.serialize(bytearray(), prev) + res = struct.unpack(icmpv6.icmpv6._PACK_STR, six.binary_type(buf[:4])) + + eq_(res[0], icmpv6.MLDV2_LISTENER_REPORT) + eq_(res[1], 0) + eq_(res[2], icmpv6_csum(prev, buf)) + + res = struct.unpack(icmpv6.mldv2_report._PACK_STR, six.binary_type(buf[4:])) + + eq_(res[0], 0) + + # records without record_num + record1 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 0, 0, 'ff00::1') + record2 = icmpv6.mldv2_report_group( + icmpv6.MODE_IS_INCLUDE, 0, 2, 'ff00::2', + ['fe80::1', 'fe80::2']) + records = [record1, record2] + rep = icmpv6.mldv2_report(records=records) + buf = rep.serialize() + res = struct.unpack_from( + icmpv6.mldv2_report._PACK_STR, six.binary_type(buf)) + + eq_(res[0], len(records)) + + res = struct.unpack_from( + icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf), + icmpv6.mldv2_report._MIN_LEN) + + eq_(res[0], icmpv6.MODE_IS_INCLUDE) + eq_(res[1], 0) + eq_(res[2], 0) + eq_(res[3], addrconv.ipv6.text_to_bin('ff00::1')) + + res = struct.unpack_from( + icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf), + icmpv6.mldv2_report._MIN_LEN + + icmpv6.mldv2_report_group._MIN_LEN) + + eq_(res[0], icmpv6.MODE_IS_INCLUDE) + eq_(res[1], 0) + eq_(res[2], 2) + eq_(res[3], addrconv.ipv6.text_to_bin('ff00::2')) + + res = struct.unpack_from( + '16s16s', six.binary_type(buf), + icmpv6.mldv2_report._MIN_LEN + + icmpv6.mldv2_report_group._MIN_LEN + + icmpv6.mldv2_report_group._MIN_LEN) + + eq_(res[0], addrconv.ipv6.text_to_bin('fe80::1')) + eq_(res[1], addrconv.ipv6.text_to_bin('fe80::2')) + + def test_json(self): + jsondict = self.mld.to_jsondict() + mld = icmpv6.mldv2_report.from_jsondict(jsondict['mldv2_report']) + eq_(str(self.mld), str(mld)) + + def test_json_with_records(self): + self.setUp_with_records() + self.test_json() + + +class Test_mldv2_report_group(unittest.TestCase): + type_ = icmpv6.MODE_IS_INCLUDE + aux_len = 0 + num = 0 + address = 'ff00::1' + srcs = [] + aux = None + mld = icmpv6.mldv2_report_group( + type_, aux_len, num, address, srcs, aux) + buf = b'\x01\x00\x00\x00' \ + + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' + + def setUp(self): + pass + + def setUp_with_srcs(self): + self.srcs = ['fe80::1', 'fe80::2', 'fe80::3'] + self.num = len(self.srcs) + self.mld = icmpv6.mldv2_report_group( + self.type_, self.aux_len, self.num, self.address, self.srcs, + self.aux) + self.buf = b'\x01\x00\x00\x03' \ + + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ + + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ + + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x02' \ + + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x03' + + def setUp_with_aux(self): + self.aux = b'\x01\x02\x03\x04\x05\x06\x07\x08' + self.aux_len = len(self.aux) // 4 + self.mld = icmpv6.mldv2_report_group( + self.type_, self.aux_len, self.num, self.address, self.srcs, + self.aux) + self.buf = b'\x01\x02\x00\x00' \ + + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ + + b'\x01\x02\x03\x04\x05\x06\x07\x08' + + def setUp_with_srcs_and_aux(self): + self.srcs = ['fe80::1', 'fe80::2', 'fe80::3'] + self.num = len(self.srcs) + self.aux = b'\x01\x02\x03\x04\x05\x06\x07\x08' + self.aux_len = len(self.aux) // 4 + self.mld = icmpv6.mldv2_report_group( + self.type_, self.aux_len, self.num, self.address, self.srcs, + self.aux) + self.buf = b'\x01\x02\x00\x03' \ + + b'\xff\x00\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ + + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' \ + + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x02' \ + + b'\xfe\x80\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x03' \ + + b'\x01\x02\x03\x04\x05\x06\x07\x08' + + def tearDown(self): + pass + + def test_init(self): + eq_(self.mld.type_, self.type_) + eq_(self.mld.aux_len, self.aux_len) + eq_(self.mld.num, self.num) + eq_(self.mld.address, self.address) + eq_(self.mld.srcs, self.srcs) + eq_(self.mld.aux, self.aux) + + def test_init_with_srcs(self): + self.setUp_with_srcs() + self.test_init() + + def test_init_with_aux(self): + self.setUp_with_aux() + self.test_init() + + def test_init_with_srcs_and_aux(self): + self.setUp_with_srcs_and_aux() + self.test_init() + + def test_parser(self): + _res = icmpv6.mldv2_report_group.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + + eq_(res.type_, self.type_) + eq_(res.aux_len, self.aux_len) + eq_(res.num, self.num) + eq_(res.address, self.address) + eq_(res.srcs, self.srcs) + eq_(res.aux, self.aux) + + def test_parser_with_srcs(self): + self.setUp_with_srcs() + self.test_parser() + + def test_parser_with_aux(self): + self.setUp_with_aux() + self.test_parser() + + def test_parser_with_srcs_and_aux(self): + self.setUp_with_srcs_and_aux() + self.test_parser() + + def test_serialize(self): + buf = self.mld.serialize() + res = struct.unpack_from( + icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) + + eq_(res[0], self.type_) + eq_(res[1], self.aux_len) + eq_(res[2], self.num) + eq_(res[3], addrconv.ipv6.text_to_bin(self.address)) + + def test_serialize_with_srcs(self): + self.setUp_with_srcs() + buf = self.mld.serialize() + res = struct.unpack_from( + icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) + (src1, src2, src3) = struct.unpack_from( + '16s16s16s', six.binary_type(buf), icmpv6.mldv2_report_group._MIN_LEN) + eq_(res[0], self.type_) + eq_(res[1], self.aux_len) + eq_(res[2], self.num) + eq_(res[3], addrconv.ipv6.text_to_bin(self.address)) + eq_(src1, addrconv.ipv6.text_to_bin(self.srcs[0])) + eq_(src2, addrconv.ipv6.text_to_bin(self.srcs[1])) + eq_(src3, addrconv.ipv6.text_to_bin(self.srcs[2])) + + def test_serialize_with_aux(self): + self.setUp_with_aux() + buf = self.mld.serialize() + res = struct.unpack_from( + icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) + (aux, ) = struct.unpack_from( + '%ds' % (self.aux_len * 4), six.binary_type(buf), + icmpv6.mldv2_report_group._MIN_LEN) + eq_(res[0], self.type_) + eq_(res[1], self.aux_len) + eq_(res[2], self.num) + eq_(res[3], addrconv.ipv6.text_to_bin(self.address)) + eq_(aux, self.aux) + + def test_serialize_with_srcs_and_aux(self): + self.setUp_with_srcs_and_aux() + buf = self.mld.serialize() + res = struct.unpack_from( + icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) + (src1, src2, src3) = struct.unpack_from( + '16s16s16s', six.binary_type(buf), icmpv6.mldv2_report_group._MIN_LEN) + (aux, ) = struct.unpack_from( + '%ds' % (self.aux_len * 4), six.binary_type(buf), + icmpv6.mldv2_report_group._MIN_LEN + 16 * 3) + eq_(res[0], self.type_) + eq_(res[1], self.aux_len) + eq_(res[2], self.num) + eq_(res[3], addrconv.ipv6.text_to_bin(self.address)) + eq_(src1, addrconv.ipv6.text_to_bin(self.srcs[0])) + eq_(src2, addrconv.ipv6.text_to_bin(self.srcs[1])) + eq_(src3, addrconv.ipv6.text_to_bin(self.srcs[2])) + eq_(aux, self.aux) + + def test_to_string(self): + igmp_values = {'type_': repr(self.type_), + 'aux_len': repr(self.aux_len), + 'num': repr(self.num), + 'address': repr(self.address), + 'srcs': repr(self.srcs), + 'aux': repr(self.aux)} + _g_str = ','.join(['%s=%s' % (k, igmp_values[k]) + for k, v in inspect.getmembers(self.mld) + if k in igmp_values]) + g_str = '%s(%s)' % (icmpv6.mldv2_report_group.__name__, _g_str) + + eq_(str(self.mld), g_str) + eq_(repr(self.mld), g_str) + + def test_to_string_with_srcs(self): + self.setUp_with_srcs() + self.test_to_string() + + def test_to_string_with_aux(self): + self.setUp_with_aux() + self.test_to_string() + + def test_to_string_with_srcs_and_aux(self): + self.setUp_with_srcs_and_aux() + self.test_to_string() + + def test_len(self): + eq_(len(self.mld), 20) + + def test_len_with_srcs(self): + self.setUp_with_srcs() + eq_(len(self.mld), 68) + + def test_len_with_aux(self): + self.setUp_with_aux() + eq_(len(self.mld), 28) + + def test_len_with_srcs_and_aux(self): + self.setUp_with_srcs_and_aux() + eq_(len(self.mld), 76) + + @raises + def test_num_larger_than_srcs(self): + self.srcs = ['fe80::1', 'fe80::2', 'fe80::3'] + self.num = len(self.srcs) + 1 + self.buf = struct.pack( + icmpv6.mldv2_report_group._PACK_STR, self.type_, self.aux_len, + self.num, addrconv.ipv6.text_to_bin(self.address)) + for src in self.srcs: + self.buf += pack('16s', addrconv.ipv6.text_to_bin(src)) + self.mld = icmpv6.mldv2_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + self.test_parser() + + @raises + def test_num_smaller_than_srcs(self): + self.srcs = ['fe80::1', 'fe80::2', 'fe80::3'] + self.num = len(self.srcs) - 1 + self.buf = struct.pack( + icmpv6.mldv2_report_group._PACK_STR, self.type_, self.aux_len, + self.num, addrconv.ipv6.text_to_bin(self.address)) + for src in self.srcs: + self.buf += pack('16s', addrconv.ipv6.text_to_bin(src)) + self.mld = icmpv6.mldv2_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + self.test_parser() + + @raises + def test_aux_len_larger_than_aux(self): + self.aux = b'\x01\x02\x03\x04\x05\x06\x07\x08' + self.aux_len = len(self.aux) // 4 + 1 + self.buf = struct.pack( + icmpv6.mldv2_report_group._PACK_STR, self.type_, self.aux_len, + self.num, addrconv.ipv6.text_to_bin(self.address)) + self.buf += self.aux + self.mld = icmpv6.mldv2_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + self.test_parser() + + @raises + def test_aux_len_smaller_than_aux(self): + self.aux = b'\x01\x02\x03\x04\x05\x06\x07\x08' + self.aux_len = len(self.aux) // 4 - 1 + self.buf = struct.pack( + icmpv6.mldv2_report_group._PACK_STR, self.type_, self.aux_len, + self.num, addrconv.ipv6.text_to_bin(self.address)) + self.buf += self.aux + self.mld = icmpv6.mldv2_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + self.test_parser() + + def test_default_args(self): + rep = icmpv6.mldv2_report_group() + buf = rep.serialize() + res = struct.unpack_from( + icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0) + eq_(res[1], 0) + eq_(res[2], 0) + eq_(res[3], addrconv.ipv6.text_to_bin('::')) + + # srcs without num + srcs = ['fe80::1', 'fe80::2', 'fe80::3'] + rep = icmpv6.mldv2_report_group(srcs=srcs) + buf = rep.serialize() + LOG.info(repr(buf)) + res = struct.unpack_from( + icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0) + eq_(res[1], 0) + eq_(res[2], len(srcs)) + eq_(res[3], addrconv.ipv6.text_to_bin('::')) + + (src1, src2, src3) = struct.unpack_from( + '16s16s16s', six.binary_type(buf), icmpv6.mldv2_report_group._MIN_LEN) + + eq_(src1, addrconv.ipv6.text_to_bin(srcs[0])) + eq_(src2, addrconv.ipv6.text_to_bin(srcs[1])) + eq_(src3, addrconv.ipv6.text_to_bin(srcs[2])) + + # aux without aux_len + rep = icmpv6.mldv2_report_group(aux=b'\x01\x02\x03') + buf = rep.serialize() + res = struct.unpack_from( + icmpv6.mldv2_report_group._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0) + eq_(res[1], 1) + eq_(res[2], 0) + eq_(res[3], addrconv.ipv6.text_to_bin('::')) + eq_(buf[icmpv6.mldv2_report_group._MIN_LEN:], b'\x01\x02\x03\x00') + + def test_json(self): + jsondict = self.mld.to_jsondict() + mld = icmpv6.mldv2_report_group.from_jsondict( + jsondict['mldv2_report_group']) + eq_(str(self.mld), str(mld)) + + def test_json_with_srcs(self): + self.setUp_with_srcs() + self.test_json() + + def test_json_with_aux(self): + self.setUp_with_aux() + self.test_json() + + def test_json_with_srcs_and_aux(self): + self.setUp_with_srcs_and_aux() + self.test_json() diff --git a/tests/unit/packet/test_igmp.py b/tests/unit/packet/test_igmp.py new file mode 100644 index 00000000..9813450d --- /dev/null +++ b/tests/unit/packet/test_igmp.py @@ -0,0 +1,997 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import inspect +import logging +import six + +from struct import pack, unpack_from, pack_into +from nose.tools import ok_, eq_, raises +from ryu.ofproto import ether +from ryu.ofproto import inet +from ryu.lib.packet.ethernet import ethernet +from ryu.lib.packet.ipv4 import ipv4 +from ryu.lib.packet.packet import Packet +from ryu.lib.packet.packet_utils import checksum +from ryu.lib import addrconv +from ryu.lib.packet.igmp import igmp +from ryu.lib.packet.igmp import igmpv3_query +from ryu.lib.packet.igmp import igmpv3_report +from ryu.lib.packet.igmp import igmpv3_report_group +from ryu.lib.packet.igmp import IGMP_TYPE_QUERY +from ryu.lib.packet.igmp import IGMP_TYPE_REPORT_V3 +from ryu.lib.packet.igmp import MODE_IS_INCLUDE + +LOG = logging.getLogger(__name__) + + +class Test_igmp(unittest.TestCase): + """ Test case for Internet Group Management Protocol + """ + def setUp(self): + self.msgtype = IGMP_TYPE_QUERY + self.maxresp = 100 + self.csum = 0 + self.address = '225.0.0.1' + + self.buf = pack(igmp._PACK_STR, self.msgtype, self.maxresp, + self.csum, + addrconv.ipv4.text_to_bin(self.address)) + + self.g = igmp(self.msgtype, self.maxresp, self.csum, + self.address) + + def tearDown(self): + pass + + def find_protocol(self, pkt, name): + for p in pkt.protocols: + if p.protocol_name == name: + return p + + def test_init(self): + eq_(self.msgtype, self.g.msgtype) + eq_(self.maxresp, self.g.maxresp) + eq_(self.csum, self.g.csum) + eq_(self.address, self.g.address) + + def test_parser(self): + _res = self.g.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + + eq_(res.msgtype, self.msgtype) + eq_(res.maxresp, self.maxresp) + eq_(res.csum, self.csum) + eq_(res.address, self.address) + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.g.serialize(data, prev) + + res = unpack_from(igmp._PACK_STR, six.binary_type(buf)) + + eq_(res[0], self.msgtype) + eq_(res[1], self.maxresp) + eq_(res[2], checksum(self.buf)) + eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) + + def _build_igmp(self): + dl_dst = '11:22:33:44:55:66' + dl_src = 'aa:bb:cc:dd:ee:ff' + dl_type = ether.ETH_TYPE_IP + e = ethernet(dl_dst, dl_src, dl_type) + + total_length = 20 + igmp._MIN_LEN + nw_proto = inet.IPPROTO_IGMP + nw_dst = '11.22.33.44' + nw_src = '55.66.77.88' + i = ipv4(total_length=total_length, src=nw_src, dst=nw_dst, + proto=nw_proto) + + p = Packet() + + p.add_protocol(e) + p.add_protocol(i) + p.add_protocol(self.g) + p.serialize() + return p + + def test_build_igmp(self): + p = self._build_igmp() + + e = self.find_protocol(p, "ethernet") + ok_(e) + eq_(e.ethertype, ether.ETH_TYPE_IP) + + i = self.find_protocol(p, "ipv4") + ok_(i) + eq_(i.proto, inet.IPPROTO_IGMP) + + g = self.find_protocol(p, "igmp") + ok_(g) + + eq_(g.msgtype, self.msgtype) + eq_(g.maxresp, self.maxresp) + eq_(g.csum, checksum(self.buf)) + eq_(g.address, self.address) + + def test_to_string(self): + igmp_values = {'msgtype': repr(self.msgtype), + 'maxresp': repr(self.maxresp), + 'csum': repr(self.csum), + 'address': repr(self.address)} + _g_str = ','.join(['%s=%s' % (k, igmp_values[k]) + for k, v in inspect.getmembers(self.g) + if k in igmp_values]) + g_str = '%s(%s)' % (igmp.__name__, _g_str) + + eq_(str(self.g), g_str) + eq_(repr(self.g), g_str) + + @raises(Exception) + def test_malformed_igmp(self): + m_short_buf = self.buf[1:igmp._MIN_LEN] + igmp.parser(m_short_buf) + + def test_default_args(self): + ig = igmp() + buf = ig.serialize(bytearray(), None) + res = unpack_from(igmp._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0x11) + eq_(res[1], 0) + eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) + + def test_json(self): + jsondict = self.g.to_jsondict() + g = igmp.from_jsondict(jsondict['igmp']) + eq_(str(self.g), str(g)) + + +class Test_igmpv3_query(unittest.TestCase): + """ Test case for Internet Group Management Protocol v3 + Membership Query Message""" + def setUp(self): + self.msgtype = IGMP_TYPE_QUERY + self.maxresp = 100 + self.csum = 0 + self.address = '225.0.0.1' + self.s_flg = 0 + self.qrv = 2 + self.qqic = 10 + self.num = 0 + self.srcs = [] + + self.s_qrv = self.s_flg << 3 | self.qrv + + self.buf = pack(igmpv3_query._PACK_STR, self.msgtype, + self.maxresp, self.csum, + addrconv.ipv4.text_to_bin(self.address), + self.s_qrv, self.qqic, self.num) + + self.g = igmpv3_query( + self.msgtype, self.maxresp, self.csum, self.address, + self.s_flg, self.qrv, self.qqic, self.num, self.srcs) + + def setUp_with_srcs(self): + self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] + self.num = len(self.srcs) + self.buf = pack(igmpv3_query._PACK_STR, self.msgtype, + self.maxresp, self.csum, + addrconv.ipv4.text_to_bin(self.address), + self.s_qrv, self.qqic, self.num) + for src in self.srcs: + self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) + self.g = igmpv3_query( + self.msgtype, self.maxresp, self.csum, self.address, + self.s_flg, self.qrv, self.qqic, self.num, self.srcs) + + def tearDown(self): + pass + + def find_protocol(self, pkt, name): + for p in pkt.protocols: + if p.protocol_name == name: + return p + + def test_init(self): + eq_(self.msgtype, self.g.msgtype) + eq_(self.maxresp, self.g.maxresp) + eq_(self.csum, self.g.csum) + eq_(self.address, self.g.address) + eq_(self.s_flg, self.g.s_flg) + eq_(self.qrv, self.g.qrv) + eq_(self.qqic, self.g.qqic) + eq_(self.num, self.g.num) + eq_(self.srcs, self.g.srcs) + + def test_init_with_srcs(self): + self.setUp_with_srcs() + self.test_init() + + def test_parser(self): + _res = self.g.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + + eq_(res.msgtype, self.msgtype) + eq_(res.maxresp, self.maxresp) + eq_(res.csum, self.csum) + eq_(res.address, self.address) + eq_(res.s_flg, self.s_flg) + eq_(res.qrv, self.qrv) + eq_(res.qqic, self.qqic) + eq_(res.num, self.num) + eq_(res.srcs, self.srcs) + + def test_parser_with_srcs(self): + self.setUp_with_srcs() + self.test_parser() + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.g.serialize(data, prev) + + res = unpack_from(igmpv3_query._PACK_STR, six.binary_type(buf)) + + eq_(res[0], self.msgtype) + eq_(res[1], self.maxresp) + eq_(res[2], checksum(self.buf)) + eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) + eq_(res[4], self.s_qrv) + eq_(res[5], self.qqic) + eq_(res[6], self.num) + + def test_serialize_with_srcs(self): + self.setUp_with_srcs() + data = bytearray() + prev = None + buf = self.g.serialize(data, prev) + + res = unpack_from(igmpv3_query._PACK_STR, six.binary_type(buf)) + (src1, src2, src3) = unpack_from('4s4s4s', six.binary_type(buf), + igmpv3_query._MIN_LEN) + + eq_(res[0], self.msgtype) + eq_(res[1], self.maxresp) + eq_(res[2], checksum(self.buf)) + eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) + eq_(res[4], self.s_qrv) + eq_(res[5], self.qqic) + eq_(res[6], self.num) + eq_(src1, addrconv.ipv4.text_to_bin(self.srcs[0])) + eq_(src2, addrconv.ipv4.text_to_bin(self.srcs[1])) + eq_(src3, addrconv.ipv4.text_to_bin(self.srcs[2])) + + def _build_igmp(self): + dl_dst = '11:22:33:44:55:66' + dl_src = 'aa:bb:cc:dd:ee:ff' + dl_type = ether.ETH_TYPE_IP + e = ethernet(dl_dst, dl_src, dl_type) + + total_length = len(ipv4()) + len(self.g) + nw_proto = inet.IPPROTO_IGMP + nw_dst = '11.22.33.44' + nw_src = '55.66.77.88' + i = ipv4(total_length=total_length, src=nw_src, dst=nw_dst, + proto=nw_proto, ttl=1) + + p = Packet() + + p.add_protocol(e) + p.add_protocol(i) + p.add_protocol(self.g) + p.serialize() + return p + + def test_build_igmp(self): + p = self._build_igmp() + + e = self.find_protocol(p, "ethernet") + ok_(e) + eq_(e.ethertype, ether.ETH_TYPE_IP) + + i = self.find_protocol(p, "ipv4") + ok_(i) + eq_(i.proto, inet.IPPROTO_IGMP) + + g = self.find_protocol(p, "igmpv3_query") + ok_(g) + + eq_(g.msgtype, self.msgtype) + eq_(g.maxresp, self.maxresp) + eq_(g.csum, checksum(self.buf)) + eq_(g.address, self.address) + eq_(g.s_flg, self.s_flg) + eq_(g.qrv, self.qrv) + eq_(g.qqic, self.qqic) + eq_(g.num, self.num) + eq_(g.srcs, self.srcs) + + def test_build_igmp_with_srcs(self): + self.setUp_with_srcs() + self.test_build_igmp() + + def test_to_string(self): + igmp_values = {'msgtype': repr(self.msgtype), + 'maxresp': repr(self.maxresp), + 'csum': repr(self.csum), + 'address': repr(self.address), + 's_flg': repr(self.s_flg), + 'qrv': repr(self.qrv), + 'qqic': repr(self.qqic), + 'num': repr(self.num), + 'srcs': repr(self.srcs)} + _g_str = ','.join(['%s=%s' % (k, igmp_values[k]) + for k, v in inspect.getmembers(self.g) + if k in igmp_values]) + g_str = '%s(%s)' % (igmpv3_query.__name__, _g_str) + + eq_(str(self.g), g_str) + eq_(repr(self.g), g_str) + + def test_to_string_with_srcs(self): + self.setUp_with_srcs() + self.test_to_string() + + @raises(Exception) + def test_num_larger_than_srcs(self): + self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] + self.num = len(self.srcs) + 1 + self.buf = pack(igmpv3_query._PACK_STR, self.msgtype, + self.maxresp, self.csum, + addrconv.ipv4.text_to_bin(self.address), + self.s_qrv, self.qqic, self.num) + for src in self.srcs: + self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) + self.g = igmpv3_query( + self.msgtype, self.maxresp, self.csum, self.address, + self.s_flg, self.qrv, self.qqic, self.num, self.srcs) + self.test_parser() + + @raises(Exception) + def test_num_smaller_than_srcs(self): + self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] + self.num = len(self.srcs) - 1 + self.buf = pack(igmpv3_query._PACK_STR, self.msgtype, + self.maxresp, self.csum, + addrconv.ipv4.text_to_bin(self.address), + self.s_qrv, self.qqic, self.num) + for src in self.srcs: + self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) + self.g = igmpv3_query( + self.msgtype, self.maxresp, self.csum, self.address, + self.s_flg, self.qrv, self.qqic, self.num, self.srcs) + self.test_parser() + + def test_default_args(self): + prev = ipv4(proto=inet.IPPROTO_IGMP) + g = igmpv3_query() + prev.serialize(g, None) + buf = g.serialize(bytearray(), prev) + res = unpack_from(igmpv3_query._PACK_STR, six.binary_type(buf)) + buf = bytearray(buf) + pack_into('!H', buf, 2, 0) + + eq_(res[0], IGMP_TYPE_QUERY) + eq_(res[1], 100) + eq_(res[2], checksum(buf)) + eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) + eq_(res[4], 2) + eq_(res[5], 0) + eq_(res[6], 0) + + # srcs without num + prev = ipv4(proto=inet.IPPROTO_IGMP) + srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] + g = igmpv3_query(srcs=srcs) + prev.serialize(g, None) + buf = g.serialize(bytearray(), prev) + res = unpack_from(igmpv3_query._PACK_STR, six.binary_type(buf)) + buf = bytearray(buf) + pack_into('!H', buf, 2, 0) + + eq_(res[0], IGMP_TYPE_QUERY) + eq_(res[1], 100) + eq_(res[2], checksum(buf)) + eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) + eq_(res[4], 2) + eq_(res[5], 0) + eq_(res[6], len(srcs)) + + res = unpack_from('4s4s4s', six.binary_type(buf), igmpv3_query._MIN_LEN) + + eq_(res[0], addrconv.ipv4.text_to_bin(srcs[0])) + eq_(res[1], addrconv.ipv4.text_to_bin(srcs[1])) + eq_(res[2], addrconv.ipv4.text_to_bin(srcs[2])) + + def test_json(self): + jsondict = self.g.to_jsondict() + g = igmpv3_query.from_jsondict(jsondict['igmpv3_query']) + eq_(str(self.g), str(g)) + + def test_json_with_srcs(self): + self.setUp_with_srcs() + self.test_json() + + +class Test_igmpv3_report(unittest.TestCase): + """ Test case for Internet Group Management Protocol v3 + Membership Report Message""" + def setUp(self): + self.msgtype = IGMP_TYPE_REPORT_V3 + self.csum = 0 + self.record_num = 0 + self.records = [] + + self.buf = pack(igmpv3_report._PACK_STR, self.msgtype, + self.csum, self.record_num) + + self.g = igmpv3_report( + self.msgtype, self.csum, self.record_num, self.records) + + def setUp_with_records(self): + self.record1 = igmpv3_report_group( + MODE_IS_INCLUDE, 0, 0, '225.0.0.1') + self.record2 = igmpv3_report_group( + MODE_IS_INCLUDE, 0, 2, '225.0.0.2', + ['172.16.10.10', '172.16.10.27']) + self.record3 = igmpv3_report_group( + MODE_IS_INCLUDE, 1, 0, '225.0.0.3', [], b'abc\x00') + self.record4 = igmpv3_report_group( + MODE_IS_INCLUDE, 2, 2, '225.0.0.4', + ['172.16.10.10', '172.16.10.27'], b'abcde\x00\x00\x00') + self.records = [self.record1, self.record2, self.record3, + self.record4] + self.record_num = len(self.records) + self.buf = pack(igmpv3_report._PACK_STR, self.msgtype, + self.csum, self.record_num) + self.buf += self.record1.serialize() + self.buf += self.record2.serialize() + self.buf += self.record3.serialize() + self.buf += self.record4.serialize() + self.g = igmpv3_report( + self.msgtype, self.csum, self.record_num, self.records) + + def tearDown(self): + pass + + def find_protocol(self, pkt, name): + for p in pkt.protocols: + if p.protocol_name == name: + return p + + def test_init(self): + eq_(self.msgtype, self.g.msgtype) + eq_(self.csum, self.g.csum) + eq_(self.record_num, self.g.record_num) + eq_(self.records, self.g.records) + + def test_init_with_records(self): + self.setUp_with_records() + self.test_init() + + def test_parser(self): + _res = self.g.parser(six.binary_type(self.buf)) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + + eq_(res.msgtype, self.msgtype) + eq_(res.csum, self.csum) + eq_(res.record_num, self.record_num) + eq_(repr(res.records), repr(self.records)) + + def test_parser_with_records(self): + self.setUp_with_records() + self.test_parser() + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.g.serialize(data, prev) + + res = unpack_from(igmpv3_report._PACK_STR, six.binary_type(buf)) + + eq_(res[0], self.msgtype) + eq_(res[1], checksum(self.buf)) + eq_(res[2], self.record_num) + + def test_serialize_with_records(self): + self.setUp_with_records() + data = bytearray() + prev = None + buf = six.binary_type(self.g.serialize(data, prev)) + + res = unpack_from(igmpv3_report._PACK_STR, buf) + offset = igmpv3_report._MIN_LEN + rec1 = igmpv3_report_group.parser(buf[offset:]) + offset += len(rec1) + rec2 = igmpv3_report_group.parser(buf[offset:]) + offset += len(rec2) + rec3 = igmpv3_report_group.parser(buf[offset:]) + offset += len(rec3) + rec4 = igmpv3_report_group.parser(buf[offset:]) + + eq_(res[0], self.msgtype) + eq_(res[1], checksum(self.buf)) + eq_(res[2], self.record_num) + eq_(repr(rec1), repr(self.record1)) + eq_(repr(rec2), repr(self.record2)) + eq_(repr(rec3), repr(self.record3)) + eq_(repr(rec4), repr(self.record4)) + + def _build_igmp(self): + dl_dst = '11:22:33:44:55:66' + dl_src = 'aa:bb:cc:dd:ee:ff' + dl_type = ether.ETH_TYPE_IP + e = ethernet(dl_dst, dl_src, dl_type) + + total_length = len(ipv4()) + len(self.g) + nw_proto = inet.IPPROTO_IGMP + nw_dst = '11.22.33.44' + nw_src = '55.66.77.88' + i = ipv4(total_length=total_length, src=nw_src, dst=nw_dst, + proto=nw_proto, ttl=1) + + p = Packet() + + p.add_protocol(e) + p.add_protocol(i) + p.add_protocol(self.g) + p.serialize() + return p + + def test_build_igmp(self): + p = self._build_igmp() + + e = self.find_protocol(p, "ethernet") + ok_(e) + eq_(e.ethertype, ether.ETH_TYPE_IP) + + i = self.find_protocol(p, "ipv4") + ok_(i) + eq_(i.proto, inet.IPPROTO_IGMP) + + g = self.find_protocol(p, "igmpv3_report") + ok_(g) + + eq_(g.msgtype, self.msgtype) + eq_(g.csum, checksum(self.buf)) + eq_(g.record_num, self.record_num) + eq_(g.records, self.records) + + def test_build_igmp_with_records(self): + self.setUp_with_records() + self.test_build_igmp() + + def test_to_string(self): + igmp_values = {'msgtype': repr(self.msgtype), + 'csum': repr(self.csum), + 'record_num': repr(self.record_num), + 'records': repr(self.records)} + _g_str = ','.join(['%s=%s' % (k, igmp_values[k]) + for k, v in inspect.getmembers(self.g) + if k in igmp_values]) + g_str = '%s(%s)' % (igmpv3_report.__name__, _g_str) + + eq_(str(self.g), g_str) + eq_(repr(self.g), g_str) + + def test_to_string_with_records(self): + self.setUp_with_records() + self.test_to_string() + + @raises(Exception) + def test_record_num_larger_than_records(self): + self.record1 = igmpv3_report_group( + MODE_IS_INCLUDE, 0, 0, '225.0.0.1') + self.record2 = igmpv3_report_group( + MODE_IS_INCLUDE, 0, 2, '225.0.0.2', + ['172.16.10.10', '172.16.10.27']) + self.record3 = igmpv3_report_group( + MODE_IS_INCLUDE, 1, 0, '225.0.0.3', [], b'abc\x00') + self.record4 = igmpv3_report_group( + MODE_IS_INCLUDE, 1, 2, '225.0.0.4', + ['172.16.10.10', '172.16.10.27'], b'abc\x00') + self.records = [self.record1, self.record2, self.record3, + self.record4] + self.record_num = len(self.records) + 1 + self.buf = pack(igmpv3_report._PACK_STR, self.msgtype, + self.csum, self.record_num) + self.buf += self.record1.serialize() + self.buf += self.record2.serialize() + self.buf += self.record3.serialize() + self.buf += self.record4.serialize() + self.g = igmpv3_report( + self.msgtype, self.csum, self.record_num, self.records) + self.test_parser() + + @raises(Exception) + def test_record_num_smaller_than_records(self): + self.record1 = igmpv3_report_group( + MODE_IS_INCLUDE, 0, 0, '225.0.0.1') + self.record2 = igmpv3_report_group( + MODE_IS_INCLUDE, 0, 2, '225.0.0.2', + ['172.16.10.10', '172.16.10.27']) + self.record3 = igmpv3_report_group( + MODE_IS_INCLUDE, 1, 0, '225.0.0.3', [], b'abc\x00') + self.record4 = igmpv3_report_group( + MODE_IS_INCLUDE, 1, 2, '225.0.0.4', + ['172.16.10.10', '172.16.10.27'], b'abc\x00') + self.records = [self.record1, self.record2, self.record3, + self.record4] + self.record_num = len(self.records) - 1 + self.buf = pack(igmpv3_report._PACK_STR, self.msgtype, + self.csum, self.record_num) + self.buf += self.record1.serialize() + self.buf += self.record2.serialize() + self.buf += self.record3.serialize() + self.buf += self.record4.serialize() + self.g = igmpv3_report( + self.msgtype, self.csum, self.record_num, self.records) + self.test_parser() + + def test_default_args(self): + prev = ipv4(proto=inet.IPPROTO_IGMP) + g = igmpv3_report() + prev.serialize(g, None) + buf = g.serialize(bytearray(), prev) + res = unpack_from(igmpv3_report._PACK_STR, six.binary_type(buf)) + buf = bytearray(buf) + pack_into('!H', buf, 2, 0) + + eq_(res[0], IGMP_TYPE_REPORT_V3) + eq_(res[1], checksum(buf)) + eq_(res[2], 0) + + # records without record_num + prev = ipv4(proto=inet.IPPROTO_IGMP) + record1 = igmpv3_report_group( + MODE_IS_INCLUDE, 0, 0, '225.0.0.1') + record2 = igmpv3_report_group( + MODE_IS_INCLUDE, 0, 2, '225.0.0.2', + ['172.16.10.10', '172.16.10.27']) + record3 = igmpv3_report_group( + MODE_IS_INCLUDE, 1, 0, '225.0.0.3', [], b'abc\x00') + record4 = igmpv3_report_group( + MODE_IS_INCLUDE, 1, 2, '225.0.0.4', + ['172.16.10.10', '172.16.10.27'], b'abc\x00') + records = [record1, record2, record3, record4] + g = igmpv3_report(records=records) + prev.serialize(g, None) + buf = g.serialize(bytearray(), prev) + res = unpack_from(igmpv3_report._PACK_STR, six.binary_type(buf)) + buf = bytearray(buf) + pack_into('!H', buf, 2, 0) + + eq_(res[0], IGMP_TYPE_REPORT_V3) + eq_(res[1], checksum(buf)) + eq_(res[2], len(records)) + + def test_json(self): + jsondict = self.g.to_jsondict() + g = igmpv3_report.from_jsondict(jsondict['igmpv3_report']) + eq_(str(self.g), str(g)) + + def test_json_with_records(self): + self.setUp_with_records() + self.test_json() + + +class Test_igmpv3_report_group(unittest.TestCase): + """Test case for Group Records of + Internet Group Management Protocol v3 Membership Report Message""" + def setUp(self): + self.type_ = MODE_IS_INCLUDE + self.aux_len = 0 + self.num = 0 + self.address = '225.0.0.1' + self.srcs = [] + self.aux = None + + self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, + self.aux_len, self.num, + addrconv.ipv4.text_to_bin(self.address)) + + self.g = igmpv3_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + + def setUp_with_srcs(self): + self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] + self.num = len(self.srcs) + self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, + self.aux_len, self.num, + addrconv.ipv4.text_to_bin(self.address)) + for src in self.srcs: + self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) + self.g = igmpv3_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + + def setUp_with_aux(self): + self.aux = b'\x01\x02\x03\x04\x05\x00\x00\x00' + self.aux_len = len(self.aux) // 4 + self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, + self.aux_len, self.num, + addrconv.ipv4.text_to_bin(self.address)) + self.buf += self.aux + self.g = igmpv3_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + + def setUp_with_srcs_and_aux(self): + self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] + self.num = len(self.srcs) + self.aux = b'\x01\x02\x03\x04\x05\x00\x00\x00' + self.aux_len = len(self.aux) // 4 + self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, + self.aux_len, self.num, + addrconv.ipv4.text_to_bin(self.address)) + for src in self.srcs: + self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) + self.buf += self.aux + self.g = igmpv3_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.type_, self.g.type_) + eq_(self.aux_len, self.g.aux_len) + eq_(self.num, self.g.num) + eq_(self.address, self.g.address) + eq_(self.srcs, self.g.srcs) + eq_(self.aux, self.g.aux) + + def test_init_with_srcs(self): + self.setUp_with_srcs() + self.test_init() + + def test_init_with_aux(self): + self.setUp_with_aux() + self.test_init() + + def test_init_with_srcs_and_aux(self): + self.setUp_with_srcs_and_aux() + self.test_init() + + def test_parser(self): + _res = self.g.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + + eq_(res.type_, self.type_) + eq_(res.aux_len, self.aux_len) + eq_(res.num, self.num) + eq_(res.address, self.address) + eq_(res.srcs, self.srcs) + eq_(res.aux, self.aux) + + def test_parser_with_srcs(self): + self.setUp_with_srcs() + self.test_parser() + + def test_parser_with_aux(self): + self.setUp_with_aux() + self.test_parser() + + def test_parser_with_srcs_and_aux(self): + self.setUp_with_srcs_and_aux() + self.test_parser() + + def test_serialize(self): + buf = self.g.serialize() + res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) + + eq_(res[0], self.type_) + eq_(res[1], self.aux_len) + eq_(res[2], self.num) + eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) + + def test_serialize_with_srcs(self): + self.setUp_with_srcs() + buf = self.g.serialize() + res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) + (src1, src2, src3) = unpack_from('4s4s4s', six.binary_type(buf), + igmpv3_report_group._MIN_LEN) + eq_(res[0], self.type_) + eq_(res[1], self.aux_len) + eq_(res[2], self.num) + eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) + eq_(src1, addrconv.ipv4.text_to_bin(self.srcs[0])) + eq_(src2, addrconv.ipv4.text_to_bin(self.srcs[1])) + eq_(src3, addrconv.ipv4.text_to_bin(self.srcs[2])) + + def test_serialize_with_aux(self): + self.setUp_with_aux() + buf = self.g.serialize() + res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) + (aux, ) = unpack_from('%ds' % (self.aux_len * 4), six.binary_type(buf), + igmpv3_report_group._MIN_LEN) + eq_(res[0], self.type_) + eq_(res[1], self.aux_len) + eq_(res[2], self.num) + eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) + eq_(aux, self.aux) + + def test_serialize_with_srcs_and_aux(self): + self.setUp_with_srcs_and_aux() + buf = self.g.serialize() + res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) + (src1, src2, src3) = unpack_from('4s4s4s', six.binary_type(buf), + igmpv3_report_group._MIN_LEN) + (aux, ) = unpack_from('%ds' % (self.aux_len * 4), six.binary_type(buf), + igmpv3_report_group._MIN_LEN + 12) + eq_(res[0], self.type_) + eq_(res[1], self.aux_len) + eq_(res[2], self.num) + eq_(res[3], addrconv.ipv4.text_to_bin(self.address)) + eq_(src1, addrconv.ipv4.text_to_bin(self.srcs[0])) + eq_(src2, addrconv.ipv4.text_to_bin(self.srcs[1])) + eq_(src3, addrconv.ipv4.text_to_bin(self.srcs[2])) + eq_(aux, self.aux) + + def test_to_string(self): + igmp_values = {'type_': repr(self.type_), + 'aux_len': repr(self.aux_len), + 'num': repr(self.num), + 'address': repr(self.address), + 'srcs': repr(self.srcs), + 'aux': repr(self.aux)} + _g_str = ','.join(['%s=%s' % (k, igmp_values[k]) + for k, v in inspect.getmembers(self.g) + if k in igmp_values]) + g_str = '%s(%s)' % (igmpv3_report_group.__name__, _g_str) + + eq_(str(self.g), g_str) + eq_(repr(self.g), g_str) + + def test_to_string_with_srcs(self): + self.setUp_with_srcs() + self.test_to_string() + + def test_to_string_with_aux(self): + self.setUp_with_aux() + self.test_to_string() + + def test_to_string_with_srcs_and_aux(self): + self.setUp_with_srcs_and_aux() + self.test_to_string() + + def test_len(self): + eq_(len(self.g), 8) + + def test_len_with_srcs(self): + self.setUp_with_srcs() + eq_(len(self.g), 20) + + def test_len_with_aux(self): + self.setUp_with_aux() + eq_(len(self.g), 16) + + def test_len_with_srcs_and_aux(self): + self.setUp_with_srcs_and_aux() + eq_(len(self.g), 28) + + @raises + def test_num_larger_than_srcs(self): + self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] + self.num = len(self.srcs) + 1 + self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, + self.aux_len, self.num, + addrconv.ipv4.text_to_bin(self.address)) + for src in self.srcs: + self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) + self.g = igmpv3_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + self.test_parser() + + @raises + def test_num_smaller_than_srcs(self): + self.srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] + self.num = len(self.srcs) - 1 + self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, + self.aux_len, self.num, + addrconv.ipv4.text_to_bin(self.address)) + for src in self.srcs: + self.buf += pack('4s', addrconv.ipv4.text_to_bin(src)) + self.g = igmpv3_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + self.test_parser() + + @raises + def test_aux_len_larger_than_aux(self): + self.aux = b'\x01\x02\x03\x04\x05\x00\x00\x00' + self.aux_len = len(self.aux) // 4 + 1 + self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, + self.aux_len, self.num, + addrconv.ipv4.text_to_bin(self.address)) + self.buf += self.aux + self.g = igmpv3_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + self.test_parser() + + @raises + def test_aux_len_smaller_than_aux(self): + self.aux = b'\x01\x02\x03\x04\x05\x00\x00\x00' + self.aux_len = len(self.aux) // 4 - 1 + self.buf = pack(igmpv3_report_group._PACK_STR, self.type_, + self.aux_len, self.num, + addrconv.ipv4.text_to_bin(self.address)) + self.buf += self.aux + self.g = igmpv3_report_group( + self.type_, self.aux_len, self.num, self.address, + self.srcs, self.aux) + self.test_parser() + + def test_default_args(self): + rep = igmpv3_report_group() + buf = rep.serialize() + res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0) + eq_(res[1], 0) + eq_(res[2], 0) + eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) + + # srcs without num + srcs = ['192.168.1.1', '192.168.1.2', '192.168.1.3'] + rep = igmpv3_report_group(srcs=srcs) + buf = rep.serialize() + res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0) + eq_(res[1], 0) + eq_(res[2], len(srcs)) + eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) + + res = unpack_from('4s4s4s', six.binary_type(buf), + igmpv3_report_group._MIN_LEN) + + eq_(res[0], addrconv.ipv4.text_to_bin(srcs[0])) + eq_(res[1], addrconv.ipv4.text_to_bin(srcs[1])) + eq_(res[2], addrconv.ipv4.text_to_bin(srcs[2])) + + # aux without aux_len + aux = b'abcde' + rep = igmpv3_report_group(aux=aux) + buf = rep.serialize() + res = unpack_from(igmpv3_report_group._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 0) + eq_(res[1], 2) + eq_(res[2], 0) + eq_(res[3], addrconv.ipv4.text_to_bin('0.0.0.0')) + eq_(buf[igmpv3_report_group._MIN_LEN:], b'abcde\x00\x00\x00') diff --git a/tests/unit/packet/test_ipv4.py b/tests/unit/packet/test_ipv4.py new file mode 100644 index 00000000..69186f3f --- /dev/null +++ b/tests/unit/packet/test_ipv4.py @@ -0,0 +1,137 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import six +import struct +from struct import * +from nose.tools import * +from ryu.ofproto import ether, inet +from ryu.lib.packet import packet_utils +from ryu.lib.packet.ethernet import ethernet +from ryu.lib.packet.packet import Packet +from ryu.lib.packet.ipv4 import ipv4 +from ryu.lib.packet.tcp import tcp +from ryu.lib import addrconv + + +LOG = logging.getLogger('test_ipv4') + + +class Test_ipv4(unittest.TestCase): + """ Test case for ipv4 + """ + + version = 4 + header_length = 5 + 10 + ver_hlen = version << 4 | header_length + tos = 0 + total_length = header_length + 64 + identification = 30774 + flags = 4 + offset = 1480 + flg_off = flags << 13 | offset + ttl = 64 + proto = inet.IPPROTO_TCP + csum = 0xadc6 + src = '131.151.32.21' + dst = '131.151.32.129' + length = header_length * 4 + option = b'\x86\x28\x00\x00\x00\x01\x01\x22' \ + + b'\x00\x01\xae\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00\x00\x00\x00\x01' + + buf = pack(ipv4._PACK_STR, ver_hlen, tos, total_length, identification, + flg_off, ttl, proto, csum, + addrconv.ipv4.text_to_bin(src), + addrconv.ipv4.text_to_bin(dst)) \ + + option + + ip = ipv4(version, header_length, tos, total_length, identification, + flags, offset, ttl, proto, csum, src, dst, option) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.version, self.ip.version) + eq_(self.header_length, self.ip.header_length) + eq_(self.tos, self.ip.tos) + eq_(self.total_length, self.ip.total_length) + eq_(self.identification, self.ip.identification) + eq_(self.flags, self.ip.flags) + eq_(self.offset, self.ip.offset) + eq_(self.ttl, self.ip.ttl) + eq_(self.proto, self.ip.proto) + eq_(self.csum, self.ip.csum) + eq_(self.src, self.ip.src) + eq_(self.dst, self.ip.dst) + eq_(self.length, len(self.ip)) + eq_(self.option, self.ip.option) + + def test_parser(self): + res, ptype, _ = self.ip.parser(self.buf) + + eq_(res.version, self.version) + eq_(res.header_length, self.header_length) + eq_(res.tos, self.tos) + eq_(res.total_length, self.total_length) + eq_(res.identification, self.identification) + eq_(res.flags, self.flags) + eq_(res.offset, self.offset) + eq_(res.ttl, self.ttl) + eq_(res.proto, self.proto) + eq_(res.csum, self.csum) + eq_(res.src, self.src) + eq_(res.dst, self.dst) + eq_(ptype, tcp) + + def test_serialize(self): + buf = self.ip.serialize(bytearray(), None) + res = struct.unpack_from(ipv4._PACK_STR, six.binary_type(buf)) + option = buf[ipv4._MIN_LEN:ipv4._MIN_LEN + len(self.option)] + + eq_(res[0], self.ver_hlen) + eq_(res[1], self.tos) + eq_(res[2], self.total_length) + eq_(res[3], self.identification) + eq_(res[4], self.flg_off) + eq_(res[5], self.ttl) + eq_(res[6], self.proto) + eq_(res[8], addrconv.ipv4.text_to_bin(self.src)) + eq_(res[9], addrconv.ipv4.text_to_bin(self.dst)) + eq_(option, self.option) + + # checksum + csum = packet_utils.checksum(buf) + eq_(csum, 0) + + @raises(Exception) + def test_malformed_ipv4(self): + m_short_buf = self.buf[1:ipv4._MIN_LEN] + ipv4.parser(m_short_buf) + + def test_json(self): + jsondict = self.ip.to_jsondict() + ip = ipv4.from_jsondict(jsondict['ipv4']) + eq_(str(self.ip), str(ip)) diff --git a/tests/unit/packet/test_ipv6.py b/tests/unit/packet/test_ipv6.py new file mode 100644 index 00000000..455dc8c3 --- /dev/null +++ b/tests/unit/packet/test_ipv6.py @@ -0,0 +1,1128 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import unittest +import logging +import inspect +import six +import struct + +from nose.tools import * +from ryu.lib import addrconv +from ryu.lib import ip +from ryu.lib.packet import ipv6 + + +LOG = logging.getLogger(__name__) + + +class Test_ipv6(unittest.TestCase): + + def setUp(self): + self.version = 6 + self.traffic_class = 0 + self.flow_label = 0 + self.payload_length = 817 + self.nxt = 6 + self.hop_limit = 128 + self.src = '2002:4637:d5d3::4637:d5d3' + self.dst = '2001:4860:0:2001::68' + self.ext_hdrs = [] + self.ip = ipv6.ipv6( + self.version, self.traffic_class, self.flow_label, + self.payload_length, self.nxt, self.hop_limit, self.src, + self.dst, self.ext_hdrs) + + self.v_tc_flow = ( + self.version << 28 | self.traffic_class << 20 | + self.flow_label << 12) + self.buf = struct.pack( + ipv6.ipv6._PACK_STR, self.v_tc_flow, + self.payload_length, self.nxt, self.hop_limit, + addrconv.ipv6.text_to_bin(self.src), + addrconv.ipv6.text_to_bin(self.dst)) + + def setUp_with_hop_opts(self): + self.opt1_type = 5 + self.opt1_len = 2 + self.opt1_data = b'\x00\x00' + self.opt2_type = 1 + self.opt2_len = 0 + self.opt2_data = None + self.options = [ + ipv6.option(self.opt1_type, self.opt1_len, self.opt1_data), + ipv6.option(self.opt2_type, self.opt2_len, self.opt2_data), + ] + self.hop_opts_nxt = 6 + self.hop_opts_size = 0 + self.hop_opts = ipv6.hop_opts( + self.hop_opts_nxt, self.hop_opts_size, self.options) + self.ext_hdrs = [self.hop_opts] + self.payload_length += len(self.hop_opts) + self.nxt = ipv6.hop_opts.TYPE + self.ip = ipv6.ipv6( + self.version, self.traffic_class, self.flow_label, + self.payload_length, self.nxt, self.hop_limit, self.src, + self.dst, self.ext_hdrs) + self.buf = struct.pack( + ipv6.ipv6._PACK_STR, self.v_tc_flow, + self.payload_length, self.nxt, self.hop_limit, + addrconv.ipv6.text_to_bin(self.src), + addrconv.ipv6.text_to_bin(self.dst)) + self.buf += self.hop_opts.serialize() + + def setUp_with_dst_opts(self): + self.opt1_type = 5 + self.opt1_len = 2 + self.opt1_data = b'\x00\x00' + self.opt2_type = 1 + self.opt2_len = 0 + self.opt2_data = None + self.options = [ + ipv6.option(self.opt1_type, self.opt1_len, self.opt1_data), + ipv6.option(self.opt2_type, self.opt2_len, self.opt2_data), + ] + self.dst_opts_nxt = 6 + self.dst_opts_size = 0 + self.dst_opts = ipv6.dst_opts( + self.dst_opts_nxt, self.dst_opts_size, self.options) + self.ext_hdrs = [self.dst_opts] + self.payload_length += len(self.dst_opts) + self.nxt = ipv6.dst_opts.TYPE + self.ip = ipv6.ipv6( + self.version, self.traffic_class, self.flow_label, + self.payload_length, self.nxt, self.hop_limit, self.src, + self.dst, self.ext_hdrs) + self.buf = struct.pack( + ipv6.ipv6._PACK_STR, self.v_tc_flow, + self.payload_length, self.nxt, self.hop_limit, + addrconv.ipv6.text_to_bin(self.src), + addrconv.ipv6.text_to_bin(self.dst)) + self.buf += self.dst_opts.serialize() + + def setUp_with_routing_type3(self): + self.routing_nxt = 6 + self.routing_size = 6 + self.routing_type = 3 + self.routing_seg = 2 + self.routing_cmpi = 0 + self.routing_cmpe = 0 + self.routing_adrs = ["2001:db8:dead::1", "2001:db8:dead::2", + "2001:db8:dead::3"] + self.routing = ipv6.routing_type3( + self.routing_nxt, self.routing_size, + self.routing_type, self.routing_seg, + self.routing_cmpi, self.routing_cmpe, + self.routing_adrs) + self.ext_hdrs = [self.routing] + self.payload_length += len(self.routing) + self.nxt = ipv6.routing.TYPE + self.ip = ipv6.ipv6( + self.version, self.traffic_class, self.flow_label, + self.payload_length, self.nxt, self.hop_limit, self.src, + self.dst, self.ext_hdrs) + self.buf = struct.pack( + ipv6.ipv6._PACK_STR, self.v_tc_flow, + self.payload_length, self.nxt, self.hop_limit, + addrconv.ipv6.text_to_bin(self.src), + addrconv.ipv6.text_to_bin(self.dst)) + self.buf += self.routing.serialize() + + def setUp_with_fragment(self): + self.fragment_nxt = 6 + self.fragment_offset = 50 + self.fragment_more = 1 + self.fragment_id = 123 + self.fragment = ipv6.fragment( + self.fragment_nxt, self.fragment_offset, self.fragment_more, + self.fragment_id) + self.ext_hdrs = [self.fragment] + self.payload_length += len(self.fragment) + self.nxt = ipv6.fragment.TYPE + self.ip = ipv6.ipv6( + self.version, self.traffic_class, self.flow_label, + self.payload_length, self.nxt, self.hop_limit, self.src, + self.dst, self.ext_hdrs) + self.buf = struct.pack( + ipv6.ipv6._PACK_STR, self.v_tc_flow, + self.payload_length, self.nxt, self.hop_limit, + addrconv.ipv6.text_to_bin(self.src), + addrconv.ipv6.text_to_bin(self.dst)) + self.buf += self.fragment.serialize() + + def setUp_with_auth(self): + self.auth_nxt = 6 + self.auth_size = 4 + self.auth_spi = 256 + self.auth_seq = 1 + self.auth_data = b'\xa0\xe7\xf8\xab\xf9\x69\x1a\x8b\xf3\x9f\x7c\xae' + self.auth = ipv6.auth( + self.auth_nxt, self.auth_size, self.auth_spi, self.auth_seq, + self.auth_data) + self.ext_hdrs = [self.auth] + self.payload_length += len(self.auth) + self.nxt = ipv6.auth.TYPE + self.ip = ipv6.ipv6( + self.version, self.traffic_class, self.flow_label, + self.payload_length, self.nxt, self.hop_limit, self.src, + self.dst, self.ext_hdrs) + self.buf = struct.pack( + ipv6.ipv6._PACK_STR, self.v_tc_flow, + self.payload_length, self.nxt, self.hop_limit, + addrconv.ipv6.text_to_bin(self.src), + addrconv.ipv6.text_to_bin(self.dst)) + self.buf += self.auth.serialize() + + def setUp_with_multi_headers(self): + self.opt1_type = 5 + self.opt1_len = 2 + self.opt1_data = b'\x00\x00' + self.opt2_type = 1 + self.opt2_len = 0 + self.opt2_data = None + self.options = [ + ipv6.option(self.opt1_type, self.opt1_len, self.opt1_data), + ipv6.option(self.opt2_type, self.opt2_len, self.opt2_data), + ] + self.hop_opts_nxt = ipv6.auth.TYPE + self.hop_opts_size = 0 + self.hop_opts = ipv6.hop_opts( + self.hop_opts_nxt, self.hop_opts_size, self.options) + self.auth_nxt = 6 + self.auth_size = 4 + self.auth_spi = 256 + self.auth_seq = 1 + self.auth_data = b'\xa0\xe7\xf8\xab\xf9\x69\x1a\x8b\xf3\x9f\x7c\xae' + self.auth = ipv6.auth( + self.auth_nxt, self.auth_size, self.auth_spi, self.auth_seq, + self.auth_data) + self.ext_hdrs = [self.hop_opts, self.auth] + self.payload_length += len(self.hop_opts) + len(self.auth) + self.nxt = ipv6.hop_opts.TYPE + self.ip = ipv6.ipv6( + self.version, self.traffic_class, self.flow_label, + self.payload_length, self.nxt, self.hop_limit, self.src, + self.dst, self.ext_hdrs) + self.buf = struct.pack( + ipv6.ipv6._PACK_STR, self.v_tc_flow, + self.payload_length, self.nxt, self.hop_limit, + addrconv.ipv6.text_to_bin(self.src), + addrconv.ipv6.text_to_bin(self.dst)) + self.buf += self.hop_opts.serialize() + self.buf += self.auth.serialize() + + def tearDown(self): + pass + + def test_init(self): + eq_(self.version, self.ip.version) + eq_(self.traffic_class, self.ip.traffic_class) + eq_(self.flow_label, self.ip.flow_label) + eq_(self.payload_length, self.ip.payload_length) + eq_(self.nxt, self.ip.nxt) + eq_(self.hop_limit, self.ip.hop_limit) + eq_(self.src, self.ip.src) + eq_(self.dst, self.ip.dst) + eq_(str(self.ext_hdrs), str(self.ip.ext_hdrs)) + + def test_init_with_hop_opts(self): + self.setUp_with_hop_opts() + self.test_init() + + def test_init_with_dst_opts(self): + self.setUp_with_dst_opts() + self.test_init() + + def test_init_with_routing_type3(self): + self.setUp_with_routing_type3() + self.test_init() + + def test_init_with_fragment(self): + self.setUp_with_fragment() + self.test_init() + + def test_init_with_auth(self): + self.setUp_with_auth() + self.test_init() + + def test_init_with_multi_headers(self): + self.setUp_with_multi_headers() + self.test_init() + + def test_parser(self): + _res = self.ip.parser(six.binary_type(self.buf)) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + + eq_(self.version, res.version) + eq_(self.traffic_class, res.traffic_class) + eq_(self.flow_label, res.flow_label) + eq_(self.payload_length, res.payload_length) + eq_(self.nxt, res.nxt) + eq_(self.hop_limit, res.hop_limit) + eq_(self.src, res.src) + eq_(self.dst, res.dst) + eq_(str(self.ext_hdrs), str(res.ext_hdrs)) + + def test_parser_with_hop_opts(self): + self.setUp_with_hop_opts() + self.test_parser() + + def test_parser_with_dst_opts(self): + self.setUp_with_dst_opts() + self.test_parser() + + def test_parser_with_routing_type3(self): + self.setUp_with_routing_type3() + self.test_parser() + + def test_parser_with_fragment(self): + self.setUp_with_fragment() + self.test_parser() + + def test_parser_with_auth(self): + self.setUp_with_auth() + self.test_parser() + + def test_parser_with_multi_headers(self): + self.setUp_with_multi_headers() + self.test_parser() + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.ip.serialize(data, prev) + + res = struct.unpack_from(ipv6.ipv6._PACK_STR, six.binary_type(buf)) + + eq_(self.v_tc_flow, res[0]) + eq_(self.payload_length, res[1]) + eq_(self.nxt, res[2]) + eq_(self.hop_limit, res[3]) + eq_(self.src, addrconv.ipv6.bin_to_text(res[4])) + eq_(self.dst, addrconv.ipv6.bin_to_text(res[5])) + + def test_serialize_with_hop_opts(self): + self.setUp_with_hop_opts() + self.test_serialize() + + data = bytearray() + prev = None + buf = self.ip.serialize(data, prev) + hop_opts = ipv6.hop_opts.parser(six.binary_type(buf[ipv6.ipv6._MIN_LEN:])) + eq_(repr(self.hop_opts), repr(hop_opts)) + + def test_serialize_with_dst_opts(self): + self.setUp_with_dst_opts() + self.test_serialize() + + data = bytearray() + prev = None + buf = self.ip.serialize(data, prev) + dst_opts = ipv6.dst_opts.parser(six.binary_type(buf[ipv6.ipv6._MIN_LEN:])) + eq_(repr(self.dst_opts), repr(dst_opts)) + + def test_serialize_with_routing_type3(self): + self.setUp_with_routing_type3() + self.test_serialize() + + data = bytearray() + prev = None + buf = self.ip.serialize(data, prev) + routing = ipv6.routing.parser(six.binary_type(buf[ipv6.ipv6._MIN_LEN:])) + eq_(repr(self.routing), repr(routing)) + + def test_serialize_with_fragment(self): + self.setUp_with_fragment() + self.test_serialize() + + data = bytearray() + prev = None + buf = self.ip.serialize(data, prev) + fragment = ipv6.fragment.parser(six.binary_type(buf[ipv6.ipv6._MIN_LEN:])) + eq_(repr(self.fragment), repr(fragment)) + + def test_serialize_with_auth(self): + self.setUp_with_auth() + self.test_serialize() + + data = bytearray() + prev = None + buf = self.ip.serialize(data, prev) + auth = ipv6.auth.parser(six.binary_type(buf[ipv6.ipv6._MIN_LEN:])) + eq_(repr(self.auth), repr(auth)) + + def test_serialize_with_multi_headers(self): + self.setUp_with_multi_headers() + self.test_serialize() + + data = bytearray() + prev = None + buf = self.ip.serialize(data, prev) + offset = ipv6.ipv6._MIN_LEN + hop_opts = ipv6.hop_opts.parser(six.binary_type(buf[offset:])) + offset += len(hop_opts) + auth = ipv6.auth.parser(six.binary_type(buf[offset:])) + eq_(repr(self.hop_opts), repr(hop_opts)) + eq_(repr(self.auth), repr(auth)) + + def test_to_string(self): + ipv6_values = {'version': self.version, + 'traffic_class': self.traffic_class, + 'flow_label': self.flow_label, + 'payload_length': self.payload_length, + 'nxt': self.nxt, + 'hop_limit': self.hop_limit, + 'src': repr(self.src), + 'dst': repr(self.dst), + 'ext_hdrs': self.ext_hdrs} + _ipv6_str = ','.join(['%s=%s' % (k, ipv6_values[k]) + for k, v in inspect.getmembers(self.ip) + if k in ipv6_values]) + ipv6_str = '%s(%s)' % (ipv6.ipv6.__name__, _ipv6_str) + + eq_(str(self.ip), ipv6_str) + eq_(repr(self.ip), ipv6_str) + + def test_to_string_with_hop_opts(self): + self.setUp_with_hop_opts() + self.test_to_string() + + def test_to_string_with_dst_opts(self): + self.setUp_with_dst_opts() + self.test_to_string() + + def test_to_string_with_fragment(self): + self.setUp_with_fragment() + self.test_to_string() + + def test_to_string_with_auth(self): + self.setUp_with_auth() + self.test_to_string() + + def test_to_string_with_multi_headers(self): + self.setUp_with_multi_headers() + self.test_to_string() + + def test_len(self): + eq_(len(self.ip), 40) + + def test_len_with_hop_opts(self): + self.setUp_with_hop_opts() + eq_(len(self.ip), 40 + len(self.hop_opts)) + + def test_len_with_dst_opts(self): + self.setUp_with_dst_opts() + eq_(len(self.ip), 40 + len(self.dst_opts)) + + def test_len_with_routing_type3(self): + self.setUp_with_routing_type3() + eq_(len(self.ip), 40 + len(self.routing)) + + def test_len_with_fragment(self): + self.setUp_with_fragment() + eq_(len(self.ip), 40 + len(self.fragment)) + + def test_len_with_auth(self): + self.setUp_with_auth() + eq_(len(self.ip), 40 + len(self.auth)) + + def test_len_with_multi_headers(self): + self.setUp_with_multi_headers() + eq_(len(self.ip), 40 + len(self.hop_opts) + len(self.auth)) + + def test_default_args(self): + ip = ipv6.ipv6() + buf = ip.serialize(bytearray(), None) + res = struct.unpack(ipv6.ipv6._PACK_STR, six.binary_type(buf)) + + eq_(res[0], 6 << 28) + eq_(res[1], 0) + eq_(res[2], 6) + eq_(res[3], 255) + eq_(res[4], addrconv.ipv6.text_to_bin('10::10')) + eq_(res[5], addrconv.ipv6.text_to_bin('20::20')) + + # with extension header + ip = ipv6.ipv6( + nxt=0, ext_hdrs=[ + ipv6.hop_opts(58, 0, [ + ipv6.option(5, 2, b'\x00\x00'), + ipv6.option(1, 0, None)])]) + buf = ip.serialize(bytearray(), None) + res = struct.unpack(ipv6.ipv6._PACK_STR + '8s', six.binary_type(buf)) + + eq_(res[0], 6 << 28) + eq_(res[1], 8) + eq_(res[2], 0) + eq_(res[3], 255) + eq_(res[4], addrconv.ipv6.text_to_bin('10::10')) + eq_(res[5], addrconv.ipv6.text_to_bin('20::20')) + eq_(res[6], b'\x3a\x00\x05\x02\x00\x00\x01\x00') + + def test_json(self): + jsondict = self.ip.to_jsondict() + ip = ipv6.ipv6.from_jsondict(jsondict['ipv6']) + eq_(str(self.ip), str(ip)) + + def test_json_with_hop_opts(self): + self.setUp_with_hop_opts() + self.test_json() + + def test_json_with_dst_opts(self): + self.setUp_with_dst_opts() + self.test_json() + + def test_json_with_routing_type3(self): + self.setUp_with_routing_type3() + self.test_json() + + def test_json_with_fragment(self): + self.setUp_with_fragment() + self.test_json() + + def test_json_with_auth(self): + self.setUp_with_auth() + self.test_json() + + def test_json_with_multi_headers(self): + self.setUp_with_multi_headers() + self.test_json() + + +class Test_hop_opts(unittest.TestCase): + + def setUp(self): + self.nxt = 0 + self.size = 8 + self.data = [ + ipv6.option(5, 2, b'\x00\x00'), + ipv6.option(1, 0, None), + ipv6.option(0xc2, 4, b'\x00\x01\x00\x00'), + ipv6.option(1, 0, None), + ] + self.hop = ipv6.hop_opts(self.nxt, self.size, self.data) + self.form = '!BB' + self.buf = struct.pack(self.form, self.nxt, self.size) \ + + self.data[0].serialize() \ + + self.data[1].serialize() \ + + self.data[2].serialize() \ + + self.data[3].serialize() + + def tearDown(self): + pass + + def test_init(self): + eq_(self.nxt, self.hop.nxt) + eq_(self.size, self.hop.size) + eq_(self.data, self.hop.data) + + @raises(Exception) + def test_invalid_size(self): + ipv6.hop_opts(self.nxt, 1, self.data) + + def test_parser(self): + _res = ipv6.hop_opts.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.nxt, res.nxt) + eq_(self.size, res.size) + eq_(str(self.data), str(res.data)) + + def test_serialize(self): + buf = self.hop.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self.nxt, res[0]) + eq_(self.size, res[1]) + offset = struct.calcsize(self.form) + opt1 = ipv6.option.parser(six.binary_type(buf[offset:])) + offset += len(opt1) + opt2 = ipv6.option.parser(six.binary_type(buf[offset:])) + offset += len(opt2) + opt3 = ipv6.option.parser(six.binary_type(buf[offset:])) + offset += len(opt3) + opt4 = ipv6.option.parser(six.binary_type(buf[offset:])) + eq_(5, opt1.type_) + eq_(2, opt1.len_) + eq_(b'\x00\x00', opt1.data) + eq_(1, opt2.type_) + eq_(0, opt2.len_) + eq_(None, opt2.data) + eq_(0xc2, opt3.type_) + eq_(4, opt3.len_) + eq_(b'\x00\x01\x00\x00', opt3.data) + eq_(1, opt4.type_) + eq_(0, opt4.len_) + eq_(None, opt4.data) + + def test_len(self): + eq_(16, len(self.hop)) + + def test_default_args(self): + hdr = ipv6.hop_opts() + buf = hdr.serialize() + res = struct.unpack('!BB', six.binary_type(buf[:2])) + + eq_(res[0], 6) + eq_(res[1], 0) + opt = ipv6.option(type_=1, len_=4, data=b'\x00\x00\x00\x00') + eq_(six.binary_type(buf[2:]), opt.serialize()) + + +class Test_dst_opts(unittest.TestCase): + + def setUp(self): + self.nxt = 60 + self.size = 8 + self.data = [ + ipv6.option(5, 2, b'\x00\x00'), + ipv6.option(1, 0, None), + ipv6.option(0xc2, 4, b'\x00\x01\x00\x00'), + ipv6.option(1, 0, None), + ] + self.dst = ipv6.dst_opts(self.nxt, self.size, self.data) + self.form = '!BB' + self.buf = struct.pack(self.form, self.nxt, self.size) \ + + self.data[0].serialize() \ + + self.data[1].serialize() \ + + self.data[2].serialize() \ + + self.data[3].serialize() + + def tearDown(self): + pass + + def test_init(self): + eq_(self.nxt, self.dst.nxt) + eq_(self.size, self.dst.size) + eq_(self.data, self.dst.data) + + @raises(Exception) + def test_invalid_size(self): + ipv6.dst_opts(self.nxt, 1, self.data) + + def test_parser(self): + _res = ipv6.dst_opts.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.nxt, res.nxt) + eq_(self.size, res.size) + eq_(str(self.data), str(res.data)) + + def test_serialize(self): + buf = self.dst.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self.nxt, res[0]) + eq_(self.size, res[1]) + offset = struct.calcsize(self.form) + opt1 = ipv6.option.parser(six.binary_type(buf[offset:])) + offset += len(opt1) + opt2 = ipv6.option.parser(six.binary_type(buf[offset:])) + offset += len(opt2) + opt3 = ipv6.option.parser(six.binary_type(buf[offset:])) + offset += len(opt3) + opt4 = ipv6.option.parser(six.binary_type(buf[offset:])) + eq_(5, opt1.type_) + eq_(2, opt1.len_) + eq_(b'\x00\x00', opt1.data) + eq_(1, opt2.type_) + eq_(0, opt2.len_) + eq_(None, opt2.data) + eq_(0xc2, opt3.type_) + eq_(4, opt3.len_) + eq_(b'\x00\x01\x00\x00', opt3.data) + eq_(1, opt4.type_) + eq_(0, opt4.len_) + eq_(None, opt4.data) + + def test_len(self): + eq_(16, len(self.dst)) + + def test_default_args(self): + hdr = ipv6.dst_opts() + buf = hdr.serialize() + res = struct.unpack('!BB', six.binary_type(buf[:2])) + + eq_(res[0], 6) + eq_(res[1], 0) + opt = ipv6.option(type_=1, len_=4, data=b'\x00\x00\x00\x00') + eq_(six.binary_type(buf[2:]), opt.serialize()) + + +class Test_option(unittest.TestCase): + + def setUp(self): + self.type_ = 5 + self.data = b'\x00\x00' + self.len_ = len(self.data) + self.opt = ipv6.option(self.type_, self.len_, self.data) + self.form = '!BB%ds' % self.len_ + self.buf = struct.pack(self.form, self.type_, self.len_, self.data) + + def tearDown(self): + pass + + def test_init(self): + eq_(self.type_, self.opt.type_) + eq_(self.len_, self.opt.len_) + eq_(self.data, self.opt.data) + + def test_parser(self): + _res = ipv6.option.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.type_, res.type_) + eq_(self.len_, res.len_) + eq_(self.data, res.data) + + def test_serialize(self): + buf = self.opt.serialize() + res = struct.unpack_from(self.form, buf) + eq_(self.type_, res[0]) + eq_(self.len_, res[1]) + eq_(self.data, res[2]) + + def test_len(self): + eq_(len(self.opt), 2 + self.len_) + + +class Test_option_pad1(Test_option): + + def setUp(self): + self.type_ = 0 + self.len_ = -1 + self.data = None + self.opt = ipv6.option(self.type_, self.len_, self.data) + self.form = '!B' + self.buf = struct.pack(self.form, self.type_) + + def test_serialize(self): + buf = self.opt.serialize() + res = struct.unpack_from(self.form, buf) + eq_(self.type_, res[0]) + + def test_default_args(self): + opt = ipv6.option() + buf = opt.serialize() + res = struct.unpack('!B', buf) + + eq_(res[0], 0) + + +class Test_option_padN(Test_option): + + def setUp(self): + self.type_ = 1 + self.len_ = 0 + self.data = None + self.opt = ipv6.option(self.type_, self.len_, self.data) + self.form = '!BB' + self.buf = struct.pack(self.form, self.type_, self.len_) + + def test_serialize(self): + buf = self.opt.serialize() + res = struct.unpack_from(self.form, buf) + eq_(self.type_, res[0]) + eq_(self.len_, res[1]) + + +class Test_routing(unittest.TestCase): + + def setUp(self): + self.nxt = 0 + self.size = 6 + self.type_ = ipv6.routing.ROUTING_TYPE_3 + self.seg = 0 + self.cmpi = 0 + self.cmpe = 0 + self.adrs = ["2001:db8:dead::1", + "2001:db8:dead::2", + "2001:db8:dead::3"] + # calculate pad + self.pad = (8 - ((len(self.adrs) - 1) * (16 - self.cmpi) + + (16 - self.cmpe) % 8)) % 8 + # create buf + self.form = '!BBBBBB2x16s16s16s' + self.buf = struct.pack(self.form, self.nxt, self.size, + self.type_, self.seg, + (self.cmpi << 4) | self.cmpe, + self.pad << 4, + addrconv.ipv6.text_to_bin(self.adrs[0]), + addrconv.ipv6.text_to_bin(self.adrs[1]), + addrconv.ipv6.text_to_bin(self.adrs[2])) + + def tearDown(self): + pass + + def test_parser(self): + _res = ipv6.routing.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.nxt, res.nxt) + eq_(self.size, res.size) + eq_(self.type_, res.type_) + eq_(self.seg, res.seg) + eq_(self.cmpi, res.cmpi) + eq_(self.cmpe, res.cmpe) + eq_(self.pad, res._pad) + eq_(self.adrs[0], res.adrs[0]) + eq_(self.adrs[1], res.adrs[1]) + eq_(self.adrs[2], res.adrs[2]) + + def test_not_implemented_type(self): + not_implemented_buf = struct.pack( + '!BBBBBB2x', 0, 6, ipv6.routing.ROUTING_TYPE_2, 0, 0, 0) + instance = ipv6.routing.parser(not_implemented_buf) + assert None == instance + + def test_invalid_type(self): + invalid_type = 99 + invalid_buf = struct.pack('!BBBBBB2x', 0, 6, invalid_type, 0, 0, 0) + instance = ipv6.routing.parser(invalid_buf) + assert None == instance + + +class Test_routing_type3(unittest.TestCase): + + def setUp(self): + self.nxt = 0 + self.size = 6 + self.type_ = 3 + self.seg = 0 + self.cmpi = 0 + self.cmpe = 0 + self.adrs = ["2001:db8:dead::1", + "2001:db8:dead::2", + "2001:db8:dead::3"] + # calculate pad + self.pad = (8 - ((len(self.adrs) - 1) * (16 - self.cmpi) + + (16 - self.cmpe) % 8)) % 8 + + self.routing = ipv6.routing_type3( + self.nxt, self.size, self.type_, self.seg, self.cmpi, + self.cmpe, self.adrs) + self.form = '!BBBBBB2x16s16s16s' + self.buf = struct.pack(self.form, self.nxt, self.size, + self.type_, self.seg, + (self.cmpi << 4) | self.cmpe, + self.pad << 4, + addrconv.ipv6.text_to_bin(self.adrs[0]), + addrconv.ipv6.text_to_bin(self.adrs[1]), + addrconv.ipv6.text_to_bin(self.adrs[2])) + + def test_init(self): + eq_(self.nxt, self.routing.nxt) + eq_(self.size, self.routing.size) + eq_(self.type_, self.routing.type_) + eq_(self.seg, self.routing.seg) + eq_(self.cmpi, self.routing.cmpi) + eq_(self.cmpe, self.routing.cmpe) + eq_(self.pad, self.routing._pad) + eq_(self.adrs[0], self.routing.adrs[0]) + eq_(self.adrs[1], self.routing.adrs[1]) + eq_(self.adrs[2], self.routing.adrs[2]) + + def test_parser(self): + _res = ipv6.routing.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.nxt, res.nxt) + eq_(self.size, res.size) + eq_(self.type_, res.type_) + eq_(self.seg, res.seg) + eq_(self.cmpi, res.cmpi) + eq_(self.cmpe, res.cmpe) + eq_(self.pad, res._pad) + eq_(self.adrs[0], res.adrs[0]) + eq_(self.adrs[1], res.adrs[1]) + eq_(self.adrs[2], res.adrs[2]) + + def test_serialize(self): + buf = self.routing.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self.nxt, res[0]) + eq_(self.size, res[1]) + eq_(self.type_, res[2]) + eq_(self.seg, res[3]) + eq_(self.cmpi, res[4] >> 4) + eq_(self.cmpe, res[4] & 0xf) + eq_(self.pad, res[5]) + eq_(addrconv.ipv6.text_to_bin(self.adrs[0]), res[6]) + eq_(addrconv.ipv6.text_to_bin(self.adrs[1]), res[7]) + eq_(addrconv.ipv6.text_to_bin(self.adrs[2]), res[8]) + + def test_parser_with_adrs_zero(self): + nxt = 0 + size = 0 + type_ = 3 + seg = 0 + cmpi = 0 + cmpe = 0 + adrs = [] + # calculate pad + pad = (8 - ((len(adrs) - 1) * (16 - cmpi) + (16 - cmpe) % 8)) % 8 + + form = '!BBBBBB2x' + buf = struct.pack(form, nxt, size, type_, seg, + (cmpi << 4) | cmpe, pad << 4) + _res = ipv6.routing.parser(buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(nxt, res.nxt) + eq_(size, res.size) + eq_(type_, res.type_) + eq_(seg, res.seg) + eq_(cmpi, res.cmpi) + eq_(cmpe, res.cmpe) + eq_(pad, res._pad) + + def test_serialize_with_adrs_zero(self): + nxt = 0 + size = 0 + type_ = 3 + seg = 0 + cmpi = 0 + cmpe = 0 + adrs = [] + # calculate pad + pad = (8 - ((len(adrs) - 1) * (16 - cmpi) + (16 - cmpe) % 8)) % 8 + routing = ipv6.routing_type3( + nxt, size, type_, seg, cmpi, + cmpe, pad) + buf = routing.serialize() + form = '!BBBBBB2x' + res = struct.unpack_from(form, six.binary_type(buf)) + eq_(nxt, res[0]) + eq_(size, res[1]) + eq_(type_, res[2]) + eq_(seg, res[3]) + eq_(cmpi, res[4] >> 4) + eq_(cmpe, res[4] & 0xf) + eq_(pad, res[5]) + + def test_parser_with_compression(self): + pass + nxt = 0 + size = 3 + type_ = 3 + seg = 0 + cmpi = 8 + cmpe = 12 + adrs = ["2001:0db8:dead:0123:4567:89ab:cdef:0001", + "2001:0db8:dead:0123:4567:89ab:cdef:0002", + "2001:0db8:dead:0123:4567:89ab:cdef:0003"] + # calculate pad + pad = (8 - ((len(adrs) - 1) * (16 - cmpi) + (16 - cmpe) % 8)) % 8 + form = '!BBBBBB2x%ds%ds%ds' % (16 - cmpi, 16 - cmpi, 16 - cmpe) + slice_i = slice(cmpi, 16) + slice_e = slice(cmpe, 16) + buf = struct.pack(form, nxt, size, type_, seg, + (cmpi << 4) | cmpe, pad << 4, + addrconv.ipv6.text_to_bin(adrs[0])[slice_i], + addrconv.ipv6.text_to_bin(adrs[1])[slice_i], + addrconv.ipv6.text_to_bin(adrs[2])[slice_e]) + _res = ipv6.routing.parser(buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(nxt, res.nxt) + eq_(size, res.size) + eq_(type_, res.type_) + eq_(seg, res.seg) + eq_(cmpi, res.cmpi) + eq_(cmpe, res.cmpe) + eq_(pad, res._pad) + eq_("::4567:89ab:cdef:1", res.adrs[0]) + eq_("::4567:89ab:cdef:2", res.adrs[1]) + eq_("::205.239.0.3", res.adrs[2]) + + def test_serialize_with_compression(self): + nxt = 0 + size = 3 + type_ = 3 + seg = 0 + cmpi = 8 + cmpe = 8 + adrs = ["2001:db8:dead::1", + "2001:db8:dead::2", + "2001:db8:dead::3"] + # calculate pad + pad = (8 - ((len(adrs) - 1) * (16 - cmpi) + (16 - cmpe) % 8)) % 8 + slice_i = slice(cmpi, 16) + slice_e = slice(cmpe, 16) + routing = ipv6.routing_type3( + nxt, size, type_, seg, cmpi, cmpe, adrs) + buf = routing.serialize() + form = '!BBBBBB2x8s8s8s' + res = struct.unpack_from(form, six.binary_type(buf)) + eq_(nxt, res[0]) + eq_(size, res[1]) + eq_(type_, res[2]) + eq_(seg, res[3]) + eq_(cmpi, res[4] >> 4) + eq_(cmpe, res[4] & 0xf) + eq_(pad, res[5]) + eq_(addrconv.ipv6.text_to_bin(adrs[0])[slice_i], res[6]) + eq_(addrconv.ipv6.text_to_bin(adrs[1])[slice_i], res[7]) + eq_(addrconv.ipv6.text_to_bin(adrs[2])[slice_e], res[8]) + + def test_len(self): + eq_((6 + 1) * 8, len(self.routing)) + + def test_default_args(self): + hdr = ipv6.routing_type3() + buf = hdr.serialize() + LOG.info(repr(buf)) + res = struct.unpack_from(ipv6.routing_type3._PACK_STR, six.binary_type(buf)) + LOG.info(res) + + eq_(res[0], 6) + eq_(res[1], 0) + eq_(res[2], 3) + eq_(res[3], 0) + eq_(res[4], (0 << 4) | 0) + eq_(res[5], 0) + + +class Test_fragment(unittest.TestCase): + + def setUp(self): + self.nxt = 44 + self.offset = 50 + self.more = 1 + self.id_ = 123 + self.fragment = ipv6.fragment( + self.nxt, self.offset, self.more, self.id_) + + self.off_m = (self.offset << 3 | self.more) + self.form = '!BxHI' + self.buf = struct.pack(self.form, self.nxt, self.off_m, self.id_) + + def test_init(self): + eq_(self.nxt, self.fragment.nxt) + eq_(self.offset, self.fragment.offset) + eq_(self.more, self.fragment.more) + eq_(self.id_, self.fragment.id_) + + def test_parser(self): + _res = ipv6.fragment.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.nxt, res.nxt) + eq_(self.offset, res.offset) + eq_(self.more, res.more) + eq_(self.id_, res.id_) + + def test_serialize(self): + buf = self.fragment.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self.nxt, res[0]) + eq_(self.off_m, res[1]) + eq_(self.id_, res[2]) + + def test_len(self): + eq_(8, len(self.fragment)) + + def test_default_args(self): + hdr = ipv6.fragment() + buf = hdr.serialize() + res = struct.unpack_from(ipv6.fragment._PACK_STR, buf) + + eq_(res[0], 6) + eq_(res[1], 0) + eq_(res[2], 0) + + +class Test_auth(unittest.TestCase): + + def setUp(self): + self.nxt = 0 + self.size = 4 + self.spi = 256 + self.seq = 1 + self.data = b'\x21\xd3\xa9\x5c\x5f\xfd\x4d\x18\x46\x22\xb9\xf8' + self.auth = ipv6.auth( + self.nxt, self.size, self.spi, self.seq, self.data) + self.form = '!BB2xII12s' + self.buf = struct.pack(self.form, self.nxt, self.size, self.spi, + self.seq, self.data) + + def test_init(self): + eq_(self.nxt, self.auth.nxt) + eq_(self.size, self.auth.size) + eq_(self.spi, self.auth.spi) + eq_(self.seq, self.auth.seq) + eq_(self.data, self.auth.data) + + def test_parser(self): + _res = ipv6.auth.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(self.nxt, res.nxt) + eq_(self.size, res.size) + eq_(self.spi, res.spi) + eq_(self.seq, res.seq) + eq_(self.data, res.data) + + def test_serialize(self): + buf = self.auth.serialize() + res = struct.unpack_from(self.form, six.binary_type(buf)) + eq_(self.nxt, res[0]) + eq_(self.size, res[1]) + eq_(self.spi, res[2]) + eq_(self.seq, res[3]) + eq_(self.data, res[4]) + + def test_len(self): + eq_((4 + 2) * 4, len(self.auth)) + + def test_len_re(self): + size = 5 + auth = ipv6.auth( + 0, size, 256, 1, + b'\x21\xd3\xa9\x5c\x5f\xfd\x4d\x18\x46\x22\xb9\xf8\xf8\xf8\xf8\xf8') + eq_((size + 2) * 4, len(auth)) + + def test_default_args(self): + hdr = ipv6.auth() + buf = hdr.serialize() + LOG.info(repr(buf)) + res = struct.unpack_from(ipv6.auth._PACK_STR, six.binary_type(buf)) + LOG.info(res) + + eq_(res[0], 6) + eq_(res[1], 2) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(buf[ipv6.auth._MIN_LEN:], b'\x00\x00\x00\x00') diff --git a/tests/unit/packet/test_llc.py b/tests/unit/packet/test_llc.py new file mode 100644 index 00000000..05894ab7 --- /dev/null +++ b/tests/unit/packet/test_llc.py @@ -0,0 +1,42 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging + +from nose.tools import eq_ +from ryu.lib.packet import llc + + +LOG = logging.getLogger(__name__) + + +class Test_ControlFormatI(unittest.TestCase): + msg = llc.llc(llc.SAP_BPDU, llc.SAP_BPDU, llc.ControlFormatI()) + + def test_json(self): + jsondict = self.msg.to_jsondict() + msg = llc.llc.from_jsondict(jsondict['llc']) + eq_(str(self.msg), str(msg)) + + +class Test_ControlFormatS(Test_ControlFormatI): + msg = llc.llc(llc.SAP_BPDU, llc.SAP_BPDU, llc.ControlFormatS()) + + +class Test_ControlFormatU(Test_ControlFormatI): + msg = llc.llc(llc.SAP_BPDU, llc.SAP_BPDU, llc.ControlFormatU()) diff --git a/tests/unit/packet/test_lldp.py b/tests/unit/packet/test_lldp.py new file mode 100644 index 00000000..d8d261c2 --- /dev/null +++ b/tests/unit/packet/test_lldp.py @@ -0,0 +1,533 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import six +import struct +import inspect +from nose.tools import ok_, eq_, nottest + +from ryu.ofproto import ether +from ryu.lib.packet import packet +from ryu.lib.packet import ethernet +from ryu.lib.packet import lldp +from ryu.lib import addrconv + +LOG = logging.getLogger(__name__) + + +class TestLLDPMandatoryTLV(unittest.TestCase): + def setUp(self): + # sample data is based on: + # http://wiki.wireshark.org/LinkLayerDiscoveryProtocol + # + # mandatory TLV only + self.data = b'\x01\x80\xc2\x00\x00\x0e\x00\x04' \ + + b'\x96\x1f\xa7\x26\x88\xcc\x02\x07' \ + + b'\x04\x00\x04\x96\x1f\xa7\x26\x04' \ + + b'\x04\x05\x31\x2f\x33\x06\x02\x00' \ + + b'\x78\x00\x00' + + def tearDown(self): + pass + + def test_get_tlv_type(self): + buf = b'\x02\x07\x04\x00\x04\x96\x1f\xa7\x26' + eq_(lldp.LLDPBasicTLV.get_type(buf), lldp.LLDP_TLV_CHASSIS_ID) + + def test_parse_without_ethernet(self): + buf = self.data[ethernet.ethernet._MIN_LEN:] + (lldp_pkt, cls, rest_buf) = lldp.lldp.parser(buf) + eq_(len(rest_buf), 0) + + tlvs = lldp_pkt.tlvs + eq_(tlvs[0].tlv_type, lldp.LLDP_TLV_CHASSIS_ID) + eq_(tlvs[0].len, 7) + eq_(tlvs[0].subtype, lldp.ChassisID.SUB_MAC_ADDRESS) + eq_(tlvs[0].chassis_id, b'\x00\x04\x96\x1f\xa7\x26') + eq_(tlvs[1].tlv_type, lldp.LLDP_TLV_PORT_ID) + eq_(tlvs[1].len, 4) + eq_(tlvs[1].subtype, lldp.PortID.SUB_INTERFACE_NAME) + eq_(tlvs[1].port_id, b'1/3') + eq_(tlvs[2].tlv_type, lldp.LLDP_TLV_TTL) + eq_(tlvs[2].len, 2) + eq_(tlvs[2].ttl, 120) + eq_(tlvs[3].tlv_type, lldp.LLDP_TLV_END) + + def test_parse(self): + buf = self.data + pkt = packet.Packet(buf) + i = iter(pkt) + + eq_(type(next(i)), ethernet.ethernet) + eq_(type(next(i)), lldp.lldp) + + def test_tlv(self): + tlv = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, + chassis_id=b'\x00\x04\x96\x1f\xa7\x26') + eq_(tlv.tlv_type, lldp.LLDP_TLV_CHASSIS_ID) + eq_(tlv.len, 7) + (typelen, ) = struct.unpack('!H', b'\x02\x07') + eq_(tlv.typelen, typelen) + + def test_serialize_without_ethernet(self): + tlv_chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, + chassis_id=b'\x00\x04\x96\x1f\xa7\x26') + tlv_port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, + port_id=b'1/3') + tlv_ttl = lldp.TTL(ttl=120) + tlv_end = lldp.End() + tlvs = (tlv_chassis_id, tlv_port_id, tlv_ttl, tlv_end) + lldp_pkt = lldp.lldp(tlvs) + + eq_(lldp_pkt.serialize(None, None), + self.data[ethernet.ethernet._MIN_LEN:]) + + def test_serialize(self): + pkt = packet.Packet() + + dst = lldp.LLDP_MAC_NEAREST_BRIDGE + src = '00:04:96:1f:a7:26' + ethertype = ether.ETH_TYPE_LLDP + eth_pkt = ethernet.ethernet(dst, src, ethertype) + pkt.add_protocol(eth_pkt) + + tlv_chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, + chassis_id=addrconv.mac. + text_to_bin(src)) + tlv_port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, + port_id=b'1/3') + tlv_ttl = lldp.TTL(ttl=120) + tlv_end = lldp.End() + tlvs = (tlv_chassis_id, tlv_port_id, tlv_ttl, tlv_end) + lldp_pkt = lldp.lldp(tlvs) + pkt.add_protocol(lldp_pkt) + + eq_(len(pkt.protocols), 2) + + pkt.serialize() + + # Note: If ethernet frame is less than 60 bytes length, + # ethernet.ethernet() appends padding to the payload. + # So, we splits the serialized data to compare. + data_len = len(self.data) + pkt_data_lldp = pkt.data[:data_len] + pkt_data_pad = pkt.data[data_len:] + eq_(b'\x00' * (60 - data_len), pkt_data_pad) + + eq_(self.data, pkt_data_lldp) + + def test_to_string(self): + chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, + chassis_id=b'\x00\x04\x96\x1f\xa7\x26') + port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, + port_id=b'1/3') + ttl = lldp.TTL(ttl=120) + end = lldp.End() + tlvs = (chassis_id, port_id, ttl, end) + lldp_pkt = lldp.lldp(tlvs) + + chassis_id_values = {'subtype': lldp.ChassisID.SUB_MAC_ADDRESS, + 'chassis_id': b'\x00\x04\x96\x1f\xa7\x26', + 'len': chassis_id.len, + 'typelen': chassis_id.typelen} + _ch_id_str = ','.join(['%s=%s' % (k, repr(chassis_id_values[k])) + for k, v in inspect.getmembers(chassis_id) + if k in chassis_id_values]) + tlv_chassis_id_str = '%s(%s)' % (lldp.ChassisID.__name__, _ch_id_str) + + port_id_values = {'subtype': port_id.subtype, + 'port_id': port_id.port_id, + 'len': port_id.len, + 'typelen': port_id.typelen} + _port_id_str = ','.join(['%s=%s' % (k, repr(port_id_values[k])) + for k, v in inspect.getmembers(port_id) + if k in port_id_values]) + tlv_port_id_str = '%s(%s)' % (lldp.PortID.__name__, _port_id_str) + + ttl_values = {'ttl': ttl.ttl, + 'len': ttl.len, + 'typelen': ttl.typelen} + _ttl_str = ','.join(['%s=%s' % (k, repr(ttl_values[k])) + for k, v in inspect.getmembers(ttl) + if k in ttl_values]) + tlv_ttl_str = '%s(%s)' % (lldp.TTL.__name__, _ttl_str) + + end_values = {'len': end.len, + 'typelen': end.typelen} + _end_str = ','.join(['%s=%s' % (k, repr(end_values[k])) + for k, v in inspect.getmembers(end) + if k in end_values]) + tlv_end_str = '%s(%s)' % (lldp.End.__name__, _end_str) + + _tlvs_str = '(%s, %s, %s, %s)' + tlvs_str = _tlvs_str % (tlv_chassis_id_str, + tlv_port_id_str, + tlv_ttl_str, + tlv_end_str) + + _lldp_str = '%s(tlvs=%s)' + lldp_str = _lldp_str % (lldp.lldp.__name__, + tlvs_str) + + eq_(str(lldp_pkt), lldp_str) + eq_(repr(lldp_pkt), lldp_str) + + def test_json(self): + chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, + chassis_id=b'\x00\x04\x96\x1f\xa7\x26') + port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, + port_id=b'1/3') + ttl = lldp.TTL(ttl=120) + end = lldp.End() + tlvs = (chassis_id, port_id, ttl, end) + lldp1 = lldp.lldp(tlvs) + jsondict = lldp1.to_jsondict() + lldp2 = lldp.lldp.from_jsondict(jsondict['lldp']) + eq_(str(lldp1), str(lldp2)) + + +class TestLLDPOptionalTLV(unittest.TestCase): + def setUp(self): + # sample data is based on: + # http://wiki.wireshark.org/LinkLayerDiscoveryProtocol + # + # include optional TLV + self.data = b'\x01\x80\xc2\x00\x00\x0e\x00\x01' \ + + b'\x30\xf9\xad\xa0\x88\xcc\x02\x07' \ + + b'\x04\x00\x01\x30\xf9\xad\xa0\x04' \ + + b'\x04\x05\x31\x2f\x31\x06\x02\x00' \ + + b'\x78\x08\x17\x53\x75\x6d\x6d\x69' \ + + b'\x74\x33\x30\x30\x2d\x34\x38\x2d' \ + + b'\x50\x6f\x72\x74\x20\x31\x30\x30' \ + + b'\x31\x00\x0a\x0d\x53\x75\x6d\x6d' \ + + b'\x69\x74\x33\x30\x30\x2d\x34\x38' \ + + b'\x00\x0c\x4c\x53\x75\x6d\x6d\x69' \ + + b'\x74\x33\x30\x30\x2d\x34\x38\x20' \ + + b'\x2d\x20\x56\x65\x72\x73\x69\x6f' \ + + b'\x6e\x20\x37\x2e\x34\x65\x2e\x31' \ + + b'\x20\x28\x42\x75\x69\x6c\x64\x20' \ + + b'\x35\x29\x20\x62\x79\x20\x52\x65' \ + + b'\x6c\x65\x61\x73\x65\x5f\x4d\x61' \ + + b'\x73\x74\x65\x72\x20\x30\x35\x2f' \ + + b'\x32\x37\x2f\x30\x35\x20\x30\x34' \ + + b'\x3a\x35\x33\x3a\x31\x31\x00\x0e' \ + + b'\x05\x01\x00\x14\x00\x14\x10\x0e' \ + + b'\x07' \ + + b'\x06\x00\x01\x30\xf9\xad\xa0\x02' \ + + b'\x00\x00\x03\xe9\x00\xfe\x07\x00' \ + + b'\x12\x0f\x02\x07\x01\x00\xfe\x09' \ + + b'\x00\x12\x0f\x01\x03\x6c\x00\x00' \ + + b'\x10\xfe\x09\x00\x12\x0f\x03\x01' \ + + b'\x00\x00\x00\x00\xfe\x06\x00\x12' \ + + b'\x0f\x04\x05\xf2\xfe\x06\x00\x80' \ + + b'\xc2\x01\x01\xe8\xfe\x07\x00\x80' \ + + b'\xc2\x02\x01\x00\x00\xfe\x17\x00' \ + + b'\x80\xc2\x03\x01\xe8\x10\x76\x32' \ + + b'\x2d\x30\x34\x38\x38\x2d\x30\x33' \ + + b'\x2d\x30\x35\x30\x35\x00\xfe\x05' \ + + b'\x00\x80\xc2\x04\x00\x00\x00' + + def tearDown(self): + pass + + def test_parse(self): + buf = self.data + pkt = packet.Packet(buf) + i = iter(pkt) + + eq_(type(next(i)), ethernet.ethernet) + lldp_pkt = next(i) + eq_(type(lldp_pkt), lldp.lldp) + + tlvs = lldp_pkt.tlvs + + # Port Description + eq_(tlvs[3].tlv_type, lldp.LLDP_TLV_PORT_DESCRIPTION) + eq_(tlvs[3].port_description, b'Summit300-48-Port 1001\x00') + + # System Name + eq_(tlvs[4].tlv_type, lldp.LLDP_TLV_SYSTEM_NAME) + eq_(tlvs[4].system_name, b'Summit300-48\x00') + + # System Description + + eq_(tlvs[5].tlv_type, lldp.LLDP_TLV_SYSTEM_DESCRIPTION) + eq_(tlvs[5].system_description, + b'Summit300-48 - Version 7.4e.1 (Build 5) ' + + b'by Release_Master 05/27/05 04:53:11\x00') + + # SystemCapabilities + eq_(tlvs[6].tlv_type, lldp.LLDP_TLV_SYSTEM_CAPABILITIES) + eq_(tlvs[6].subtype, lldp.ChassisID.SUB_CHASSIS_COMPONENT) + eq_(tlvs[6].system_cap & lldp.SystemCapabilities.CAP_MAC_BRIDGE, + lldp.SystemCapabilities.CAP_MAC_BRIDGE) + eq_(tlvs[6].enabled_cap & lldp.SystemCapabilities.CAP_MAC_BRIDGE, + lldp.SystemCapabilities.CAP_MAC_BRIDGE) + eq_(tlvs[6].system_cap & lldp.SystemCapabilities.CAP_TELEPHONE, 0) + eq_(tlvs[6].enabled_cap & lldp.SystemCapabilities.CAP_TELEPHONE, 0) + + # Management Address + eq_(tlvs[7].tlv_type, lldp.LLDP_TLV_MANAGEMENT_ADDRESS) + eq_(tlvs[7].addr_len, 7) + eq_(tlvs[7].addr, b'\x00\x01\x30\xf9\xad\xa0') + eq_(tlvs[7].intf_num, 1001) + + # Organizationally Specific + eq_(tlvs[8].tlv_type, lldp.LLDP_TLV_ORGANIZATIONALLY_SPECIFIC) + eq_(tlvs[8].oui, b'\x00\x12\x0f') # IEEE 802.3 + eq_(tlvs[8].subtype, 0x02) # Power Via MDI + + # End + eq_(tlvs[16].tlv_type, lldp.LLDP_TLV_END) + + def test_parse_corrupted(self): + buf = self.data + pkt = packet.Packet(buf[:128]) + + def test_serialize(self): + pkt = packet.Packet() + + dst = lldp.LLDP_MAC_NEAREST_BRIDGE + src = '00:01:30:f9:ad:a0' + ethertype = ether.ETH_TYPE_LLDP + eth_pkt = ethernet.ethernet(dst, src, ethertype) + pkt.add_protocol(eth_pkt) + + tlv_chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, + chassis_id=addrconv.mac. + text_to_bin(src)) + tlv_port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, + port_id=b'1/1') + tlv_ttl = lldp.TTL(ttl=120) + tlv_port_description = lldp.PortDescription( + port_description=b'Summit300-48-Port 1001\x00') + tlv_system_name = lldp.SystemName(system_name=b'Summit300-48\x00') + tlv_system_description = lldp.SystemDescription( + system_description=b'Summit300-48 - Version 7.4e.1 (Build 5) ' + + b'by Release_Master 05/27/05 04:53:11\x00') + tlv_system_capabilities = lldp.SystemCapabilities( + subtype=lldp.ChassisID.SUB_CHASSIS_COMPONENT, + system_cap=0x14, + enabled_cap=0x14) + tlv_management_address = lldp.ManagementAddress( + addr_subtype=0x06, addr=b'\x00\x01\x30\xf9\xad\xa0', + intf_subtype=0x02, intf_num=1001, + oid=b'') + tlv_organizationally_specific = lldp.OrganizationallySpecific( + oui=b'\x00\x12\x0f', subtype=0x02, info=b'\x07\x01\x00') + tlv_end = lldp.End() + tlvs = (tlv_chassis_id, tlv_port_id, tlv_ttl, tlv_port_description, + tlv_system_name, tlv_system_description, + tlv_system_capabilities, tlv_management_address, + tlv_organizationally_specific, tlv_end) + lldp_pkt = lldp.lldp(tlvs) + pkt.add_protocol(lldp_pkt) + + eq_(len(pkt.protocols), 2) + + pkt.serialize() + + # self.data has many organizationally specific TLVs + data = six.binary_type(pkt.data[:-2]) + eq_(data, self.data[:len(data)]) + + def test_to_string(self): + chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, + chassis_id=b'\x00\x01\x30\xf9\xad\xa0') + port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, + port_id=b'1/1') + ttl = lldp.TTL(ttl=120) + port_desc = lldp.PortDescription( + port_description=b'Summit300-48-Port 1001\x00') + sys_name = lldp.SystemName(system_name=b'Summit300-48\x00') + sys_desc = lldp.SystemDescription( + system_description=b'Summit300-48 - Version 7.4e.1 (Build 5) ' + + b'by Release_Master 05/27/05 04:53:11\x00') + sys_cap = lldp.SystemCapabilities( + subtype=lldp.ChassisID.SUB_CHASSIS_COMPONENT, + system_cap=0x14, + enabled_cap=0x14) + man_addr = lldp.ManagementAddress( + addr_subtype=0x06, addr=b'\x00\x01\x30\xf9\xad\xa0', + intf_subtype=0x02, intf_num=1001, + oid='') + org_spec = lldp.OrganizationallySpecific( + oui=b'\x00\x12\x0f', subtype=0x02, info=b'\x07\x01\x00') + end = lldp.End() + tlvs = (chassis_id, port_id, ttl, port_desc, sys_name, + sys_desc, sys_cap, man_addr, org_spec, end) + lldp_pkt = lldp.lldp(tlvs) + + # ChassisID string + chassis_id_values = {'subtype': lldp.ChassisID.SUB_MAC_ADDRESS, + 'chassis_id': b'\x00\x01\x30\xf9\xad\xa0', + 'len': chassis_id.len, + 'typelen': chassis_id.typelen} + _ch_id_str = ','.join(['%s=%s' % (k, repr(chassis_id_values[k])) + for k, v in inspect.getmembers(chassis_id) + if k in chassis_id_values]) + tlv_chassis_id_str = '%s(%s)' % (lldp.ChassisID.__name__, _ch_id_str) + + # PortID string + port_id_values = {'subtype': port_id.subtype, + 'port_id': port_id.port_id, + 'len': port_id.len, + 'typelen': port_id.typelen} + _port_id_str = ','.join(['%s=%s' % (k, repr(port_id_values[k])) + for k, v in inspect.getmembers(port_id) + if k in port_id_values]) + tlv_port_id_str = '%s(%s)' % (lldp.PortID.__name__, _port_id_str) + + # TTL string + ttl_values = {'ttl': ttl.ttl, + 'len': ttl.len, + 'typelen': ttl.typelen} + _ttl_str = ','.join(['%s=%s' % (k, repr(ttl_values[k])) + for k, v in inspect.getmembers(ttl) + if k in ttl_values]) + tlv_ttl_str = '%s(%s)' % (lldp.TTL.__name__, _ttl_str) + + # PortDescription string + port_desc_values = {'tlv_info': port_desc.tlv_info, + 'len': port_desc.len, + 'typelen': port_desc.typelen} + _port_desc_str = ','.join(['%s=%s' % (k, repr(port_desc_values[k])) + for k, v in inspect.getmembers(port_desc) + if k in port_desc_values]) + tlv_port_desc_str = '%s(%s)' % (lldp.PortDescription.__name__, + _port_desc_str) + + # SystemName string + sys_name_values = {'tlv_info': sys_name.tlv_info, + 'len': sys_name.len, + 'typelen': sys_name.typelen} + _system_name_str = ','.join(['%s=%s' % (k, repr(sys_name_values[k])) + for k, v in inspect.getmembers(sys_name) + if k in sys_name_values]) + tlv_system_name_str = '%s(%s)' % (lldp.SystemName.__name__, + _system_name_str) + + # SystemDescription string + sys_desc_values = {'tlv_info': sys_desc.tlv_info, + 'len': sys_desc.len, + 'typelen': sys_desc.typelen} + _sys_desc_str = ','.join(['%s=%s' % (k, repr(sys_desc_values[k])) + for k, v in inspect.getmembers(sys_desc) + if k in sys_desc_values]) + tlv_sys_desc_str = '%s(%s)' % (lldp.SystemDescription.__name__, + _sys_desc_str) + + # SystemCapabilities string + sys_cap_values = {'subtype': lldp.ChassisID.SUB_CHASSIS_COMPONENT, + 'system_cap': 0x14, + 'enabled_cap': 0x14, + 'len': sys_cap.len, + 'typelen': sys_cap.typelen} + _sys_cap_str = ','.join(['%s=%s' % (k, repr(sys_cap_values[k])) + for k, v in inspect.getmembers(sys_cap) + if k in sys_cap_values]) + tlv_sys_cap_str = '%s(%s)' % (lldp.SystemCapabilities.__name__, + _sys_cap_str) + + # ManagementAddress string + man_addr_values = {'addr_subtype': 0x06, + 'addr': b'\x00\x01\x30\xf9\xad\xa0', + 'addr_len': man_addr.addr_len, + 'intf_subtype': 0x02, + 'intf_num': 1001, + 'oid': '', + 'oid_len': man_addr.oid_len, + 'len': man_addr.len, + 'typelen': man_addr.typelen} + _man_addr_str = ','.join(['%s=%s' % (k, repr(man_addr_values[k])) + for k, v in inspect.getmembers(man_addr) + if k in man_addr_values]) + tlv_man_addr_str = '%s(%s)' % (lldp.ManagementAddress.__name__, + _man_addr_str) + + # OrganizationallySpecific string + org_spec_values = {'oui': b'\x00\x12\x0f', + 'subtype': 0x02, + 'info': b'\x07\x01\x00', + 'len': org_spec.len, + 'typelen': org_spec.typelen} + _org_spec_str = ','.join(['%s=%s' % (k, repr(org_spec_values[k])) + for k, v in inspect.getmembers(org_spec) + if k in org_spec_values]) + tlv_org_spec_str = '%s(%s)' % (lldp.OrganizationallySpecific.__name__, + _org_spec_str) + + # End string + end_values = {'len': end.len, + 'typelen': end.typelen} + _end_str = ','.join(['%s=%s' % (k, repr(end_values[k])) + for k, v in inspect.getmembers(end) + if k in end_values]) + tlv_end_str = '%s(%s)' % (lldp.End.__name__, _end_str) + + # tlvs string + _tlvs_str = '(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s)' + tlvs_str = _tlvs_str % (tlv_chassis_id_str, + tlv_port_id_str, + tlv_ttl_str, + tlv_port_desc_str, + tlv_system_name_str, + tlv_sys_desc_str, + tlv_sys_cap_str, + tlv_man_addr_str, + tlv_org_spec_str, + tlv_end_str) + + # lldp string + _lldp_str = '%s(tlvs=%s)' + lldp_str = _lldp_str % (lldp.lldp.__name__, + tlvs_str) + + eq_(str(lldp_pkt), lldp_str) + eq_(repr(lldp_pkt), lldp_str) + + def test_json(self): + chassis_id = lldp.ChassisID(subtype=lldp.ChassisID.SUB_MAC_ADDRESS, + chassis_id=b'\x00\x01\x30\xf9\xad\xa0') + port_id = lldp.PortID(subtype=lldp.PortID.SUB_INTERFACE_NAME, + port_id=b'1/1') + ttl = lldp.TTL(ttl=120) + port_desc = lldp.PortDescription( + port_description=b'Summit300-48-Port 1001\x00') + sys_name = lldp.SystemName(system_name=b'Summit300-48\x00') + sys_desc = lldp.SystemDescription( + system_description=b'Summit300-48 - Version 7.4e.1 (Build 5) ' + + b'by Release_Master 05/27/05 04:53:11\x00') + sys_cap = lldp.SystemCapabilities( + subtype=lldp.ChassisID.SUB_CHASSIS_COMPONENT, + system_cap=0x14, + enabled_cap=0x14) + man_addr = lldp.ManagementAddress( + addr_subtype=0x06, addr=b'\x00\x01\x30\xf9\xad\xa0', + intf_subtype=0x02, intf_num=1001, + oid='') + org_spec = lldp.OrganizationallySpecific( + oui=b'\x00\x12\x0f', subtype=0x02, info=b'\x07\x01\x00') + end = lldp.End() + tlvs = (chassis_id, port_id, ttl, port_desc, sys_name, + sys_desc, sys_cap, man_addr, org_spec, end) + lldp1 = lldp.lldp(tlvs) + jsondict = lldp1.to_jsondict() + lldp2 = lldp.lldp.from_jsondict(jsondict['lldp']) + eq_(str(lldp1), str(lldp2)) diff --git a/tests/unit/packet/test_mpls.py b/tests/unit/packet/test_mpls.py new file mode 100644 index 00000000..e3f9bccf --- /dev/null +++ b/tests/unit/packet/test_mpls.py @@ -0,0 +1,92 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import unittest +import logging +import inspect + +from nose.tools import eq_ +from ryu.lib.packet import mpls + + +LOG = logging.getLogger(__name__) + + +class Test_mpls(unittest.TestCase): + + label = 29 + exp = 6 + bsb = 1 + ttl = 64 + mp = mpls.mpls(label, exp, bsb, ttl) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_to_string(self): + mpls_values = {'label': self.label, + 'exp': self.exp, + 'bsb': self.bsb, + 'ttl': self.ttl} + _mpls_str = ','.join(['%s=%s' % (k, repr(mpls_values[k])) + for k, v in inspect.getmembers(self.mp) + if k in mpls_values]) + mpls_str = '%s(%s)' % (mpls.mpls.__name__, _mpls_str) + + eq_(str(self.mp), mpls_str) + eq_(repr(self.mp), mpls_str) + + def test_json(self): + jsondict = self.mp.to_jsondict() + mp = mpls.mpls.from_jsondict(jsondict['mpls']) + eq_(str(self.mp), str(mp)) + + def test_label_from_bin_true(self): + mpls_label = 0xfffff + is_bos = True + buf = b'\xff\xff\xf1' + mpls_label_out, is_bos_out = mpls.label_from_bin(buf) + + eq_(mpls_label, mpls_label_out) + eq_(is_bos, is_bos_out) + + def test_label_from_bin_false(self): + mpls_label = 0xfffff + is_bos = False + buf = b'\xff\xff\xf0' + mpls_label_out, is_bos_out = mpls.label_from_bin(buf) + + eq_(mpls_label, mpls_label_out) + eq_(is_bos, is_bos_out) + + def test_label_to_bin_true(self): + mpls_label = 0xfffff + is_bos = True + label = b'\xff\xff\xf1' + label_out = mpls.label_to_bin(mpls_label, is_bos) + + eq_(label, label_out) + + def test_label_to_bin_false(self): + mpls_label = 0xfffff + is_bos = False + label = b'\xff\xff\xf0' + label_out = mpls.label_to_bin(mpls_label, is_bos) + + eq_(label, label_out) diff --git a/tests/unit/packet/test_openflow.py b/tests/unit/packet/test_openflow.py new file mode 100644 index 00000000..b0dca25f --- /dev/null +++ b/tests/unit/packet/test_openflow.py @@ -0,0 +1,64 @@ +# Copyright (C) 2017 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import logging +import os +import sys + +import unittest +from nose.tools import eq_ +from nose.tools import ok_ + +from ryu.lib import pcaplib +from ryu.lib.packet import openflow +from ryu.lib.packet import packet +from ryu.utils import binary_str + + +LOG = logging.getLogger(__name__) + +OPENFLOW_DATA_DIR = os.path.join( + os.path.dirname(sys.modules[__name__].__file__), + '../../packet_data/pcap/') + + +class Test_openflow(unittest.TestCase): + """ + Test case for ryu.lib.packet.openflow. + """ + + def test_pcap(self): + files = [ + 'openflow_flowmod', + 'openflow_flowstats_req', + 'openflow_invalid_version', + ] + + for f in files: + # print('*** testing %s ...' % f) + for _, buf in pcaplib.Reader( + open(OPENFLOW_DATA_DIR + f + '.pcap', 'rb')): + # Checks if message can be parsed as expected. + pkt = packet.Packet(buf) + openflow_pkt = pkt.get_protocol(openflow.openflow) + ok_(isinstance(openflow_pkt, openflow.openflow), + 'Failed to parse OpenFlow message: %s' % pkt) + + # Checks if message can be serialized as expected. + pkt.serialize() + eq_(buf, pkt.data, + "b'%s' != b'%s'" % (binary_str(buf), binary_str(pkt.data))) diff --git a/tests/unit/packet/test_ospf.py b/tests/unit/packet/test_ospf.py new file mode 100644 index 00000000..df57b8de --- /dev/null +++ b/tests/unit/packet/test_ospf.py @@ -0,0 +1,120 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +from nose.tools import eq_ +from nose.tools import ok_ + +from ryu.lib.packet import ospf + + +class Test_ospf(unittest.TestCase): + """ Test case for ryu.lib.packet.ospf + """ + def setUp(self): + pass + + def tearDown(self): + pass + + def test_router_lsa(self): + link1 = ospf.RouterLSA.Link(id_='10.0.0.1', data='255.255.255.0', + type_=ospf.LSA_LINK_TYPE_STUB, metric=10) + msg = ospf.RouterLSA(id_='192.168.0.1', adv_router='192.168.0.2', + links=[link1]) + binmsg = msg.serialize() + msg2, cls, rest = ospf.LSA.parser(binmsg) + eq_(msg.header.checksum, msg2.header.checksum) + eq_(str(msg), str(msg2)) + eq_(rest, b'') + + def test_network_lsa(self): + msg = ospf.NetworkLSA(id_='192.168.0.1', adv_router='192.168.0.2', + mask='255.255.255.0', routers=['192.168.0.2']) + binmsg = msg.serialize() + msg2, cls, rest = ospf.LSA.parser(binmsg) + eq_(msg.header.checksum, msg2.header.checksum) + eq_(str(msg), str(msg2)) + eq_(rest, b'') + + def test_as_external_lsa(self): + extnw1 = ospf.ASExternalLSA.ExternalNetwork(mask='255.255.255.0', + metric=20, + fwd_addr='10.0.0.1') + msg = ospf.ASExternalLSA(id_='192.168.0.1', adv_router='192.168.0.2', + extnws=[extnw1]) + binmsg = msg.serialize() + msg2, cls, rest = ospf.LSA.parser(binmsg) + eq_(msg.header.checksum, msg2.header.checksum) + eq_(str(msg), str(msg2)) + eq_(rest, b'') + + def test_hello(self): + msg = ospf.OSPFHello(router_id='192.168.0.1', + neighbors=['192.168.0.2']) + binmsg = msg.serialize() + msg2, cls, rest = ospf.OSPFMessage.parser(binmsg) + eq_(msg.checksum, msg2.checksum) + eq_(str(msg), str(msg2)) + eq_(rest, b'') + + def test_dbdesc(self): + link1 = ospf.RouterLSA.Link(id_='10.0.0.1', data='255.255.255.0', + type_=ospf.LSA_LINK_TYPE_STUB, metric=10) + lsa1 = ospf.RouterLSA(id_='192.168.0.1', adv_router='192.168.0.2', + links=[link1]) + msg = ospf.OSPFDBDesc(router_id='192.168.0.1', + lsa_headers=[lsa1.header]) + binmsg = msg.serialize() + msg2, cls, rest = ospf.OSPFMessage.parser(binmsg) + eq_(msg.checksum, msg2.checksum) + eq_(str(msg), str(msg2)) + eq_(rest, b'') + + def test_lsreq(self): + req = ospf.OSPFLSReq.Request(type_=ospf.OSPF_ROUTER_LSA, + id_='192.168.0.1', + adv_router='192.168.0.2') + msg = ospf.OSPFLSReq(router_id='192.168.0.1', lsa_requests=[req]) + binmsg = msg.serialize() + msg2, cls, rest = ospf.OSPFMessage.parser(binmsg) + eq_(msg.checksum, msg2.checksum) + eq_(str(msg), str(msg2)) + eq_(rest, b'') + + def test_lsupd(self): + link1 = ospf.RouterLSA.Link(id_='10.0.0.1', data='255.255.255.0', + type_=ospf.LSA_LINK_TYPE_STUB, metric=10) + lsa1 = ospf.RouterLSA(id_='192.168.0.1', adv_router='192.168.0.2', + links=[link1]) + msg = ospf.OSPFLSUpd(router_id='192.168.0.1', lsas=[lsa1]) + binmsg = msg.serialize() + msg2, cls, rest = ospf.OSPFMessage.parser(binmsg) + eq_(msg.checksum, msg2.checksum) + eq_(str(msg), str(msg2)) + eq_(rest, b'') + + def test_lsack(self): + link1 = ospf.RouterLSA.Link(id_='10.0.0.1', data='255.255.255.0', + type_=ospf.LSA_LINK_TYPE_STUB, metric=10) + lsa1 = ospf.RouterLSA(id_='192.168.0.1', adv_router='192.168.0.2', + links=[link1]) + msg = ospf.OSPFLSAck(router_id='192.168.0.1', + lsa_headers=[lsa1.header]) + binmsg = msg.serialize() + msg2, cls, rest = ospf.OSPFMessage.parser(binmsg) + eq_(msg.checksum, msg2.checksum) + eq_(str(msg), str(msg2)) + eq_(rest, b'') diff --git a/tests/unit/packet/test_packet.py b/tests/unit/packet/test_packet.py new file mode 100644 index 00000000..1b4c704b --- /dev/null +++ b/tests/unit/packet/test_packet.py @@ -0,0 +1,1553 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import struct +import inspect +from nose.tools import ok_, eq_ +import six +from ryu.ofproto import ether, inet +from ryu.lib.packet import arp +from ryu.lib.packet import bpdu +from ryu.lib.packet import ethernet +from ryu.lib.packet import icmp, icmpv6 +from ryu.lib.packet import ipv4, ipv6 +from ryu.lib.packet import llc +from ryu.lib.packet import packet, packet_utils +from ryu.lib.packet import sctp +from ryu.lib.packet import tcp, udp +from ryu.lib.packet import vlan +from ryu.lib import addrconv + + +LOG = logging.getLogger('test_packet') + + +class TestPacket(unittest.TestCase): + """ Test case for packet + """ + + dst_mac = 'aa:aa:aa:aa:aa:aa' + src_mac = 'bb:bb:bb:bb:bb:bb' + dst_mac_bin = addrconv.mac.text_to_bin(dst_mac) + src_mac_bin = addrconv.mac.text_to_bin(src_mac) + dst_ip = '192.168.128.10' + src_ip = '192.168.122.20' + dst_ip_bin = addrconv.ipv4.text_to_bin(dst_ip) + src_port = 50001 + dst_port = 50002 + src_ip_bin = addrconv.ipv4.text_to_bin(src_ip) + payload = b'\x06\x06\x47\x50\x00\x00\x00\x00' \ + + b'\xcd\xc5\x00\x00\x00\x00\x00\x00' \ + + b'\x10\x11\x12\x13\x14\x15\x16\x17' \ + + b'\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f' + + def get_protocols(self, pkt): + protocols = {} + for p in pkt: + if hasattr(p, 'protocol_name'): + protocols[p.protocol_name] = p + else: + protocols['payload'] = p + return protocols + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_arp(self): + # buid packet + e = ethernet.ethernet(self.dst_mac, self.src_mac, + ether.ETH_TYPE_ARP) + a = arp.arp(1, ether.ETH_TYPE_IP, 6, 4, 2, + self.src_mac, self.src_ip, self.dst_mac, + self.dst_ip) + p = packet.Packet() + p.add_protocol(e) + p.add_protocol(a) + p.serialize() + + # ethernet !6s6sH + e_buf = self.dst_mac_bin \ + + self.src_mac_bin \ + + b'\x08\x06' + + # arp !HHBBH6sI6sI + a_buf = b'\x00\x01' \ + + b'\x08\x00' \ + + b'\x06' \ + + b'\x04' \ + + b'\x00\x02' \ + + self.src_mac_bin \ + + self.src_ip_bin \ + + self.dst_mac_bin \ + + self.dst_ip_bin + + buf = e_buf + a_buf + + # Append padding if ethernet frame is less than 60 bytes length + pad_len = 60 - len(buf) + if pad_len > 0: + buf += b'\x00' * pad_len + eq_(buf, p.data) + + # parse + pkt = packet.Packet(p.data) + protocols = self.get_protocols(pkt) + p_eth = protocols['ethernet'] + p_arp = protocols['arp'] + + # ethernet + ok_(p_eth) + eq_(self.dst_mac, p_eth.dst) + eq_(self.src_mac, p_eth.src) + eq_(ether.ETH_TYPE_ARP, p_eth.ethertype) + + # arp + ok_(p_arp) + eq_(1, p_arp.hwtype) + eq_(ether.ETH_TYPE_IP, p_arp.proto) + eq_(6, p_arp.hlen) + eq_(4, p_arp.plen) + eq_(2, p_arp.opcode) + eq_(self.src_mac, p_arp.src_mac) + eq_(self.src_ip, p_arp.src_ip) + eq_(self.dst_mac, p_arp.dst_mac) + eq_(self.dst_ip, p_arp.dst_ip) + + # to string + eth_values = {'dst': self.dst_mac, + 'src': self.src_mac, + 'ethertype': ether.ETH_TYPE_ARP} + _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) + for k, v in inspect.getmembers(p_eth) + if k in eth_values]) + eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) + + arp_values = {'hwtype': 1, + 'proto': ether.ETH_TYPE_IP, + 'hlen': 6, + 'plen': 4, + 'opcode': 2, + 'src_mac': self.src_mac, + 'dst_mac': self.dst_mac, + 'src_ip': self.src_ip, + 'dst_ip': self.dst_ip} + _arp_str = ','.join(['%s=%s' % (k, repr(arp_values[k])) + for k, v in inspect.getmembers(p_arp) + if k in arp_values]) + arp_str = '%s(%s)' % (arp.arp.__name__, _arp_str) + + pkt_str = '%s, %s' % (eth_str, arp_str) + + eq_(eth_str, str(p_eth)) + eq_(eth_str, repr(p_eth)) + + eq_(arp_str, str(p_arp)) + eq_(arp_str, repr(p_arp)) + + eq_(pkt_str, str(pkt)) + eq_(pkt_str, repr(pkt)) + + def test_vlan_arp(self): + # buid packet + e = ethernet.ethernet(self.dst_mac, self.src_mac, + ether.ETH_TYPE_8021Q) + v = vlan.vlan(0b111, 0b1, 3, ether.ETH_TYPE_ARP) + a = arp.arp(1, ether.ETH_TYPE_IP, 6, 4, 2, + self.src_mac, self.src_ip, self.dst_mac, + self.dst_ip) + p = packet.Packet() + p.add_protocol(e) + p.add_protocol(v) + p.add_protocol(a) + p.serialize() + + # ethernet !6s6sH + e_buf = self.dst_mac_bin \ + + self.src_mac_bin \ + + b'\x81\x00' + + # vlan !HH + v_buf = b'\xF0\x03' \ + + b'\x08\x06' + + # arp !HHBBH6sI6sI + a_buf = b'\x00\x01' \ + + b'\x08\x00' \ + + b'\x06' \ + + b'\x04' \ + + b'\x00\x02' \ + + self.src_mac_bin \ + + self.src_ip_bin \ + + self.dst_mac_bin \ + + self.dst_ip_bin + + buf = e_buf + v_buf + a_buf + + # Append padding if ethernet frame is less than 60 bytes length + pad_len = 60 - len(buf) + if pad_len > 0: + buf += b'\x00' * pad_len + eq_(buf, p.data) + + # parse + pkt = packet.Packet(p.data) + protocols = self.get_protocols(pkt) + p_eth = protocols['ethernet'] + p_vlan = protocols['vlan'] + p_arp = protocols['arp'] + + # ethernet + ok_(p_eth) + eq_(self.dst_mac, p_eth.dst) + eq_(self.src_mac, p_eth.src) + eq_(ether.ETH_TYPE_8021Q, p_eth.ethertype) + + # vlan + ok_(p_vlan) + eq_(0b111, p_vlan.pcp) + eq_(0b1, p_vlan.cfi) + eq_(3, p_vlan.vid) + eq_(ether.ETH_TYPE_ARP, p_vlan.ethertype) + + # arp + ok_(p_arp) + eq_(1, p_arp.hwtype) + eq_(ether.ETH_TYPE_IP, p_arp.proto) + eq_(6, p_arp.hlen) + eq_(4, p_arp.plen) + eq_(2, p_arp.opcode) + eq_(self.src_mac, p_arp.src_mac) + eq_(self.src_ip, p_arp.src_ip) + eq_(self.dst_mac, p_arp.dst_mac) + eq_(self.dst_ip, p_arp.dst_ip) + + # to string + eth_values = {'dst': self.dst_mac, + 'src': self.src_mac, + 'ethertype': ether.ETH_TYPE_8021Q} + _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) + for k, v in inspect.getmembers(p_eth) + if k in eth_values]) + eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) + + vlan_values = {'pcp': 0b111, + 'cfi': 0b1, + 'vid': 3, + 'ethertype': ether.ETH_TYPE_ARP} + _vlan_str = ','.join(['%s=%s' % (k, repr(vlan_values[k])) + for k, v in inspect.getmembers(p_vlan) + if k in vlan_values]) + vlan_str = '%s(%s)' % (vlan.vlan.__name__, _vlan_str) + + arp_values = {'hwtype': 1, + 'proto': ether.ETH_TYPE_IP, + 'hlen': 6, + 'plen': 4, + 'opcode': 2, + 'src_mac': self.src_mac, + 'dst_mac': self.dst_mac, + 'src_ip': self.src_ip, + 'dst_ip': self.dst_ip} + _arp_str = ','.join(['%s=%s' % (k, repr(arp_values[k])) + for k, v in inspect.getmembers(p_arp) + if k in arp_values]) + arp_str = '%s(%s)' % (arp.arp.__name__, _arp_str) + + pkt_str = '%s, %s, %s' % (eth_str, vlan_str, arp_str) + + eq_(eth_str, str(p_eth)) + eq_(eth_str, repr(p_eth)) + + eq_(vlan_str, str(p_vlan)) + eq_(vlan_str, repr(p_vlan)) + + eq_(arp_str, str(p_arp)) + eq_(arp_str, repr(p_arp)) + + eq_(pkt_str, str(pkt)) + eq_(pkt_str, repr(pkt)) + + def test_ipv4_udp(self): + # buid packet + e = ethernet.ethernet(self.dst_mac, self.src_mac, + ether.ETH_TYPE_IP) + ip = ipv4.ipv4(4, 5, 1, 0, 3, 1, 4, 64, inet.IPPROTO_UDP, 0, + self.src_ip, self.dst_ip) + u = udp.udp(0x190F, 0x1F90, 0, 0) + + p = packet.Packet() + p.add_protocol(e) + p.add_protocol(ip) + p.add_protocol(u) + p.add_protocol(self.payload) + p.serialize() + + # ethernet !6s6sH + e_buf = self.dst_mac_bin \ + + self.src_mac_bin \ + + b'\x08\x00' + + # ipv4 !BBHHHBBHII + ip_buf = b'\x45' \ + + b'\x01' \ + + b'\x00\x3C' \ + + b'\x00\x03' \ + + b'\x20\x04' \ + + b'\x40' \ + + b'\x11' \ + + b'\x00\x00' \ + + self.src_ip_bin \ + + self.dst_ip_bin + + # udp !HHHH + u_buf = b'\x19\x0F' \ + + b'\x1F\x90' \ + + b'\x00\x28' \ + + b'\x00\x00' + + buf = e_buf + ip_buf + u_buf + self.payload + + # parse + pkt = packet.Packet(p.data) + protocols = self.get_protocols(pkt) + p_eth = protocols['ethernet'] + p_ipv4 = protocols['ipv4'] + p_udp = protocols['udp'] + + # ethernet + ok_(p_eth) + eq_(self.dst_mac, p_eth.dst) + eq_(self.src_mac, p_eth.src) + eq_(ether.ETH_TYPE_IP, p_eth.ethertype) + + # ipv4 + ok_(p_ipv4) + eq_(4, p_ipv4.version) + eq_(5, p_ipv4.header_length) + eq_(1, p_ipv4.tos) + l = len(ip_buf) + len(u_buf) + len(self.payload) + eq_(l, p_ipv4.total_length) + eq_(3, p_ipv4.identification) + eq_(1, p_ipv4.flags) + eq_(64, p_ipv4.ttl) + eq_(inet.IPPROTO_UDP, p_ipv4.proto) + eq_(self.src_ip, p_ipv4.src) + eq_(self.dst_ip, p_ipv4.dst) + t = bytearray(ip_buf) + struct.pack_into('!H', t, 10, p_ipv4.csum) + eq_(packet_utils.checksum(t), 0) + + # udp + ok_(p_udp) + eq_(0x190f, p_udp.src_port) + eq_(0x1F90, p_udp.dst_port) + eq_(len(u_buf) + len(self.payload), p_udp.total_length) + eq_(0x77b2, p_udp.csum) + t = bytearray(u_buf) + struct.pack_into('!H', t, 6, p_udp.csum) + ph = struct.pack('!4s4sBBH', self.src_ip_bin, self.dst_ip_bin, 0, + 17, len(u_buf) + len(self.payload)) + t = ph + t + self.payload + eq_(packet_utils.checksum(t), 0) + + # payload + ok_('payload' in protocols) + eq_(self.payload, protocols['payload']) + + # to string + eth_values = {'dst': self.dst_mac, + 'src': self.src_mac, + 'ethertype': ether.ETH_TYPE_IP} + _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) + for k, v in inspect.getmembers(p_eth) + if k in eth_values]) + eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) + + ipv4_values = {'version': 4, + 'header_length': 5, + 'tos': 1, + 'total_length': l, + 'identification': 3, + 'flags': 1, + 'offset': p_ipv4.offset, + 'ttl': 64, + 'proto': inet.IPPROTO_UDP, + 'csum': p_ipv4.csum, + 'src': self.src_ip, + 'dst': self.dst_ip, + 'option': None} + _ipv4_str = ','.join(['%s=%s' % (k, repr(ipv4_values[k])) + for k, v in inspect.getmembers(p_ipv4) + if k in ipv4_values]) + ipv4_str = '%s(%s)' % (ipv4.ipv4.__name__, _ipv4_str) + + udp_values = {'src_port': 0x190f, + 'dst_port': 0x1F90, + 'total_length': len(u_buf) + len(self.payload), + 'csum': 0x77b2} + _udp_str = ','.join(['%s=%s' % (k, repr(udp_values[k])) + for k, v in inspect.getmembers(p_udp) + if k in udp_values]) + udp_str = '%s(%s)' % (udp.udp.__name__, _udp_str) + + pkt_str = '%s, %s, %s, %s' % (eth_str, ipv4_str, udp_str, + repr(protocols['payload'])) + + eq_(eth_str, str(p_eth)) + eq_(eth_str, repr(p_eth)) + + eq_(ipv4_str, str(p_ipv4)) + eq_(ipv4_str, repr(p_ipv4)) + + eq_(udp_str, str(p_udp)) + eq_(udp_str, repr(p_udp)) + + eq_(pkt_str, str(pkt)) + eq_(pkt_str, repr(pkt)) + + def test_ipv4_tcp(self): + # buid packet + e = ethernet.ethernet(self.dst_mac, self.src_mac, + ether.ETH_TYPE_IP) + ip = ipv4.ipv4(4, 5, 0, 0, 0, 0, 0, 64, inet.IPPROTO_TCP, 0, + self.src_ip, self.dst_ip) + t = tcp.tcp(0x190F, 0x1F90, 0x123, 1, 6, 0b101010, 2048, 0, 0x6f, + b'\x01\x02') + + p = packet.Packet() + p.add_protocol(e) + p.add_protocol(ip) + p.add_protocol(t) + p.add_protocol(self.payload) + p.serialize() + + # ethernet !6s6sH + e_buf = self.dst_mac_bin \ + + self.src_mac_bin \ + + b'\x08\x00' + + # ipv4 !BBHHHBBHII + ip_buf = b'\x45' \ + + b'\x00' \ + + b'\x00\x4C' \ + + b'\x00\x00' \ + + b'\x00\x00' \ + + b'\x40' \ + + b'\x06' \ + + b'\x00\x00' \ + + self.src_ip_bin \ + + self.dst_ip_bin + + # tcp !HHIIBBHHH + option + t_buf = b'\x19\x0F' \ + + b'\x1F\x90' \ + + b'\x00\x00\x01\x23' \ + + b'\x00\x00\x00\x01' \ + + b'\x60' \ + + b'\x2A' \ + + b'\x08\x00' \ + + b'\x00\x00' \ + + b'\x00\x6F' \ + + b'\x01\x02\x00\x00' + + buf = e_buf + ip_buf + t_buf + self.payload + + # parse + pkt = packet.Packet(p.data) + protocols = self.get_protocols(pkt) + p_eth = protocols['ethernet'] + p_ipv4 = protocols['ipv4'] + p_tcp = protocols['tcp'] + + # ethernet + ok_(p_eth) + eq_(self.dst_mac, p_eth.dst) + eq_(self.src_mac, p_eth.src) + eq_(ether.ETH_TYPE_IP, p_eth.ethertype) + + # ipv4 + ok_(p_ipv4) + eq_(4, p_ipv4.version) + eq_(5, p_ipv4.header_length) + eq_(0, p_ipv4.tos) + l = len(ip_buf) + len(t_buf) + len(self.payload) + eq_(l, p_ipv4.total_length) + eq_(0, p_ipv4.identification) + eq_(0, p_ipv4.flags) + eq_(64, p_ipv4.ttl) + eq_(inet.IPPROTO_TCP, p_ipv4.proto) + eq_(self.src_ip, p_ipv4.src) + eq_(self.dst_ip, p_ipv4.dst) + t = bytearray(ip_buf) + struct.pack_into('!H', t, 10, p_ipv4.csum) + eq_(packet_utils.checksum(t), 0) + + # tcp + ok_(p_tcp) + eq_(0x190f, p_tcp.src_port) + eq_(0x1F90, p_tcp.dst_port) + eq_(0x123, p_tcp.seq) + eq_(1, p_tcp.ack) + eq_(6, p_tcp.offset) + eq_(0b101010, p_tcp.bits) + eq_(2048, p_tcp.window_size) + eq_(0x6f, p_tcp.urgent) + eq_(len(t_buf), len(p_tcp)) + t = bytearray(t_buf) + struct.pack_into('!H', t, 16, p_tcp.csum) + ph = struct.pack('!4s4sBBH', self.src_ip_bin, self.dst_ip_bin, 0, + 6, len(t_buf) + len(self.payload)) + t = ph + t + self.payload + eq_(packet_utils.checksum(t), 0) + + # payload + ok_('payload' in protocols) + eq_(self.payload, protocols['payload']) + + # to string + eth_values = {'dst': self.dst_mac, + 'src': self.src_mac, + 'ethertype': ether.ETH_TYPE_IP} + _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) + for k, v in inspect.getmembers(p_eth) + if k in eth_values]) + eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) + + ipv4_values = {'version': 4, + 'header_length': 5, + 'tos': 0, + 'total_length': l, + 'identification': 0, + 'flags': 0, + 'offset': p_ipv4.offset, + 'ttl': 64, + 'proto': inet.IPPROTO_TCP, + 'csum': p_ipv4.csum, + 'src': self.src_ip, + 'dst': self.dst_ip, + 'option': None} + _ipv4_str = ','.join(['%s=%s' % (k, repr(ipv4_values[k])) + for k, v in inspect.getmembers(p_ipv4) + if k in ipv4_values]) + ipv4_str = '%s(%s)' % (ipv4.ipv4.__name__, _ipv4_str) + + tcp_values = {'src_port': 0x190f, + 'dst_port': 0x1F90, + 'seq': 0x123, + 'ack': 1, + 'offset': 6, + 'bits': 0b101010, + 'window_size': 2048, + 'csum': p_tcp.csum, + 'urgent': 0x6f, + 'option': p_tcp.option} + _tcp_str = ','.join(['%s=%s' % (k, repr(tcp_values[k])) + for k, v in inspect.getmembers(p_tcp) + if k in tcp_values]) + tcp_str = '%s(%s)' % (tcp.tcp.__name__, _tcp_str) + + pkt_str = '%s, %s, %s, %s' % (eth_str, ipv4_str, tcp_str, + repr(protocols['payload'])) + + eq_(eth_str, str(p_eth)) + eq_(eth_str, repr(p_eth)) + + eq_(ipv4_str, str(p_ipv4)) + eq_(ipv4_str, repr(p_ipv4)) + + eq_(tcp_str, str(p_tcp)) + eq_(tcp_str, repr(p_tcp)) + + eq_(pkt_str, str(pkt)) + eq_(pkt_str, repr(pkt)) + + def test_ipv4_sctp(self): + # build packet + e = ethernet.ethernet() + ip = ipv4.ipv4(proto=inet.IPPROTO_SCTP) + s = sctp.sctp(chunks=[sctp.chunk_data(payload_data=self.payload)]) + + p = e / ip / s + p.serialize() + + ipaddr = addrconv.ipv4.text_to_bin('0.0.0.0') + + # ethernet !6s6sH + e_buf = b'\xff\xff\xff\xff\xff\xff' \ + + b'\x00\x00\x00\x00\x00\x00' \ + + b'\x08\x00' + + # ipv4 !BBHHHBBHII + ip_buf = b'\x45' \ + + b'\x00' \ + + b'\x00\x50' \ + + b'\x00\x00' \ + + b'\x00\x00' \ + + b'\xff' \ + + b'\x84' \ + + b'\x00\x00' \ + + ipaddr \ + + ipaddr + + # sctp !HHII + chunk_data !BBHIHHI + payload + s_buf = b'\x00\x00' \ + + b'\x00\x00' \ + + b'\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00' \ + + b'\x00' \ + + b'\x00' \ + + b'\x00\x00' \ + + b'\x00\x00\x00\x00' \ + + b'\x00\x00' \ + + b'\x00\x00' \ + + b'\x00\x00\x00\x00' \ + + self.payload + + buf = e_buf + ip_buf + s_buf + + # parse + pkt = packet.Packet(p.data) + protocols = self.get_protocols(pkt) + p_eth = protocols['ethernet'] + p_ipv4 = protocols['ipv4'] + p_sctp = protocols['sctp'] + + # ethernet + ok_(p_eth) + eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) + eq_('00:00:00:00:00:00', p_eth.src) + eq_(ether.ETH_TYPE_IP, p_eth.ethertype) + + # ipv4 + ok_(p_ipv4) + eq_(4, p_ipv4.version) + eq_(5, p_ipv4.header_length) + eq_(0, p_ipv4.tos) + l = len(ip_buf) + len(s_buf) + eq_(l, p_ipv4.total_length) + eq_(0, p_ipv4.identification) + eq_(0, p_ipv4.flags) + eq_(255, p_ipv4.ttl) + eq_(inet.IPPROTO_SCTP, p_ipv4.proto) + eq_('10.0.0.1', p_ipv4.src) + eq_('10.0.0.2', p_ipv4.dst) + t = bytearray(ip_buf) + struct.pack_into('!H', t, 10, p_ipv4.csum) + eq_(packet_utils.checksum(t), 0x1403) + + # sctp + ok_(p_sctp) + eq_(1, p_sctp.src_port) + eq_(1, p_sctp.dst_port) + eq_(0, p_sctp.vtag) + assert isinstance(p_sctp.chunks[0], sctp.chunk_data) + eq_(0, p_sctp.chunks[0]._type) + eq_(0, p_sctp.chunks[0].unordered) + eq_(0, p_sctp.chunks[0].begin) + eq_(0, p_sctp.chunks[0].end) + eq_(16 + len(self.payload), p_sctp.chunks[0].length) + eq_(0, p_sctp.chunks[0].tsn) + eq_(0, p_sctp.chunks[0].sid) + eq_(0, p_sctp.chunks[0].seq) + eq_(0, p_sctp.chunks[0].payload_id) + eq_(self.payload, p_sctp.chunks[0].payload_data) + eq_(len(s_buf), len(p_sctp)) + + # to string + eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', + 'src': '00:00:00:00:00:00', + 'ethertype': ether.ETH_TYPE_IP} + _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) + for k, v in inspect.getmembers(p_eth) + if k in eth_values]) + eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) + + ipv4_values = {'version': 4, + 'header_length': 5, + 'tos': 0, + 'total_length': l, + 'identification': 0, + 'flags': 0, + 'offset': 0, + 'ttl': 255, + 'proto': inet.IPPROTO_SCTP, + 'csum': p_ipv4.csum, + 'src': '10.0.0.1', + 'dst': '10.0.0.2', + 'option': None} + _ipv4_str = ','.join(['%s=%s' % (k, repr(ipv4_values[k])) + for k, v in inspect.getmembers(p_ipv4) + if k in ipv4_values]) + ipv4_str = '%s(%s)' % (ipv4.ipv4.__name__, _ipv4_str) + + data_values = {'unordered': 0, + 'begin': 0, + 'end': 0, + 'length': 16 + len(self.payload), + 'tsn': 0, + 'sid': 0, + 'seq': 0, + 'payload_id': 0, + 'payload_data': self.payload} + _data_str = ','.join(['%s=%s' % (k, repr(data_values[k])) + for k in sorted(data_values.keys())]) + data_str = '[%s(%s)]' % (sctp.chunk_data.__name__, _data_str) + + sctp_values = {'src_port': 1, + 'dst_port': 1, + 'vtag': 0, + 'csum': repr(p_sctp.csum), + 'chunks': data_str} + _sctp_str = ','.join(['%s=%s' % (k, sctp_values[k]) + for k, _ in inspect.getmembers(p_sctp) + if k in sctp_values]) + sctp_str = '%s(%s)' % (sctp.sctp.__name__, _sctp_str) + + pkt_str = '%s, %s, %s' % (eth_str, ipv4_str, sctp_str) + + eq_(eth_str, str(p_eth)) + eq_(eth_str, repr(p_eth)) + + eq_(ipv4_str, str(p_ipv4)) + eq_(ipv4_str, repr(p_ipv4)) + + eq_(sctp_str, str(p_sctp)) + eq_(sctp_str, repr(p_sctp)) + + eq_(pkt_str, str(pkt)) + eq_(pkt_str, repr(pkt)) + + def test_ipv4_icmp(self): + # buid packet + e = ethernet.ethernet() + ip = ipv4.ipv4(proto=inet.IPPROTO_ICMP) + ic = icmp.icmp() + + p = e / ip / ic + p.serialize() + + ipaddr = addrconv.ipv4.text_to_bin('0.0.0.0') + + # ethernet !6s6sH + e_buf = b'\xff\xff\xff\xff\xff\xff' \ + + b'\x00\x00\x00\x00\x00\x00' \ + + b'\x08\x00' + + # ipv4 !BBHHHBBHII + ip_buf = b'\x45' \ + + b'\x00' \ + + b'\x00\x1c' \ + + b'\x00\x00' \ + + b'\x00\x00' \ + + b'\xff' \ + + b'\x01' \ + + b'\x00\x00' \ + + ipaddr \ + + ipaddr + + # icmp !BBH + echo !HH + ic_buf = b'\x08' \ + + b'\x00' \ + + b'\x00\x00' \ + + b'\x00\x00' \ + + b'\x00\x00' + + buf = e_buf + ip_buf + ic_buf + + # parse + pkt = packet.Packet(p.data) + protocols = self.get_protocols(pkt) + p_eth = protocols['ethernet'] + p_ipv4 = protocols['ipv4'] + p_icmp = protocols['icmp'] + + # ethernet + ok_(p_eth) + eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) + eq_('00:00:00:00:00:00', p_eth.src) + eq_(ether.ETH_TYPE_IP, p_eth.ethertype) + + # ipv4 + ok_(p_ipv4) + eq_(4, p_ipv4.version) + eq_(5, p_ipv4.header_length) + eq_(0, p_ipv4.tos) + l = len(ip_buf) + len(ic_buf) + eq_(l, p_ipv4.total_length) + eq_(0, p_ipv4.identification) + eq_(0, p_ipv4.flags) + eq_(255, p_ipv4.ttl) + eq_(inet.IPPROTO_ICMP, p_ipv4.proto) + eq_('10.0.0.1', p_ipv4.src) + eq_('10.0.0.2', p_ipv4.dst) + t = bytearray(ip_buf) + struct.pack_into('!H', t, 10, p_ipv4.csum) + eq_(packet_utils.checksum(t), 0x1403) + + # icmp + ok_(p_icmp) + eq_(8, p_icmp.type) + eq_(0, p_icmp.code) + eq_(0, p_icmp.data.id) + eq_(0, p_icmp.data.seq) + eq_(len(ic_buf), len(p_icmp)) + t = bytearray(ic_buf) + struct.pack_into('!H', t, 2, p_icmp.csum) + eq_(packet_utils.checksum(t), 0) + + # to string + eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', + 'src': '00:00:00:00:00:00', + 'ethertype': ether.ETH_TYPE_IP} + _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) + for k, _ in inspect.getmembers(p_eth) + if k in eth_values]) + eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) + + ipv4_values = {'version': 4, + 'header_length': 5, + 'tos': 0, + 'total_length': l, + 'identification': 0, + 'flags': 0, + 'offset': p_ipv4.offset, + 'ttl': 255, + 'proto': inet.IPPROTO_ICMP, + 'csum': p_ipv4.csum, + 'src': '10.0.0.1', + 'dst': '10.0.0.2', + 'option': None} + _ipv4_str = ','.join(['%s=%s' % (k, repr(ipv4_values[k])) + for k, _ in inspect.getmembers(p_ipv4) + if k in ipv4_values]) + ipv4_str = '%s(%s)' % (ipv4.ipv4.__name__, _ipv4_str) + + echo_values = {'id': 0, + 'seq': 0, + 'data': None} + _echo_str = ','.join(['%s=%s' % (k, repr(echo_values[k])) + for k in sorted(echo_values.keys())]) + echo_str = '%s(%s)' % (icmp.echo.__name__, _echo_str) + icmp_values = {'type': 8, + 'code': 0, + 'csum': p_icmp.csum, + 'data': echo_str} + _icmp_str = ','.join(['%s=%s' % (k, icmp_values[k]) + for k, _ in inspect.getmembers(p_icmp) + if k in icmp_values]) + icmp_str = '%s(%s)' % (icmp.icmp.__name__, _icmp_str) + + pkt_str = '%s, %s, %s' % (eth_str, ipv4_str, icmp_str) + + eq_(eth_str, str(p_eth)) + eq_(eth_str, repr(p_eth)) + + eq_(ipv4_str, str(p_ipv4)) + eq_(ipv4_str, repr(p_ipv4)) + + eq_(icmp_str, str(p_icmp)) + eq_(icmp_str, repr(p_icmp)) + + eq_(pkt_str, str(pkt)) + eq_(pkt_str, repr(pkt)) + + def test_ipv6_udp(self): + # build packet + e = ethernet.ethernet(ethertype=ether.ETH_TYPE_IPV6) + ip = ipv6.ipv6(nxt=inet.IPPROTO_UDP) + u = udp.udp() + + p = e / ip / u / self.payload + p.serialize() + + ipaddr = addrconv.ipv6.text_to_bin('::') + + # ethernet !6s6sH + e_buf = b'\xff\xff\xff\xff\xff\xff' \ + + b'\x00\x00\x00\x00\x00\x00' \ + + b'\x86\xdd' + + # ipv6 !IHBB16s16s' + ip_buf = b'\x60\x00\x00\x00' \ + + b'\x00\x00' \ + + b'\x11' \ + + b'\xff' \ + + b'\x00\x00' \ + + ipaddr \ + + ipaddr + + # udp !HHHH + u_buf = b'\x00\x00' \ + + b'\x00\x00' \ + + b'\x00\x28' \ + + b'\x00\x00' + + buf = e_buf + ip_buf + u_buf + self.payload + + # parse + pkt = packet.Packet(p.data) + protocols = self.get_protocols(pkt) + p_eth = protocols['ethernet'] + p_ipv6 = protocols['ipv6'] + p_udp = protocols['udp'] + + # ethernet + ok_(p_eth) + eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) + eq_('00:00:00:00:00:00', p_eth.src) + eq_(ether.ETH_TYPE_IPV6, p_eth.ethertype) + + # ipv6 + ok_(p_ipv6) + eq_(6, p_ipv6.version) + eq_(0, p_ipv6.traffic_class) + eq_(0, p_ipv6.flow_label) + eq_(len(u_buf) + len(self.payload), p_ipv6.payload_length) + eq_(inet.IPPROTO_UDP, p_ipv6.nxt) + eq_(255, p_ipv6.hop_limit) + eq_('10::10', p_ipv6.src) + eq_('20::20', p_ipv6.dst) + + # udp + ok_(p_udp) + eq_(1, p_udp.src_port) + eq_(1, p_udp.dst_port) + eq_(len(u_buf) + len(self.payload), p_udp.total_length) + eq_(0x2B60, p_udp.csum) + t = bytearray(u_buf) + struct.pack_into('!H', t, 6, p_udp.csum) + ph = struct.pack('!16s16sI3xB', ipaddr, ipaddr, + len(u_buf) + len(self.payload), 17) + t = ph + t + self.payload + eq_(packet_utils.checksum(t), 0x62) + + # payload + ok_('payload' in protocols) + eq_(self.payload, protocols['payload']) + + # to string + eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', + 'src': '00:00:00:00:00:00', + 'ethertype': ether.ETH_TYPE_IPV6} + _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) + for k, v in inspect.getmembers(p_eth) + if k in eth_values]) + eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) + + ipv6_values = {'version': 6, + 'traffic_class': 0, + 'flow_label': 0, + 'payload_length': len(u_buf) + len(self.payload), + 'nxt': inet.IPPROTO_UDP, + 'hop_limit': 255, + 'src': '10::10', + 'dst': '20::20', + 'ext_hdrs': []} + _ipv6_str = ','.join(['%s=%s' % (k, repr(ipv6_values[k])) + for k, v in inspect.getmembers(p_ipv6) + if k in ipv6_values]) + ipv6_str = '%s(%s)' % (ipv6.ipv6.__name__, _ipv6_str) + + udp_values = {'src_port': 1, + 'dst_port': 1, + 'total_length': len(u_buf) + len(self.payload), + 'csum': 0x2B60} + _udp_str = ','.join(['%s=%s' % (k, repr(udp_values[k])) + for k, v in inspect.getmembers(p_udp) + if k in udp_values]) + udp_str = '%s(%s)' % (udp.udp.__name__, _udp_str) + + pkt_str = '%s, %s, %s, %s' % (eth_str, ipv6_str, udp_str, + repr(protocols['payload'])) + + eq_(eth_str, str(p_eth)) + eq_(eth_str, repr(p_eth)) + + eq_(ipv6_str, str(p_ipv6)) + eq_(ipv6_str, repr(p_ipv6)) + + eq_(udp_str, str(p_udp)) + eq_(udp_str, repr(p_udp)) + + eq_(pkt_str, str(pkt)) + eq_(pkt_str, repr(pkt)) + + def test_ipv6_tcp(self): + # build packet + e = ethernet.ethernet(ethertype=ether.ETH_TYPE_IPV6) + ip = ipv6.ipv6() + t = tcp.tcp(option=b'\x01\x02') + + p = e / ip / t / self.payload + p.serialize() + + ipaddr = addrconv.ipv6.text_to_bin('::') + + # ethernet !6s6sH + e_buf = b'\xff\xff\xff\xff\xff\xff' \ + + b'\x00\x00\x00\x00\x00\x00' \ + + b'\x86\xdd' + + # ipv6 !IHBB16s16s' + ip_buf = b'\x60\x00\x00\x00' \ + + b'\x00\x00' \ + + b'\x06' \ + + b'\xff' \ + + b'\x00\x00' \ + + ipaddr \ + + ipaddr + + # tcp !HHIIBBHHH + option + t_buf = b'\x00\x00' \ + + b'\x00\x00' \ + + b'\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00' \ + + b'\x60' \ + + b'\x00' \ + + b'\x00\x00' \ + + b'\x00\x00' \ + + b'\x00\x00' \ + + b'\x01\x02\x00\x00' + + buf = e_buf + ip_buf + t_buf + self.payload + + # parse + pkt = packet.Packet(p.data) + protocols = self.get_protocols(pkt) + p_eth = protocols['ethernet'] + p_ipv6 = protocols['ipv6'] + p_tcp = protocols['tcp'] + + # ethernet + ok_(p_eth) + eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) + eq_('00:00:00:00:00:00', p_eth.src) + eq_(ether.ETH_TYPE_IPV6, p_eth.ethertype) + + # ipv6 + ok_(p_ipv6) + eq_(6, p_ipv6.version) + eq_(0, p_ipv6.traffic_class) + eq_(0, p_ipv6.flow_label) + eq_(len(t_buf) + len(self.payload), p_ipv6.payload_length) + eq_(inet.IPPROTO_TCP, p_ipv6.nxt) + eq_(255, p_ipv6.hop_limit) + eq_('10::10', p_ipv6.src) + eq_('20::20', p_ipv6.dst) + + # tcp + ok_(p_tcp) + eq_(1, p_tcp.src_port) + eq_(1, p_tcp.dst_port) + eq_(0, p_tcp.seq) + eq_(0, p_tcp.ack) + eq_(6, p_tcp.offset) + eq_(0, p_tcp.bits) + eq_(0, p_tcp.window_size) + eq_(0, p_tcp.urgent) + eq_(len(t_buf), len(p_tcp)) + t = bytearray(t_buf) + struct.pack_into('!H', t, 16, p_tcp.csum) + ph = struct.pack('!16s16sI3xB', ipaddr, ipaddr, + len(t_buf) + len(self.payload), 6) + t = ph + t + self.payload + eq_(packet_utils.checksum(t), 0x62) + + # payload + ok_('payload' in protocols) + eq_(self.payload, protocols['payload']) + + # to string + eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', + 'src': '00:00:00:00:00:00', + 'ethertype': ether.ETH_TYPE_IPV6} + _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) + for k, v in inspect.getmembers(p_eth) + if k in eth_values]) + eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) + + ipv6_values = {'version': 6, + 'traffic_class': 0, + 'flow_label': 0, + 'payload_length': len(t_buf) + len(self.payload), + 'nxt': inet.IPPROTO_TCP, + 'hop_limit': 255, + 'src': '10::10', + 'dst': '20::20', + 'ext_hdrs': []} + _ipv6_str = ','.join(['%s=%s' % (k, repr(ipv6_values[k])) + for k, v in inspect.getmembers(p_ipv6) + if k in ipv6_values]) + ipv6_str = '%s(%s)' % (ipv6.ipv6.__name__, _ipv6_str) + + tcp_values = {'src_port': 1, + 'dst_port': 1, + 'seq': 0, + 'ack': 0, + 'offset': 6, + 'bits': 0, + 'window_size': 0, + 'csum': p_tcp.csum, + 'urgent': 0, + 'option': p_tcp.option} + _tcp_str = ','.join(['%s=%s' % (k, repr(tcp_values[k])) + for k, v in inspect.getmembers(p_tcp) + if k in tcp_values]) + tcp_str = '%s(%s)' % (tcp.tcp.__name__, _tcp_str) + + pkt_str = '%s, %s, %s, %s' % (eth_str, ipv6_str, tcp_str, + repr(protocols['payload'])) + + eq_(eth_str, str(p_eth)) + eq_(eth_str, repr(p_eth)) + + eq_(ipv6_str, str(p_ipv6)) + eq_(ipv6_str, repr(p_ipv6)) + + eq_(tcp_str, str(p_tcp)) + eq_(tcp_str, repr(p_tcp)) + + eq_(pkt_str, str(pkt)) + eq_(pkt_str, repr(pkt)) + + def test_ipv6_sctp(self): + # build packet + e = ethernet.ethernet(ethertype=ether.ETH_TYPE_IPV6) + ip = ipv6.ipv6(nxt=inet.IPPROTO_SCTP) + s = sctp.sctp(chunks=[sctp.chunk_data(payload_data=self.payload)]) + + p = e / ip / s + p.serialize() + + ipaddr = addrconv.ipv6.text_to_bin('::') + + # ethernet !6s6sH + e_buf = b'\xff\xff\xff\xff\xff\xff' \ + + b'\x00\x00\x00\x00\x00\x00' \ + + b'\x86\xdd' + + # ipv6 !IHBB16s16s' + ip_buf = b'\x60\x00\x00\x00' \ + + b'\x00\x00' \ + + b'\x84' \ + + b'\xff' \ + + b'\x00\x00' \ + + ipaddr \ + + ipaddr + + # sctp !HHII + chunk_data !BBHIHHI + payload + s_buf = b'\x00\x00' \ + + b'\x00\x00' \ + + b'\x00\x00\x00\x00' \ + + b'\x00\x00\x00\x00' \ + + b'\x00' \ + + b'\x00' \ + + b'\x00\x00' \ + + b'\x00\x00\x00\x00' \ + + b'\x00\x00' \ + + b'\x00\x00' \ + + b'\x00\x00\x00\x00' \ + + self.payload + + buf = e_buf + ip_buf + s_buf + + # parse + pkt = packet.Packet(p.data) + protocols = self.get_protocols(pkt) + p_eth = protocols['ethernet'] + p_ipv6 = protocols['ipv6'] + p_sctp = protocols['sctp'] + + # ethernet + ok_(p_eth) + eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) + eq_('00:00:00:00:00:00', p_eth.src) + eq_(ether.ETH_TYPE_IPV6, p_eth.ethertype) + + # ipv6 + ok_(p_ipv6) + eq_(6, p_ipv6.version) + eq_(0, p_ipv6.traffic_class) + eq_(0, p_ipv6.flow_label) + eq_(len(s_buf), p_ipv6.payload_length) + eq_(inet.IPPROTO_SCTP, p_ipv6.nxt) + eq_(255, p_ipv6.hop_limit) + eq_('10::10', p_ipv6.src) + eq_('20::20', p_ipv6.dst) + + # sctp + ok_(p_sctp) + eq_(1, p_sctp.src_port) + eq_(1, p_sctp.dst_port) + eq_(0, p_sctp.vtag) + assert isinstance(p_sctp.chunks[0], sctp.chunk_data) + eq_(0, p_sctp.chunks[0]._type) + eq_(0, p_sctp.chunks[0].unordered) + eq_(0, p_sctp.chunks[0].begin) + eq_(0, p_sctp.chunks[0].end) + eq_(16 + len(self.payload), p_sctp.chunks[0].length) + eq_(0, p_sctp.chunks[0].tsn) + eq_(0, p_sctp.chunks[0].sid) + eq_(0, p_sctp.chunks[0].seq) + eq_(0, p_sctp.chunks[0].payload_id) + eq_(self.payload, p_sctp.chunks[0].payload_data) + eq_(len(s_buf), len(p_sctp)) + + # to string + eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', + 'src': '00:00:00:00:00:00', + 'ethertype': ether.ETH_TYPE_IPV6} + _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) + for k, v in inspect.getmembers(p_eth) + if k in eth_values]) + eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) + + ipv6_values = {'version': 6, + 'traffic_class': 0, + 'flow_label': 0, + 'payload_length': len(s_buf), + 'nxt': inet.IPPROTO_SCTP, + 'hop_limit': 255, + 'src': '10::10', + 'dst': '20::20', + 'ext_hdrs': []} + _ipv6_str = ','.join(['%s=%s' % (k, repr(ipv6_values[k])) + for k, v in inspect.getmembers(p_ipv6) + if k in ipv6_values]) + ipv6_str = '%s(%s)' % (ipv6.ipv6.__name__, _ipv6_str) + + data_values = {'unordered': 0, + 'begin': 0, + 'end': 0, + 'length': 16 + len(self.payload), + 'tsn': 0, + 'sid': 0, + 'seq': 0, + 'payload_id': 0, + 'payload_data': self.payload} + _data_str = ','.join(['%s=%s' % (k, repr(data_values[k])) + for k in sorted(data_values.keys())]) + data_str = '[%s(%s)]' % (sctp.chunk_data.__name__, _data_str) + + sctp_values = {'src_port': 1, + 'dst_port': 1, + 'vtag': 0, + 'csum': repr(p_sctp.csum), + 'chunks': data_str} + _sctp_str = ','.join(['%s=%s' % (k, sctp_values[k]) + for k, _ in inspect.getmembers(p_sctp) + if k in sctp_values]) + sctp_str = '%s(%s)' % (sctp.sctp.__name__, _sctp_str) + + pkt_str = '%s, %s, %s' % (eth_str, ipv6_str, sctp_str) + + eq_(eth_str, str(p_eth)) + eq_(eth_str, repr(p_eth)) + + eq_(ipv6_str, str(p_ipv6)) + eq_(ipv6_str, repr(p_ipv6)) + + eq_(sctp_str, str(p_sctp)) + eq_(sctp_str, repr(p_sctp)) + + eq_(pkt_str, str(pkt)) + eq_(pkt_str, repr(pkt)) + + def test_ipv6_icmpv6(self): + # build packet + e = ethernet.ethernet(ethertype=ether.ETH_TYPE_IPV6) + ip = ipv6.ipv6(nxt=inet.IPPROTO_ICMPV6) + ic = icmpv6.icmpv6() + + p = e / ip / ic + p.serialize() + + ipaddr = addrconv.ipv6.text_to_bin('::') + + # ethernet !6s6sH + e_buf = b'\xff\xff\xff\xff\xff\xff' \ + + b'\x00\x00\x00\x00\x00\x00' \ + + b'\x86\xdd' + + # ipv6 !IHBB16s16s' + ip_buf = b'\x60\x00\x00\x00' \ + + b'\x00\x00' \ + + b'\x3a' \ + + b'\xff' \ + + b'\x00\x00' \ + + ipaddr \ + + ipaddr + + # icmpv6 !BBH + ic_buf = b'\x00' \ + + b'\x00' \ + + b'\x00\x00' + + buf = e_buf + ip_buf + ic_buf + + # parse + pkt = packet.Packet(p.data) + protocols = self.get_protocols(pkt) + p_eth = protocols['ethernet'] + p_ipv6 = protocols['ipv6'] + p_icmpv6 = protocols['icmpv6'] + + # ethernet + ok_(p_eth) + eq_('ff:ff:ff:ff:ff:ff', p_eth.dst) + eq_('00:00:00:00:00:00', p_eth.src) + eq_(ether.ETH_TYPE_IPV6, p_eth.ethertype) + + # ipv6 + ok_(p_ipv6) + eq_(6, p_ipv6.version) + eq_(0, p_ipv6.traffic_class) + eq_(0, p_ipv6.flow_label) + eq_(len(ic_buf), p_ipv6.payload_length) + eq_(inet.IPPROTO_ICMPV6, p_ipv6.nxt) + eq_(255, p_ipv6.hop_limit) + eq_('10::10', p_ipv6.src) + eq_('20::20', p_ipv6.dst) + + # icmpv6 + ok_(p_icmpv6) + eq_(0, p_icmpv6.type_) + eq_(0, p_icmpv6.code) + eq_(len(ic_buf), len(p_icmpv6)) + t = bytearray(ic_buf) + struct.pack_into('!H', t, 2, p_icmpv6.csum) + ph = struct.pack('!16s16sI3xB', ipaddr, ipaddr, len(ic_buf), 58) + t = ph + t + eq_(packet_utils.checksum(t), 0x60) + + # to string + eth_values = {'dst': 'ff:ff:ff:ff:ff:ff', + 'src': '00:00:00:00:00:00', + 'ethertype': ether.ETH_TYPE_IPV6} + _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) + for k, _ in inspect.getmembers(p_eth) + if k in eth_values]) + eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) + + ipv6_values = {'version': 6, + 'traffic_class': 0, + 'flow_label': 0, + 'payload_length': len(ic_buf), + 'nxt': inet.IPPROTO_ICMPV6, + 'hop_limit': 255, + 'src': '10::10', + 'dst': '20::20', + 'ext_hdrs': []} + _ipv6_str = ','.join(['%s=%s' % (k, repr(ipv6_values[k])) + for k, _ in inspect.getmembers(p_ipv6) + if k in ipv6_values]) + ipv6_str = '%s(%s)' % (ipv6.ipv6.__name__, _ipv6_str) + + icmpv6_values = {'type_': 0, + 'code': 0, + 'csum': p_icmpv6.csum, + 'data': None} + _icmpv6_str = ','.join(['%s=%s' % (k, repr(icmpv6_values[k])) + for k, _ in inspect.getmembers(p_icmpv6) + if k in icmpv6_values]) + icmpv6_str = '%s(%s)' % (icmpv6.icmpv6.__name__, _icmpv6_str) + + pkt_str = '%s, %s, %s' % (eth_str, ipv6_str, icmpv6_str) + + eq_(eth_str, str(p_eth)) + eq_(eth_str, repr(p_eth)) + + eq_(ipv6_str, str(p_ipv6)) + eq_(ipv6_str, repr(p_ipv6)) + + eq_(icmpv6_str, str(p_icmpv6)) + eq_(icmpv6_str, repr(p_icmpv6)) + + eq_(pkt_str, str(pkt)) + eq_(pkt_str, repr(pkt)) + + def test_llc_bpdu(self): + # buid packet + e = ethernet.ethernet(self.dst_mac, self.src_mac, + ether.ETH_TYPE_IEEE802_3) + llc_control = llc.ControlFormatU(0, 0, 0) + l = llc.llc(llc.SAP_BPDU, llc.SAP_BPDU, llc_control) + b = bpdu.ConfigurationBPDUs(flags=0, + root_priority=32768, + root_system_id_extension=0, + root_mac_address=self.src_mac, + root_path_cost=0, + bridge_priority=32768, + bridge_system_id_extension=0, + bridge_mac_address=self.dst_mac, + port_priority=128, + port_number=4, + message_age=1, + max_age=20, + hello_time=2, + forward_delay=15) + + p = packet.Packet() + p.add_protocol(e) + p.add_protocol(l) + p.add_protocol(b) + p.serialize() + + # ethernet !6s6sH + e_buf = self.dst_mac_bin + self.src_mac_bin + b'\x05\xdc' + + # llc !BBB + l_buf = (b'\x42' + b'\x42' + b'\x03') + + # bpdu !HBBBQIQHHHHH + b_buf = (b'\x00\x00' + b'\x00' + b'\x00' + b'\x00' + b'\x80\x00\xbb\xbb\xbb\xbb\xbb\xbb' + b'\x00\x00\x00\x00' + b'\x80\x00\xaa\xaa\xaa\xaa\xaa\xaa' + b'\x80\x04' + b'\x01\x00' + b'\x14\x00' + b'\x02\x00' + b'\x0f\x00') + + buf = e_buf + l_buf + b_buf + + # Append padding if ethernet frame is less than 60 bytes length + pad_len = 60 - len(buf) + if pad_len > 0: + buf += b'\x00' * pad_len + eq_(buf, p.data) + + # parse + pkt = packet.Packet(p.data) + protocols = self.get_protocols(pkt) + p_eth = protocols['ethernet'] + p_llc = protocols['llc'] + p_bpdu = protocols['ConfigurationBPDUs'] + + # ethernet + ok_(p_eth) + eq_(self.dst_mac, p_eth.dst) + eq_(self.src_mac, p_eth.src) + eq_(ether.ETH_TYPE_IEEE802_3, p_eth.ethertype) + + # llc + ok_(p_llc) + eq_(llc.SAP_BPDU, p_llc.dsap_addr) + eq_(llc.SAP_BPDU, p_llc.ssap_addr) + eq_(0, p_llc.control.modifier_function1) + eq_(0, p_llc.control.pf_bit) + eq_(0, p_llc.control.modifier_function2) + + # bpdu + ok_(p_bpdu) + eq_(bpdu.PROTOCOL_IDENTIFIER, p_bpdu._protocol_id) + eq_(bpdu.PROTOCOLVERSION_ID_BPDU, p_bpdu._version_id) + eq_(bpdu.TYPE_CONFIG_BPDU, p_bpdu._bpdu_type) + eq_(0, p_bpdu.flags) + eq_(32768, p_bpdu.root_priority) + eq_(0, p_bpdu.root_system_id_extension) + eq_(self.src_mac, p_bpdu.root_mac_address) + eq_(0, p_bpdu.root_path_cost) + eq_(32768, p_bpdu.bridge_priority) + eq_(0, p_bpdu.bridge_system_id_extension) + eq_(self.dst_mac, p_bpdu.bridge_mac_address) + eq_(128, p_bpdu.port_priority) + eq_(4, p_bpdu.port_number) + eq_(1, p_bpdu.message_age) + eq_(20, p_bpdu.max_age) + eq_(2, p_bpdu.hello_time) + eq_(15, p_bpdu.forward_delay) + + # to string + eth_values = {'dst': self.dst_mac, + 'src': self.src_mac, + 'ethertype': ether.ETH_TYPE_IEEE802_3} + _eth_str = ','.join(['%s=%s' % (k, repr(eth_values[k])) + for k, v in inspect.getmembers(p_eth) + if k in eth_values]) + eth_str = '%s(%s)' % (ethernet.ethernet.__name__, _eth_str) + + ctrl_values = {'modifier_function1': 0, + 'pf_bit': 0, + 'modifier_function2': 0} + _ctrl_str = ','.join(['%s=%s' % (k, repr(ctrl_values[k])) + for k, v in inspect.getmembers(p_llc.control) + if k in ctrl_values]) + ctrl_str = '%s(%s)' % (llc.ControlFormatU.__name__, _ctrl_str) + + llc_values = {'dsap_addr': repr(llc.SAP_BPDU), + 'ssap_addr': repr(llc.SAP_BPDU), + 'control': ctrl_str} + _llc_str = ','.join(['%s=%s' % (k, llc_values[k]) + for k, v in inspect.getmembers(p_llc) + if k in llc_values]) + llc_str = '%s(%s)' % (llc.llc.__name__, _llc_str) + + _long = int if six.PY3 else long + bpdu_values = {'flags': 0, + 'root_priority': _long(32768), + 'root_system_id_extension': _long(0), + 'root_mac_address': self.src_mac, + 'root_path_cost': 0, + 'bridge_priority': _long(32768), + 'bridge_system_id_extension': _long(0), + 'bridge_mac_address': self.dst_mac, + 'port_priority': 128, + 'port_number': 4, + 'message_age': float(1), + 'max_age': float(20), + 'hello_time': float(2), + 'forward_delay': float(15)} + _bpdu_str = ','.join(['%s=%s' % (k, repr(bpdu_values[k])) + for k, v in inspect.getmembers(p_bpdu) + if k in bpdu_values]) + bpdu_str = '%s(%s)' % (bpdu.ConfigurationBPDUs.__name__, _bpdu_str) + + pkt_str = '%s, %s, %s' % (eth_str, llc_str, bpdu_str) + + eq_(eth_str, str(p_eth)) + eq_(eth_str, repr(p_eth)) + + eq_(llc_str, str(p_llc)) + eq_(llc_str, repr(p_llc)) + + eq_(bpdu_str, str(p_bpdu)) + eq_(bpdu_str, repr(p_bpdu)) + + eq_(pkt_str, str(pkt)) + eq_(pkt_str, repr(pkt)) + + def test_div_api(self): + e = ethernet.ethernet(self.dst_mac, self.src_mac, ether.ETH_TYPE_IP) + i = ipv4.ipv4() + u = udp.udp(self.src_port, self.dst_port) + pkt = e / i / u + ok_(isinstance(pkt, packet.Packet)) + ok_(isinstance(pkt.protocols[0], ethernet.ethernet)) + ok_(isinstance(pkt.protocols[1], ipv4.ipv4)) + ok_(isinstance(pkt.protocols[2], udp.udp)) diff --git a/tests/unit/packet/test_pbb.py b/tests/unit/packet/test_pbb.py new file mode 100644 index 00000000..dd7778cd --- /dev/null +++ b/tests/unit/packet/test_pbb.py @@ -0,0 +1,172 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import struct +import unittest + +from nose.tools import eq_ +from nose.tools import ok_ +from nose.tools import raises +from ryu.ofproto import ether +from ryu.ofproto import inet +from ryu.lib.packet import ethernet +from ryu.lib.packet import packet +from ryu.lib.packet import ipv4 +from ryu.lib.packet import vlan +from ryu.lib.packet import pbb + + +LOG = logging.getLogger(__name__) + + +class Test_itag(unittest.TestCase): + + pcp = 3 + dei = 0 + uca = 1 + sid = 16770000 + data = pcp << 29 | dei << 28 | uca << 27 | sid + buf = struct.pack(pbb.itag._PACK_STR, data) + it = pbb.itag(pcp, dei, uca, sid) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.pcp, self.it.pcp) + eq_(self.dei, self.it.dei) + eq_(self.uca, self.it.uca) + eq_(self.sid, self.it.sid) + + def test_parser(self): + _res = pbb.itag.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + eq_(res.pcp, self.pcp) + eq_(res.dei, self.dei) + eq_(res.uca, self.uca) + eq_(res.sid, self.sid) + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.it.serialize(data, prev) + res = struct.unpack(pbb.itag._PACK_STR, buf) + eq_(res[0], self.data) + + def _build_itag(self): + b_src_mac = '00:07:0d:af:f4:54' + b_dst_mac = '00:00:00:00:00:00' + b_ethertype = ether.ETH_TYPE_8021AD + e1 = ethernet.ethernet(b_dst_mac, b_src_mac, b_ethertype) + + b_pcp = 0 + b_cfi = 0 + b_vid = 32 + b_ethertype = ether.ETH_TYPE_8021Q + bt = vlan.svlan(b_pcp, b_cfi, b_vid, b_ethertype) + + c_src_mac = '11:11:11:11:11:11' + c_dst_mac = 'aa:aa:aa:aa:aa:aa' + c_ethertype = ether.ETH_TYPE_8021AD + e2 = ethernet.ethernet(c_dst_mac, c_src_mac, c_ethertype) + + s_pcp = 0 + s_cfi = 0 + s_vid = 32 + s_ethertype = ether.ETH_TYPE_8021Q + st = vlan.svlan(s_pcp, s_cfi, s_vid, s_ethertype) + + c_pcp = 0 + c_cfi = 0 + c_vid = 32 + c_ethertype = ether.ETH_TYPE_IP + ct = vlan.vlan(c_pcp, c_cfi, c_vid, c_ethertype) + + version = 4 + header_length = 20 + tos = 0 + total_length = 24 + identification = 0x8a5d + flags = 0 + offset = 1480 + ttl = 64 + proto = inet.IPPROTO_ICMP + csum = 0xa7f2 + src = '131.151.32.21' + dst = '131.151.32.129' + option = b'TEST' + ip = ipv4.ipv4(version, header_length, tos, total_length, + identification, flags, offset, ttl, proto, csum, + src, dst, option) + + p = packet.Packet() + + p.add_protocol(e1) + p.add_protocol(bt) + p.add_protocol(self.it) + p.add_protocol(e2) + p.add_protocol(st) + p.add_protocol(ct) + p.add_protocol(ip) + p.serialize() + + return p + + def test_build_itag(self): + p = self._build_itag() + + e = p.get_protocols(ethernet.ethernet) + ok_(e) + ok_(isinstance(e, list)) + eq_(e[0].ethertype, ether.ETH_TYPE_8021AD) + eq_(e[1].ethertype, ether.ETH_TYPE_8021AD) + + sv = p.get_protocols(vlan.svlan) + ok_(sv) + ok_(isinstance(sv, list)) + eq_(sv[0].ethertype, ether.ETH_TYPE_8021Q) + eq_(sv[1].ethertype, ether.ETH_TYPE_8021Q) + + it = p.get_protocol(pbb.itag) + ok_(it) + + v = p.get_protocol(vlan.vlan) + ok_(v) + eq_(v.ethertype, ether.ETH_TYPE_IP) + + ip = p.get_protocol(ipv4.ipv4) + ok_(ip) + + eq_(it.pcp, self.pcp) + eq_(it.dei, self.dei) + eq_(it.uca, self.uca) + eq_(it.sid, self.sid) + + @raises(Exception) + def test_malformed_itag(self): + m_short_buf = self.buf[1:pbb.itag._MIN_LEN] + pbb.itag.parser(m_short_buf) + + def test_json(self): + jsondict = self.it.to_jsondict() + it = pbb.itag.from_jsondict(jsondict['itag']) + eq_(str(self.it), str(it)) diff --git a/tests/unit/packet/test_sctp.py b/tests/unit/packet/test_sctp.py new file mode 100644 index 00000000..d7afb7cc --- /dev/null +++ b/tests/unit/packet/test_sctp.py @@ -0,0 +1,1454 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import inspect +import logging +import six +import struct +import unittest + +from nose.tools import eq_ +from nose.tools import ok_ +from ryu.lib import addrconv +from ryu.lib.packet import packet +from ryu.lib.packet import ethernet +from ryu.lib.packet import ipv4 +from ryu.lib.packet import sctp +from ryu.ofproto import ether +from ryu.ofproto import inet + + +LOG = logging.getLogger(__name__) + + +class Test_sctp(unittest.TestCase): + + def setUp(self): + self.chunks = [] + self.csum = 0 + self.dst_port = 1234 + self.src_port = 5678 + self.vtag = 98765432 + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf = b'\x16\x2e\x04\xd2\x05\xe3\x0a\x78\x00\x00\x00\x00' + + def setUp_with_data(self): + self.unordered = 1 + self.begin = 1 + self.end = 1 + self.length = 16 + 10 + self.tsn = 12345 + self.sid = 1 + self.seq = 0 + self.payload_id = 0 + self.payload_data = b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a' + + self.data = sctp.chunk_data( + unordered=self.unordered, begin=self.begin, end=self.end, + tsn=self.tsn, sid=self.sid, payload_data=self.payload_data) + + self.chunks = [self.data] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x00\x07\x00\x1a\x00\x00\x30\x39\x00\x01\x00\x00' + \ + b'\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a' + + def setUp_with_init(self): + self.flags = 0 + self.length = 20 + 8 + 20 + 8 + 4 + 16 + 16 + self.init_tag = 123456 + self.a_rwnd = 9876 + self.os = 3 + self.mis = 3 + self.i_tsn = 123456 + + self.p_ipv4 = sctp.param_ipv4('192.168.1.1') + self.p_ipv6 = sctp.param_ipv6('fe80::647e:1aff:fec4:8284') + self.p_cookie_preserve = sctp.param_cookie_preserve(5000) + self.p_ecn = sctp.param_ecn() + self.p_host_addr = sctp.param_host_addr(b'test host\x00') + self.p_support_type = sctp.param_supported_addr( + [sctp.PTYPE_IPV4, sctp.PTYPE_IPV6, sctp.PTYPE_COOKIE_PRESERVE, + sctp.PTYPE_ECN, sctp.PTYPE_HOST_ADDR]) + self.params = [ + self.p_ipv4, self.p_ipv6, self.p_cookie_preserve, + self.p_ecn, self.p_host_addr, self.p_support_type] + + self.init = sctp.chunk_init( + init_tag=self.init_tag, a_rwnd=self.a_rwnd, os=self.os, + mis=self.mis, i_tsn=self.i_tsn, params=self.params) + + self.chunks = [self.init] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x01\x00\x00\x5c\x00\x01\xe2\x40\x00\x00\x26\x94' + \ + b'\x00\x03\x00\x03\x00\x01\xe2\x40' + \ + b'\x00\x05\x00\x08\xc0\xa8\x01\x01' + \ + b'\x00\x06\x00\x14' + \ + b'\xfe\x80\x00\x00\x00\x00\x00\x00' + \ + b'\x64\x7e\x1a\xff\xfe\xc4\x82\x84' + \ + b'\x00\x09\x00\x08\x00\x00\x13\x88' + \ + b'\x80\x00\x00\x04' + \ + b'\x00\x0b\x00\x0e' + \ + b'\x74\x65\x73\x74\x20\x68\x6f\x73\x74\x00\x00\x00' + \ + b'\x00\x0c\x00\x0e\x00\x05\x00\x06\x00\x09\x80\x00' + \ + b'\x00\x0b\x00\x00' + + def setUp_with_init_ack(self): + self.flags = 0 + self.length = 20 + 8 + 8 + 20 + 8 + 4 + 16 + self.init_tag = 123456 + self.a_rwnd = 9876 + self.os = 3 + self.mis = 3 + self.i_tsn = 123456 + + self.p_state_cookie = sctp.param_state_cookie(b'\x01\x02\x03') + self.p_ipv4 = sctp.param_ipv4('192.168.1.1') + self.p_ipv6 = sctp.param_ipv6('fe80::647e:1aff:fec4:8284') + self.p_unrecognized_param = sctp.param_unrecognized_param( + b'\xff\xff\x00\x04') + self.p_ecn = sctp.param_ecn() + self.p_host_addr = sctp.param_host_addr(b'test host\x00') + self.params = [ + self.p_state_cookie, self.p_ipv4, self.p_ipv6, + self.p_unrecognized_param, self.p_ecn, self.p_host_addr] + + self.init_ack = sctp.chunk_init_ack( + init_tag=self.init_tag, a_rwnd=self.a_rwnd, os=self.os, + mis=self.mis, i_tsn=self.i_tsn, params=self.params) + + self.chunks = [self.init_ack] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x02\x00\x00\x54\x00\x01\xe2\x40\x00\x00\x26\x94' + \ + b'\x00\x03\x00\x03\x00\x01\xe2\x40' + \ + b'\x00\x07\x00\x07\x01\x02\x03\x00' + \ + b'\x00\x05\x00\x08\xc0\xa8\x01\x01' + \ + b'\x00\x06\x00\x14' + \ + b'\xfe\x80\x00\x00\x00\x00\x00\x00' + \ + b'\x64\x7e\x1a\xff\xfe\xc4\x82\x84' + \ + b'\x00\x08\x00\x08\xff\xff\x00\x04' + \ + b'\x80\x00\x00\x04' + \ + b'\x00\x0b\x00\x0e' + \ + b'\x74\x65\x73\x74\x20\x68\x6f\x73\x74\x00\x00\x00' + + def setUp_with_sack(self): + self.flags = 0 + self.length = 16 + 2 * 2 * 5 + 4 * 5 + self.tsn_ack = 123456 + self.a_rwnd = 9876 + self.gapack_num = 5 + self.duptsn_num = 5 + self.gapacks = [[2, 3], [10, 12], [20, 24], [51, 52], [62, 63]] + self.duptsns = [123458, 123466, 123476, 123507, 123518] + + self.sack = sctp.chunk_sack( + tsn_ack=self.tsn_ack, a_rwnd=self.a_rwnd, + gapack_num=self.gapack_num, duptsn_num=self.duptsn_num, + gapacks=self.gapacks, duptsns=self.duptsns) + + self.chunks = [self.sack] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x03\x00\x00\x38\x00\x01\xe2\x40' + \ + b'\x00\x00\x26\x94\x00\x05\x00\x05' + \ + b'\x00\x02\x00\x03\x00\x0a\x00\x0c\x00\x14\x00\x18' + \ + b'\x00\x33\x00\x34\x00\x3e\x00\x3f' + \ + b'\x00\x01\xe2\x42\x00\x01\xe2\x4a\x00\x01\xe2\x54' + \ + b'\x00\x01\xe2\x73\x00\x01\xe2\x7e' + + def setUp_with_heartbeat(self): + self.flags = 0 + self.length = 4 + 8 + + self.p_heartbeat = sctp.param_heartbeat(b'\x01\x02\x03\x04') + + self.heartbeat = sctp.chunk_heartbeat(info=self.p_heartbeat) + + self.chunks = [self.heartbeat] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x04\x00\x00\x0c' + \ + b'\x00\x01\x00\x08' + \ + b'\x01\x02\x03\x04' + + def setUp_with_heartbeat_ack(self): + self.flags = 0 + self.length = 4 + 12 + + self.p_heartbeat = sctp.param_heartbeat( + b'\xff\xee\xdd\xcc\xbb\xaa\x99\x88') + + self.heartbeat_ack = sctp.chunk_heartbeat_ack(info=self.p_heartbeat) + + self.chunks = [self.heartbeat_ack] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x05\x00\x00\x10' + \ + b'\x00\x01\x00\x0c' + \ + b'\xff\xee\xdd\xcc\xbb\xaa\x99\x88' + + def setUp_with_abort(self): + self.tflag = 0 + self.length = 4 + 8 + 16 + 8 + 4 + 20 + 8 + 4 + 8 + 8 + 4 + 12 \ + + 20 + 20 + + self.c_invalid_stream_id = sctp.cause_invalid_stream_id(4096) + self.c_missing_param = sctp.cause_missing_param( + [sctp.PTYPE_IPV4, sctp.PTYPE_IPV6, + sctp.PTYPE_COOKIE_PRESERVE, sctp.PTYPE_HOST_ADDR]) + self.c_stale_cookie = sctp.cause_stale_cookie(b'\x00\x00\x13\x88') + self.c_out_of_resource = sctp.cause_out_of_resource() + self.c_unresolvable_addr = sctp.cause_unresolvable_addr( + sctp.param_host_addr(b'test host\x00')) + self.c_unrecognized_chunk = sctp.cause_unrecognized_chunk( + b'\xff\x00\x00\x04') + self.c_invalid_param = sctp.cause_invalid_param() + self.c_unrecognized_param = sctp.cause_unrecognized_param( + b'\xff\xff\x00\x04') + self.c_no_userdata = sctp.cause_no_userdata(b'\x00\x01\xe2\x40') + self.c_cookie_while_shutdown = sctp.cause_cookie_while_shutdown() + self.c_restart_with_new_addr = sctp.cause_restart_with_new_addr( + sctp.param_ipv4('192.168.1.1')) + self.c_user_initiated_abort = sctp.cause_user_initiated_abort( + b'Key Interrupt.\x00') + self.c_protocol_violation = sctp.cause_protocol_violation( + b'Unknown reason.\x00') + + self.causes = [ + self.c_invalid_stream_id, self.c_missing_param, + self.c_stale_cookie, self.c_out_of_resource, + self.c_unresolvable_addr, self.c_unrecognized_chunk, + self.c_invalid_param, self.c_unrecognized_param, + self.c_no_userdata, self.c_cookie_while_shutdown, + self.c_restart_with_new_addr, self.c_user_initiated_abort, + self.c_protocol_violation] + + self.abort = sctp.chunk_abort(causes=self.causes) + + self.chunks = [self.abort] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x06\x00\x00\x90' + \ + b'\x00\x01\x00\x08\x10\x00\x00\x00' + \ + b'\x00\x02\x00\x10\x00\x00\x00\x04' + \ + b'\x00\x05\x00\x06\x00\x09\x00\x0b' + \ + b'\x00\x03\x00\x08\x00\x00\x13\x88' + \ + b'\x00\x04\x00\x04' + \ + b'\x00\x05\x00\x14' + \ + b'\x00\x0b\x00\x0e' + \ + b'\x74\x65\x73\x74\x20\x68\x6f\x73\x74\x00\x00\x00' + \ + b'\x00\x06\x00\x08\xff\x00\x00\x04' + \ + b'\x00\x07\x00\x04' + \ + b'\x00\x08\x00\x08\xff\xff\x00\x04' + \ + b'\x00\x09\x00\x08\x00\x01\xe2\x40' + \ + b'\x00\x0a\x00\x04' + \ + b'\x00\x0b\x00\x0c' + \ + b'\x00\x05\x00\x08\xc0\xa8\x01\x01' + \ + b'\x00\x0c\x00\x13' + \ + b'\x4b\x65\x79\x20\x49\x6e\x74\x65' + \ + b'\x72\x72\x75\x70\x74\x2e\x00\x00' + \ + b'\x00\x0d\x00\x14' + \ + b'\x55\x6e\x6b\x6e\x6f\x77\x6e\x20' + \ + b'\x72\x65\x61\x73\x6f\x6e\x2e\x00' + + def setUp_with_shutdown(self): + self.flags = 0 + self.length = 8 + self.tsn_ack = 123456 + + self.shutdown = sctp.chunk_shutdown(tsn_ack=self.tsn_ack) + + self.chunks = [self.shutdown] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x07\x00\x00\x08\x00\x01\xe2\x40' + + def setUp_with_shutdown_ack(self): + self.flags = 0 + self.length = 4 + + self.shutdown_ack = sctp.chunk_shutdown_ack() + + self.chunks = [self.shutdown_ack] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x08\x00\x00\x04' + + def setUp_with_error(self): + self.flags = 0 + self.length = 4 + 8 + 16 + 8 + 4 + 20 + 8 + 4 + 8 + 8 + 4 + 12 \ + + 20 + 20 + + self.c_invalid_stream_id = sctp.cause_invalid_stream_id(4096) + self.c_missing_param = sctp.cause_missing_param( + [sctp.PTYPE_IPV4, sctp.PTYPE_IPV6, + sctp.PTYPE_COOKIE_PRESERVE, sctp.PTYPE_HOST_ADDR]) + self.c_stale_cookie = sctp.cause_stale_cookie(b'\x00\x00\x13\x88') + self.c_out_of_resource = sctp.cause_out_of_resource() + self.c_unresolvable_addr = sctp.cause_unresolvable_addr( + sctp.param_host_addr(b'test host\x00')) + self.c_unrecognized_chunk = sctp.cause_unrecognized_chunk( + b'\xff\x00\x00\x04') + self.c_invalid_param = sctp.cause_invalid_param() + self.c_unrecognized_param = sctp.cause_unrecognized_param( + b'\xff\xff\x00\x04') + self.c_no_userdata = sctp.cause_no_userdata(b'\x00\x01\xe2\x40') + self.c_cookie_while_shutdown = sctp.cause_cookie_while_shutdown() + self.c_restart_with_new_addr = sctp.cause_restart_with_new_addr( + sctp.param_ipv4('192.168.1.1')) + self.c_user_initiated_abort = sctp.cause_user_initiated_abort( + b'Key Interrupt.\x00') + self.c_protocol_violation = sctp.cause_protocol_violation( + b'Unknown reason.\x00') + + self.causes = [ + self.c_invalid_stream_id, self.c_missing_param, + self.c_stale_cookie, self.c_out_of_resource, + self.c_unresolvable_addr, self.c_unrecognized_chunk, + self.c_invalid_param, self.c_unrecognized_param, + self.c_no_userdata, self.c_cookie_while_shutdown, + self.c_restart_with_new_addr, self.c_user_initiated_abort, + self.c_protocol_violation] + + self.error = sctp.chunk_error(causes=self.causes) + + self.chunks = [self.error] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x09\x00\x00\x90' + \ + b'\x00\x01\x00\x08\x10\x00\x00\x00' + \ + b'\x00\x02\x00\x10\x00\x00\x00\x04' + \ + b'\x00\x05\x00\x06\x00\x09\x00\x0b' + \ + b'\x00\x03\x00\x08\x00\x00\x13\x88' + \ + b'\x00\x04\x00\x04' + \ + b'\x00\x05\x00\x14' + \ + b'\x00\x0b\x00\x0e' + \ + b'\x74\x65\x73\x74\x20\x68\x6f\x73\x74\x00\x00\x00' + \ + b'\x00\x06\x00\x08\xff\x00\x00\x04' + \ + b'\x00\x07\x00\x04' + \ + b'\x00\x08\x00\x08\xff\xff\x00\x04' + \ + b'\x00\x09\x00\x08\x00\x01\xe2\x40' + \ + b'\x00\x0a\x00\x04' + \ + b'\x00\x0b\x00\x0c' + \ + b'\x00\x05\x00\x08\xc0\xa8\x01\x01' + \ + b'\x00\x0c\x00\x13' + \ + b'\x4b\x65\x79\x20\x49\x6e\x74\x65' + \ + b'\x72\x72\x75\x70\x74\x2e\x00\x00' + \ + b'\x00\x0d\x00\x14' + \ + b'\x55\x6e\x6b\x6e\x6f\x77\x6e\x20' + \ + b'\x72\x65\x61\x73\x6f\x6e\x2e\x00' + + def setUp_with_cookie_echo(self): + self.flags = 0 + self.length = 8 + self.cookie = b'\x12\x34\x56\x78' + + self.cookie_echo = sctp.chunk_cookie_echo(cookie=self.cookie) + + self.chunks = [self.cookie_echo] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x0a\x00\x00\x08\x12\x34\x56\x78' + + def setUp_with_cookie_ack(self): + self.flags = 0 + self.length = 4 + + self.cookie_ack = sctp.chunk_cookie_ack() + + self.chunks = [self.cookie_ack] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x0b\x00\x00\x04' + + def setUp_with_ecn_echo(self): + self.flags = 0 + self.length = 8 + self.low_tsn = 123456 + + self.ecn_echo = sctp.chunk_ecn_echo(low_tsn=self.low_tsn) + + self.chunks = [self.ecn_echo] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x0c\x00\x00\x08\x00\x01\xe2\x40' + + def setUp_with_cwr(self): + self.flags = 0 + self.length = 8 + self.low_tsn = 123456 + + self.cwr = sctp.chunk_cwr(low_tsn=self.low_tsn) + + self.chunks = [self.cwr] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x0d\x00\x00\x08\x00\x01\xe2\x40' + + def setUp_with_shutdown_complete(self): + self.tflag = 0 + self.length = 4 + + self.shutdown_complete = sctp.chunk_shutdown_complete() + + self.chunks = [self.shutdown_complete] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x0e\x00\x00\x04' + + def setUp_with_multi_chunks(self): + self.s_flags = 0 + self.s_length = 16 + self.s_tsn_ack = 123456 + self.s_a_rwnd = 9876 + self.s_gapack_num = 0 + self.s_duptsn_num = 0 + self.s_gapacks = None + self.s_duptsns = None + + self.sack = sctp.chunk_sack( + tsn_ack=self.s_tsn_ack, a_rwnd=self.s_a_rwnd) + + self.d1_unordered = 0 + self.d1_begin = 1 + self.d1_end = 0 + self.d1_length = 16 + 10 + self.d1_tsn = 12345 + self.d1_sid = 1 + self.d1_seq = 0 + self.d1_payload_id = 0 + self.d1_payload_data = b'\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a' + + self.data1 = sctp.chunk_data( + begin=self.d1_begin, tsn=self.d1_tsn, sid=self.d1_sid, + payload_data=self.d1_payload_data) + + self.d2_unordered = 0 + self.d2_begin = 0 + self.d2_end = 1 + self.d2_length = 16 + 10 + self.d2_tsn = 12346 + self.d2_sid = 1 + self.d2_seq = 1 + self.d2_payload_id = 0 + self.d2_payload_data = b'\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a' + + self.data2 = sctp.chunk_data( + end=self.d2_end, tsn=self.d2_tsn, sid=self.d2_sid, + seq=self.d2_seq, payload_data=self.d2_payload_data) + + self.chunks = [self.sack, self.data1, self.data2] + + self.sc = sctp.sctp( + self.src_port, self.dst_port, self.vtag, self.csum, + self.chunks) + + self.buf += b'\x03\x00\x00\x10\x00\x01\xe2\x40' + \ + b'\x00\x00\x26\x94\x00\x00\x00\x00' + \ + b'\x00\x02\x00\x1a\x00\x00\x30\x39\x00\x01\x00\x00' + \ + b'\x00\x00\x00\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a' + \ + b'\x00\x01\x00\x1a\x00\x00\x30\x3a\x00\x01\x00\x01' + \ + b'\x00\x00\x00\x00\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a' + + def tearDown(self): + pass + + def test_init(self): + eq_(self.src_port, self.sc.src_port) + eq_(self.dst_port, self.sc.dst_port) + eq_(self.vtag, self.sc.vtag) + eq_(self.csum, self.sc.csum) + eq_(self.chunks, self.sc.chunks) + + def test_init_with_data(self): + self.setUp_with_data() + self.test_init() + + def test_init_with_init(self): + self.setUp_with_init() + self.test_init() + + def test_init_with_init_ack(self): + self.setUp_with_init_ack() + self.test_init() + + def test_init_with_sack(self): + self.setUp_with_sack() + self.test_init() + + def test_init_with_heartbeat(self): + self.setUp_with_heartbeat() + self.test_init() + + def test_init_with_heartbeat_ack(self): + self.setUp_with_heartbeat_ack() + self.test_init() + + def test_init_with_abort(self): + self.setUp_with_abort() + self.test_init() + + def test_init_with_shutdown(self): + self.setUp_with_shutdown() + self.test_init() + + def test_init_with_shutdown_ack(self): + self.setUp_with_shutdown_ack() + self.test_init() + + def test_init_with_error(self): + self.setUp_with_error() + self.test_init() + + def test_init_with_cookie_echo(self): + self.setUp_with_cookie_echo() + self.test_init() + + def test_init_with_cookie_ack(self): + self.setUp_with_cookie_ack() + self.test_init() + + def test_init_with_ecn_echo(self): + self.setUp_with_ecn_echo() + self.test_init() + + def test_init_with_cwr(self): + self.setUp_with_cwr() + self.test_init() + + def test_init_with_shutdown_complete(self): + self.setUp_with_shutdown_complete() + self.test_init() + + def test_init_with_multi_chunks(self): + self.setUp_with_multi_chunks() + self.test_init() + + def test_parser(self): + _res = self.sc.parser(six.binary_type(self.buf)) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + # to calculate the lengths of parameters. + self.sc.serialize(None, None) + + eq_(self.src_port, res.src_port) + eq_(self.dst_port, res.dst_port) + eq_(self.vtag, res.vtag) + eq_(self.csum, res.csum) + eq_(str(self.chunks), str(res.chunks)) + + def test_parser_with_data(self): + self.setUp_with_data() + self.test_parser() + + def test_parser_with_init(self): + self.setUp_with_init() + self.test_parser() + + def test_parser_with_init_ack(self): + self.setUp_with_init_ack() + self.test_parser() + + def test_parser_with_sack(self): + self.setUp_with_sack() + self.test_parser() + + def test_parser_with_heartbeat(self): + self.setUp_with_heartbeat() + self.test_parser() + + def test_parser_with_heartbeat_ack(self): + self.setUp_with_heartbeat_ack() + self.test_parser() + + def test_parser_with_abort(self): + self.setUp_with_abort() + self.test_parser() + + def test_parser_with_shutdown(self): + self.setUp_with_shutdown() + self.test_parser() + + def test_parser_with_shutdown_ack(self): + self.setUp_with_shutdown_ack() + self.test_parser() + + def test_parser_with_error(self): + self.setUp_with_error() + self.test_parser() + + def test_parser_with_cookie_echo(self): + self.setUp_with_cookie_echo() + self.test_parser() + + def test_parser_with_cookie_ack(self): + self.setUp_with_cookie_ack() + self.test_parser() + + def test_parser_with_ecn_echo(self): + self.setUp_with_ecn_echo() + self.test_parser() + + def test_parser_with_cwr(self): + self.setUp_with_cwr() + self.test_parser() + + def test_parser_with_shutdown_complete(self): + self.setUp_with_shutdown_complete() + self.test_parser() + + def test_parser_with_multi_chunks(self): + self.setUp_with_multi_chunks() + self.test_parser() + + def _test_serialize(self): + buf = self.sc.serialize(bytearray(), None) + res = struct.unpack_from(sctp.sctp._PACK_STR, buf) + eq_(self.src_port, res[0]) + eq_(self.dst_port, res[1]) + eq_(self.vtag, res[2]) + # skip compare checksum + # eq_(self.csum, res[3]) + + return buf[sctp.sctp._MIN_LEN:] + + def test_serialize(self): + self._test_serialize() + + def test_serialize_with_data(self): + self.setUp_with_data() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_data._PACK_STR, buf) + eq_(sctp.chunk_data.chunk_type(), res[0]) + flags = ( + (self.unordered << 2) | + (self.begin << 1) | + (self.end << 0)) + eq_(flags, res[1]) + eq_(self.length, res[2]) + eq_(self.tsn, res[3]) + eq_(self.sid, res[4]) + eq_(self.seq, res[5]) + eq_(self.payload_id, res[6]) + eq_(self.payload_data, buf[sctp.chunk_data._MIN_LEN:]) + + def test_serialize_with_init(self): + self.setUp_with_init() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_init._PACK_STR, buf) + eq_(sctp.chunk_init.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + eq_(self.init_tag, res[3]) + eq_(self.a_rwnd, res[4]) + eq_(self.os, res[5]) + eq_(self.mis, res[6]) + eq_(self.i_tsn, res[7]) + + buf = buf[sctp.chunk_init._MIN_LEN:] + res1 = struct.unpack_from(sctp.param_ipv4._PACK_STR, buf) + eq_(sctp.param_ipv4.param_type(), res1[0]) + eq_(8, res1[1]) + eq_('192.168.1.1', addrconv.ipv4.bin_to_text( + buf[sctp.param_ipv4._MIN_LEN:sctp.param_ipv4._MIN_LEN + 4])) + + buf = buf[8:] + res2 = struct.unpack_from(sctp.param_ipv6._PACK_STR, buf) + eq_(sctp.param_ipv6.param_type(), res2[0]) + eq_(20, res2[1]) + eq_('fe80::647e:1aff:fec4:8284', addrconv.ipv6.bin_to_text( + buf[sctp.param_ipv6._MIN_LEN:sctp.param_ipv6._MIN_LEN + 16])) + + buf = buf[20:] + res3 = struct.unpack_from(sctp.param_cookie_preserve._PACK_STR, + buf) + eq_(sctp.param_cookie_preserve.param_type(), res3[0]) + eq_(8, res3[1]) + eq_(5000, res3[2]) + + buf = buf[8:] + res4 = struct.unpack_from(sctp.param_ecn._PACK_STR, buf) + eq_(sctp.param_ecn.param_type(), res4[0]) + eq_(4, res4[1]) + + buf = buf[4:] + res5 = struct.unpack_from(sctp.param_host_addr._PACK_STR, buf) + eq_(sctp.param_host_addr.param_type(), res5[0]) + eq_(14, res5[1]) + eq_(b'test host\x00', + buf[sctp.param_host_addr._MIN_LEN: + sctp.param_host_addr._MIN_LEN + 10]) + + buf = buf[16:] + res6 = struct.unpack_from(sctp.param_supported_addr._PACK_STR, buf) + res6 = list(res6) + eq_(sctp.param_supported_addr.param_type(), res6[0]) + eq_(14, res6[1]) + buf = buf[sctp.param_supported_addr._MIN_LEN:] + offset = 0 + tmplist = [] + while offset < len(buf): + (tmp, ) = struct.unpack_from('!H', buf, offset) + tmplist.append(tmp) + offset += struct.calcsize('!H') + res6.extend(tmplist) + eq_(sctp.PTYPE_IPV4, res6[2]) + eq_(sctp.PTYPE_IPV6, res6[3]) + eq_(sctp.PTYPE_COOKIE_PRESERVE, res6[4]) + eq_(sctp.PTYPE_ECN, res6[5]) + eq_(sctp.PTYPE_HOST_ADDR, res6[6]) + + def test_serialize_with_init_ack(self): + self.setUp_with_init_ack() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_init_ack._PACK_STR, buf) + eq_(sctp.chunk_init_ack.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + eq_(self.init_tag, res[3]) + eq_(self.a_rwnd, res[4]) + eq_(self.os, res[5]) + eq_(self.mis, res[6]) + eq_(self.i_tsn, res[7]) + + buf = buf[sctp.chunk_init_ack._MIN_LEN:] + res1 = struct.unpack_from(sctp.param_state_cookie._PACK_STR, buf) + eq_(sctp.param_state_cookie.param_type(), res1[0]) + eq_(7, res1[1]) + eq_(b'\x01\x02\x03', + buf[sctp.param_state_cookie._MIN_LEN: + sctp.param_state_cookie._MIN_LEN + 3]) + + buf = buf[8:] + res2 = struct.unpack_from(sctp.param_ipv4._PACK_STR, buf) + eq_(sctp.param_ipv4.param_type(), res2[0]) + eq_(8, res2[1]) + eq_('192.168.1.1', addrconv.ipv4.bin_to_text( + buf[sctp.param_ipv4._MIN_LEN:sctp.param_ipv4._MIN_LEN + 4])) + + buf = buf[8:] + res3 = struct.unpack_from(sctp.param_ipv6._PACK_STR, buf) + eq_(sctp.param_ipv6.param_type(), res3[0]) + eq_(20, res3[1]) + eq_('fe80::647e:1aff:fec4:8284', addrconv.ipv6.bin_to_text( + buf[sctp.param_ipv6._MIN_LEN:sctp.param_ipv6._MIN_LEN + 16])) + + buf = buf[20:] + res4 = struct.unpack_from( + sctp.param_unrecognized_param._PACK_STR, buf) + eq_(sctp.param_unrecognized_param.param_type(), res4[0]) + eq_(8, res4[1]) + eq_(b'\xff\xff\x00\x04', + buf[sctp.param_unrecognized_param._MIN_LEN: + sctp.param_unrecognized_param._MIN_LEN + 4]) + + buf = buf[8:] + res5 = struct.unpack_from(sctp.param_ecn._PACK_STR, buf) + eq_(sctp.param_ecn.param_type(), res5[0]) + eq_(4, res5[1]) + + buf = buf[4:] + res6 = struct.unpack_from(sctp.param_host_addr._PACK_STR, buf) + eq_(sctp.param_host_addr.param_type(), res6[0]) + eq_(14, res6[1]) + eq_(b'test host\x00', + buf[sctp.param_host_addr._MIN_LEN: + sctp.param_host_addr._MIN_LEN + 10]) + + def test_serialize_with_sack(self): + self.setUp_with_sack() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_sack._PACK_STR, buf) + eq_(sctp.chunk_sack.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + eq_(self.tsn_ack, res[3]) + eq_(self.a_rwnd, res[4]) + eq_(self.gapack_num, res[5]) + eq_(self.duptsn_num, res[6]) + + buf = buf[sctp.chunk_sack._MIN_LEN:] + gapacks = [] + for _ in range(self.gapack_num): + (gap_s, gap_e) = struct.unpack_from( + sctp.chunk_sack._GAPACK_STR, buf) + one = [gap_s, gap_e] + gapacks.append(one) + buf = buf[sctp.chunk_sack._GAPACK_LEN:] + duptsns = [] + for _ in range(self.duptsn_num): + (duptsn, ) = struct.unpack_from( + sctp.chunk_sack._DUPTSN_STR, buf) + duptsns.append(duptsn) + buf = buf[sctp.chunk_sack._DUPTSN_LEN:] + eq_(self.gapacks, gapacks) + eq_(self.duptsns, duptsns) + + def test_serialize_with_heartbeat(self): + self.setUp_with_heartbeat() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_heartbeat._PACK_STR, buf) + eq_(sctp.chunk_heartbeat.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + + buf = buf[sctp.chunk_heartbeat._MIN_LEN:] + res1 = struct.unpack_from(sctp.param_heartbeat._PACK_STR, buf) + eq_(sctp.param_heartbeat.param_type(), res1[0]) + eq_(8, res1[1]) + eq_(b'\x01\x02\x03\x04', + buf[sctp.param_heartbeat._MIN_LEN: + sctp.param_heartbeat._MIN_LEN + 4]) + + def test_serialize_with_heartbeat_ack(self): + self.setUp_with_heartbeat_ack() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_heartbeat_ack._PACK_STR, buf) + eq_(sctp.chunk_heartbeat_ack.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + + buf = buf[sctp.chunk_heartbeat_ack._MIN_LEN:] + res1 = struct.unpack_from(sctp.param_heartbeat._PACK_STR, buf) + eq_(sctp.param_heartbeat.param_type(), res1[0]) + eq_(12, res1[1]) + eq_(b'\xff\xee\xdd\xcc\xbb\xaa\x99\x88', + buf[sctp.param_heartbeat._MIN_LEN: + sctp.param_heartbeat._MIN_LEN + 8]) + + def test_serialize_with_abort(self): + self.setUp_with_abort() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_abort._PACK_STR, buf) + eq_(sctp.chunk_abort.chunk_type(), res[0]) + flags = self.tflag << 0 + eq_(flags, res[1]) + eq_(self.length, res[2]) + + buf = buf[sctp.chunk_abort._MIN_LEN:] + res1 = struct.unpack_from(sctp.cause_invalid_stream_id._PACK_STR, buf) + eq_(sctp.cause_invalid_stream_id.cause_code(), res1[0]) + eq_(8, res1[1]) + eq_(4096, res1[2]) + + buf = buf[8:] + res2 = struct.unpack_from(sctp.cause_missing_param._PACK_STR, buf) + eq_(sctp.cause_missing_param.cause_code(), res2[0]) + eq_(16, res2[1]) + eq_(4, res2[2]) + types = [] + for count in range(4): + (tmp, ) = struct.unpack_from( + '!H', buf, sctp.cause_missing_param._MIN_LEN + 2 * count) + types.append(tmp) + eq_(str([sctp.PTYPE_IPV4, sctp.PTYPE_IPV6, + sctp.PTYPE_COOKIE_PRESERVE, sctp.PTYPE_HOST_ADDR]), + str(types)) + + buf = buf[16:] + res3 = struct.unpack_from(sctp.cause_stale_cookie._PACK_STR, buf) + eq_(sctp.cause_stale_cookie.cause_code(), res3[0]) + eq_(8, res3[1]) + eq_(b'\x00\x00\x13\x88', + buf[sctp.cause_stale_cookie._MIN_LEN: + sctp.cause_stale_cookie._MIN_LEN + 4]) + + buf = buf[8:] + res4 = struct.unpack_from(sctp.cause_out_of_resource._PACK_STR, buf) + eq_(sctp.cause_out_of_resource.cause_code(), res4[0]) + eq_(4, res4[1]) + + buf = buf[4:] + res5 = struct.unpack_from( + sctp.cause_unresolvable_addr._PACK_STR, buf) + eq_(sctp.cause_unresolvable_addr.cause_code(), res5[0]) + eq_(20, res5[1]) + eq_(b'\x00\x0b\x00\x0e\x74\x65\x73\x74' + + b'\x20\x68\x6f\x73\x74\x00\x00\x00', + buf[sctp.cause_unresolvable_addr._MIN_LEN: + sctp.cause_unresolvable_addr._MIN_LEN + 16]) + + buf = buf[20:] + res6 = struct.unpack_from( + sctp.cause_unrecognized_chunk._PACK_STR, buf) + eq_(sctp.cause_unrecognized_chunk.cause_code(), res6[0]) + eq_(8, res6[1]) + eq_(b'\xff\x00\x00\x04', + buf[sctp.cause_unrecognized_chunk._MIN_LEN: + sctp.cause_unrecognized_chunk._MIN_LEN + 4]) + + buf = buf[8:] + res7 = struct.unpack_from(sctp.cause_invalid_param._PACK_STR, buf) + eq_(sctp.cause_invalid_param.cause_code(), res7[0]) + eq_(4, res7[1]) + + buf = buf[4:] + res8 = struct.unpack_from( + sctp.cause_unrecognized_param._PACK_STR, buf) + eq_(sctp.cause_unrecognized_param.cause_code(), res8[0]) + eq_(8, res8[1]) + eq_(b'\xff\xff\x00\x04', + buf[sctp.cause_unrecognized_param._MIN_LEN: + sctp.cause_unrecognized_param._MIN_LEN + 4]) + + buf = buf[8:] + res9 = struct.unpack_from(sctp.cause_no_userdata._PACK_STR, buf) + eq_(sctp.cause_no_userdata.cause_code(), res9[0]) + eq_(8, res9[1]) + eq_(b'\x00\x01\xe2\x40', + buf[sctp.cause_no_userdata._MIN_LEN: + sctp.cause_no_userdata._MIN_LEN + 4]) + + buf = buf[8:] + res10 = struct.unpack_from( + sctp.cause_cookie_while_shutdown._PACK_STR, buf) + eq_(sctp.cause_cookie_while_shutdown.cause_code(), res10[0]) + eq_(4, res10[1]) + + buf = buf[4:] + res11 = struct.unpack_from( + sctp.cause_restart_with_new_addr._PACK_STR, buf) + eq_(sctp.cause_restart_with_new_addr.cause_code(), res11[0]) + eq_(12, res11[1]) + eq_(b'\x00\x05\x00\x08\xc0\xa8\x01\x01', + buf[sctp.cause_restart_with_new_addr._MIN_LEN: + sctp.cause_restart_with_new_addr._MIN_LEN + 8]) + + buf = buf[12:] + res12 = struct.unpack_from( + sctp.cause_user_initiated_abort._PACK_STR, buf) + eq_(sctp.cause_user_initiated_abort.cause_code(), res12[0]) + eq_(19, res12[1]) + eq_(b'Key Interrupt.\x00', + buf[sctp.cause_user_initiated_abort._MIN_LEN: + sctp.cause_user_initiated_abort._MIN_LEN + 15]) + + buf = buf[20:] + res13 = struct.unpack_from( + sctp.cause_protocol_violation._PACK_STR, buf) + eq_(sctp.cause_protocol_violation.cause_code(), res13[0]) + eq_(20, res13[1]) + eq_(b'Unknown reason.\x00', + buf[sctp.cause_protocol_violation._MIN_LEN: + sctp.cause_protocol_violation._MIN_LEN + 16]) + + def test_serialize_with_shutdown(self): + self.setUp_with_shutdown() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_shutdown._PACK_STR, buf) + eq_(sctp.chunk_shutdown.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + eq_(self.tsn_ack, res[3]) + + def test_serialize_with_shutdown_ack(self): + self.setUp_with_shutdown_ack() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_shutdown_ack._PACK_STR, buf) + eq_(sctp.chunk_shutdown_ack.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + + def test_serialize_with_error(self): + self.setUp_with_error() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_error._PACK_STR, buf) + eq_(sctp.chunk_error.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + + buf = buf[sctp.chunk_error._MIN_LEN:] + res1 = struct.unpack_from(sctp.cause_invalid_stream_id._PACK_STR, buf) + eq_(sctp.cause_invalid_stream_id.cause_code(), res1[0]) + eq_(8, res1[1]) + eq_(4096, res1[2]) + + buf = buf[8:] + res2 = struct.unpack_from(sctp.cause_missing_param._PACK_STR, buf) + eq_(sctp.cause_missing_param.cause_code(), res2[0]) + eq_(16, res2[1]) + eq_(4, res2[2]) + types = [] + for count in range(4): + (tmp, ) = struct.unpack_from( + '!H', buf, sctp.cause_missing_param._MIN_LEN + 2 * count) + types.append(tmp) + eq_(str([sctp.PTYPE_IPV4, sctp.PTYPE_IPV6, + sctp.PTYPE_COOKIE_PRESERVE, sctp.PTYPE_HOST_ADDR]), + str(types)) + + buf = buf[16:] + res3 = struct.unpack_from(sctp.cause_stale_cookie._PACK_STR, buf) + eq_(sctp.cause_stale_cookie.cause_code(), res3[0]) + eq_(8, res3[1]) + eq_(b'\x00\x00\x13\x88', + buf[sctp.cause_stale_cookie._MIN_LEN: + sctp.cause_stale_cookie._MIN_LEN + 4]) + + buf = buf[8:] + res4 = struct.unpack_from(sctp.cause_out_of_resource._PACK_STR, buf) + eq_(sctp.cause_out_of_resource.cause_code(), res4[0]) + eq_(4, res4[1]) + + buf = buf[4:] + res5 = struct.unpack_from( + sctp.cause_unresolvable_addr._PACK_STR, buf) + eq_(sctp.cause_unresolvable_addr.cause_code(), res5[0]) + eq_(20, res5[1]) + eq_(b'\x00\x0b\x00\x0e\x74\x65\x73\x74' + + b'\x20\x68\x6f\x73\x74\x00\x00\x00', + buf[sctp.cause_unresolvable_addr._MIN_LEN: + sctp.cause_unresolvable_addr._MIN_LEN + 16]) + + buf = buf[20:] + res6 = struct.unpack_from( + sctp.cause_unrecognized_chunk._PACK_STR, buf) + eq_(sctp.cause_unrecognized_chunk.cause_code(), res6[0]) + eq_(8, res6[1]) + eq_(b'\xff\x00\x00\x04', + buf[sctp.cause_unrecognized_chunk._MIN_LEN: + sctp.cause_unrecognized_chunk._MIN_LEN + 4]) + + buf = buf[8:] + res7 = struct.unpack_from(sctp.cause_invalid_param._PACK_STR, buf) + eq_(sctp.cause_invalid_param.cause_code(), res7[0]) + eq_(4, res7[1]) + + buf = buf[4:] + res8 = struct.unpack_from( + sctp.cause_unrecognized_param._PACK_STR, buf) + eq_(sctp.cause_unrecognized_param.cause_code(), res8[0]) + eq_(8, res8[1]) + eq_(b'\xff\xff\x00\x04', + buf[sctp.cause_unrecognized_param._MIN_LEN: + sctp.cause_unrecognized_param._MIN_LEN + 4]) + + buf = buf[8:] + res9 = struct.unpack_from(sctp.cause_no_userdata._PACK_STR, buf) + eq_(sctp.cause_no_userdata.cause_code(), res9[0]) + eq_(8, res9[1]) + eq_(b'\x00\x01\xe2\x40', + buf[sctp.cause_no_userdata._MIN_LEN: + sctp.cause_no_userdata._MIN_LEN + 4]) + + buf = buf[8:] + res10 = struct.unpack_from( + sctp.cause_cookie_while_shutdown._PACK_STR, buf) + eq_(sctp.cause_cookie_while_shutdown.cause_code(), res10[0]) + eq_(4, res10[1]) + + buf = buf[4:] + res11 = struct.unpack_from( + sctp.cause_restart_with_new_addr._PACK_STR, buf) + eq_(sctp.cause_restart_with_new_addr.cause_code(), res11[0]) + eq_(12, res11[1]) + eq_(b'\x00\x05\x00\x08\xc0\xa8\x01\x01', + buf[sctp.cause_restart_with_new_addr._MIN_LEN: + sctp.cause_restart_with_new_addr._MIN_LEN + 8]) + + buf = buf[12:] + res12 = struct.unpack_from( + sctp.cause_user_initiated_abort._PACK_STR, buf) + eq_(sctp.cause_user_initiated_abort.cause_code(), res12[0]) + eq_(19, res12[1]) + eq_(b'Key Interrupt.\x00', + buf[sctp.cause_user_initiated_abort._MIN_LEN: + sctp.cause_user_initiated_abort._MIN_LEN + 15]) + + buf = buf[20:] + res13 = struct.unpack_from( + sctp.cause_protocol_violation._PACK_STR, buf) + eq_(sctp.cause_protocol_violation.cause_code(), res13[0]) + eq_(20, res13[1]) + eq_(b'Unknown reason.\x00', + buf[sctp.cause_protocol_violation._MIN_LEN: + sctp.cause_protocol_violation._MIN_LEN + 16]) + + def test_serialize_with_cookie_echo(self): + self.setUp_with_cookie_echo() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_cookie_echo._PACK_STR, buf) + eq_(sctp.chunk_cookie_echo.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + eq_(self.cookie, + buf[sctp.chunk_cookie_echo._MIN_LEN: + sctp.chunk_cookie_echo._MIN_LEN + 4]) + + def test_serialize_with_cookie_ack(self): + self.setUp_with_cookie_ack() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_cookie_ack._PACK_STR, buf) + eq_(sctp.chunk_cookie_ack.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + + def test_serialize_with_ecn_echo(self): + self.setUp_with_ecn_echo() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_ecn_echo._PACK_STR, buf) + eq_(sctp.chunk_ecn_echo.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + eq_(self.low_tsn, res[3]) + + def test_serialize_with_cwr(self): + self.setUp_with_cwr() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_cwr._PACK_STR, buf) + eq_(sctp.chunk_cwr.chunk_type(), res[0]) + eq_(self.flags, res[1]) + eq_(self.length, res[2]) + eq_(self.low_tsn, res[3]) + + def test_serialize_with_shutdown_complete(self): + self.setUp_with_shutdown_complete() + buf = self._test_serialize() + res = struct.unpack_from( + sctp.chunk_shutdown_complete._PACK_STR, buf) + eq_(sctp.chunk_shutdown_complete.chunk_type(), res[0]) + flags = self.tflag << 0 + eq_(flags, res[1]) + eq_(self.length, res[2]) + + def test_serialize_with_multi_chunks(self): + self.setUp_with_multi_chunks() + buf = self._test_serialize() + res = struct.unpack_from(sctp.chunk_sack._PACK_STR, buf) + eq_(sctp.chunk_sack.chunk_type(), res[0]) + eq_(self.s_flags, res[1]) + eq_(self.s_length, res[2]) + eq_(self.s_tsn_ack, res[3]) + eq_(self.s_a_rwnd, res[4]) + eq_(self.s_gapack_num, res[5]) + eq_(self.s_duptsn_num, res[6]) + + buf = buf[self.s_length:] + res = struct.unpack_from(sctp.chunk_data._PACK_STR, buf) + eq_(sctp.chunk_data.chunk_type(), res[0]) + d1_flags = ( + (self.d1_unordered << 2) | + (self.d1_begin << 1) | + (self.d1_end << 0)) + eq_(d1_flags, res[1]) + eq_(self.d1_length, res[2]) + eq_(self.d1_tsn, res[3]) + eq_(self.d1_sid, res[4]) + eq_(self.d1_seq, res[5]) + eq_(self.d1_payload_id, res[6]) + eq_(self.d1_payload_data, + buf[sctp.chunk_data._MIN_LEN: + sctp.chunk_data._MIN_LEN + 10]) + + buf = buf[self.d1_length:] + res = struct.unpack_from(sctp.chunk_data._PACK_STR, buf) + eq_(sctp.chunk_data.chunk_type(), res[0]) + d2_flags = ( + (self.d2_unordered << 2) | + (self.d2_begin << 1) | + (self.d2_end << 0)) + eq_(d2_flags, res[1]) + eq_(self.d2_length, res[2]) + eq_(self.d2_tsn, res[3]) + eq_(self.d2_sid, res[4]) + eq_(self.d2_seq, res[5]) + eq_(self.d2_payload_id, res[6]) + eq_(self.d2_payload_data, + buf[sctp.chunk_data._MIN_LEN: + sctp.chunk_data._MIN_LEN + 10]) + + def test_build_sctp(self): + eth = ethernet.ethernet('00:aa:aa:aa:aa:aa', '00:bb:bb:bb:bb:bb', + ether.ETH_TYPE_IP) + ip4 = ipv4.ipv4(4, 5, 16, 0, 0, 2, 0, 64, inet.IPPROTO_SCTP, 0, + '192.168.1.1', '10.144.1.1') + pkt = eth / ip4 / self.sc + + eth = pkt.get_protocol(ethernet.ethernet) + ok_(eth) + eq_(eth.ethertype, ether.ETH_TYPE_IP) + + ip4 = pkt.get_protocol(ipv4.ipv4) + ok_(ip4) + eq_(ip4.proto, inet.IPPROTO_SCTP) + + sc = pkt.get_protocol(sctp.sctp) + ok_(sc) + eq_(sc, self.sc) + + def test_build_sctp_with_data(self): + self.setUp_with_data() + self.test_build_sctp() + + def test_build_sctp_with_init(self): + self.setUp_with_init() + self.test_build_sctp() + + def test_build_sctp_with_init_ack(self): + self.setUp_with_init_ack() + self.test_build_sctp() + + def test_build_sctp_with_sack(self): + self.setUp_with_sack() + self.test_build_sctp() + + def test_build_sctp_with_heartbeat(self): + self.setUp_with_heartbeat() + self.test_build_sctp() + + def test_build_sctp_with_heartbeat_ack(self): + self.setUp_with_heartbeat_ack() + self.test_build_sctp() + + def test_build_sctp_with_abort(self): + self.setUp_with_abort() + self.test_build_sctp() + + def test_build_sctp_with_shutdown(self): + self.setUp_with_shutdown() + self.test_build_sctp() + + def test_build_sctp_with_shutdown_ack(self): + self.setUp_with_shutdown_ack() + self.test_build_sctp() + + def test_build_sctp_with_error(self): + self.setUp_with_error() + self.test_build_sctp() + + def test_build_sctp_with_cookie_echo(self): + self.setUp_with_cookie_echo() + self.test_build_sctp() + + def test_build_sctp_with_cookie_ack(self): + self.setUp_with_cookie_ack() + self.test_build_sctp() + + def test_build_sctp_with_ecn_echo(self): + self.setUp_with_ecn_echo() + self.test_build_sctp() + + def test_build_sctp_with_cwr(self): + self.setUp_with_cwr() + self.test_build_sctp() + + def test_build_sctp_with_shutdown_complete(self): + self.setUp_with_shutdown_complete() + self.test_build_sctp() + + def tset_build_sctp_with_multi_chunks(self): + self.setUp_with_multi_chunks() + self.test_build_sctp() + + def test_to_string(self): + sctp_values = {'src_port': self.src_port, + 'dst_port': self.dst_port, + 'vtag': self.vtag, + 'csum': self.csum, + 'chunks': self.chunks} + _sctp_str = ','.join(['%s=%s' % (k, sctp_values[k]) + for k, _ in inspect.getmembers(self.sc) + if k in sctp_values]) + sctp_str = '%s(%s)' % (sctp.sctp.__name__, _sctp_str) + + eq_(str(self.sc), sctp_str) + eq_(repr(self.sc), sctp_str) + + def test_to_string_with_data(self): + self.setUp_with_data() + self.test_to_string() + + def test_to_string_with_init(self): + self.setUp_with_init() + self.test_to_string() + + def test_to_string_with_init_ack(self): + self.setUp_with_init_ack() + self.test_to_string() + + def test_to_string_with_sack(self): + self.setUp_with_sack() + self.test_to_string() + + def test_to_string_with_heartbeat(self): + self.setUp_with_heartbeat() + self.test_to_string() + + def test_to_string_with_heartbeat_ack(self): + self.setUp_with_heartbeat_ack() + self.test_to_string() + + def test_to_string_with_abort(self): + self.setUp_with_abort() + self.test_to_string() + + def test_to_string_with_shutdown(self): + self.setUp_with_shutdown() + self.test_to_string() + + def test_to_string_with_shutdown_ack(self): + self.setUp_with_shutdown_ack() + self.test_to_string() + + def test_to_string_with_error(self): + self.setUp_with_error() + self.test_to_string() + + def test_to_string_with_cookie_echo(self): + self.setUp_with_cookie_echo() + self.test_to_string() + + def test_to_string_with_cookie_ack(self): + self.setUp_with_cookie_ack() + self.test_to_string() + + def test_to_string_with_ecn_echo(self): + self.setUp_with_ecn_echo() + self.test_to_string() + + def test_to_string_with_cwr(self): + self.setUp_with_cwr() + self.test_to_string() + + def test_to_string_with_shutdown_complete(self): + self.setUp_with_shutdown_complete() + self.test_to_string() + + def test_to_string_with_multi_chunks(self): + self.setUp_with_multi_chunks() + self.test_to_string() + + def test_json(self): + jsondict = self.sc.to_jsondict() + sc = sctp.sctp.from_jsondict(jsondict['sctp']) + eq_(str(self.sc), str(sc)) + + def test_json_with_data(self): + self.setUp_with_data() + self.test_json() + + def test_json_with_init(self): + self.setUp_with_init() + self.test_json() + + def test_json_with_init_ack(self): + self.setUp_with_init_ack() + self.test_json() + + def test_json_with_sack(self): + self.setUp_with_sack() + self.test_json() + + def test_json_with_heartbeat(self): + self.setUp_with_heartbeat() + self.test_json() + + def test_json_with_heartbeat_ack(self): + self.setUp_with_heartbeat_ack() + self.test_json() + + def test_json_with_abort(self): + self.setUp_with_abort() + self.test_json() + + def test_json_with_shutdown(self): + self.setUp_with_shutdown() + self.test_json() + + def test_json_with_shutdown_ack(self): + self.setUp_with_shutdown_ack() + self.test_json() + + def test_json_with_error(self): + self.setUp_with_error() + self.test_json() + + def test_json_with_cookie_echo(self): + self.setUp_with_cookie_echo() + self.test_json() + + def test_json_with_cookie_ack(self): + self.setUp_with_cookie_ack() + self.test_json() + + def test_json_with_ecn_echo(self): + self.setUp_with_ecn_echo() + self.test_json() + + def test_json_with_cwr(self): + self.setUp_with_cwr() + self.test_json() + + def test_json_with_shutdown_complete(self): + self.setUp_with_shutdown_complete() + self.test_json() + + def test_json_with_multi_chunks(self): + self.setUp_with_multi_chunks() + self.test_json() diff --git a/tests/unit/packet/test_slow.py b/tests/unit/packet/test_slow.py new file mode 100644 index 00000000..9e077fd2 --- /dev/null +++ b/tests/unit/packet/test_slow.py @@ -0,0 +1,1104 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import copy +import logging +from struct import pack, unpack_from +import unittest + +from nose.tools import ok_, eq_, raises +from ryu.ofproto import ether +from ryu.lib.packet.ethernet import ethernet +from ryu.lib.packet.packet import Packet +from ryu.lib import addrconv +from ryu.lib.packet.slow import slow, lacp +from ryu.lib.packet.slow import SLOW_PROTOCOL_MULTICAST +from ryu.lib.packet.slow import SLOW_SUBTYPE_LACP +from ryu.lib.packet.slow import SLOW_SUBTYPE_MARKER + +LOG = logging.getLogger(__name__) + + +class Test_slow(unittest.TestCase): + """ Test case for Slow Protocol + """ + def setUp(self): + self.subtype = SLOW_SUBTYPE_LACP + self.version = lacp.LACP_VERSION_NUMBER + self.actor_tag = lacp.LACP_TLV_TYPE_ACTOR + self.actor_length = 20 + self.actor_system_priority = 65534 + self.actor_system = '00:07:0d:af:f4:54' + self.actor_key = 1 + self.actor_port_priority = 65535 + self.actor_port = 1 + self.actor_state_activity = lacp.LACP_STATE_ACTIVE + self.actor_state_timeout = lacp.LACP_STATE_LONG_TIMEOUT + self.actor_state_aggregation = lacp.LACP_STATE_AGGREGATEABLE + self.actor_state_synchronization = lacp.LACP_STATE_IN_SYNC + self.actor_state_collecting = lacp.LACP_STATE_COLLECTING_ENABLED + self.actor_state_distributing = lacp.LACP_STATE_DISTRIBUTING_ENABLED + self.actor_state_defaulted = lacp.LACP_STATE_OPERATIONAL_PARTNER + self.actor_state_expired = lacp.LACP_STATE_EXPIRED + self.actor_state = ( + (self.actor_state_activity << 0) | + (self.actor_state_timeout << 1) | + (self.actor_state_aggregation << 2) | + (self.actor_state_synchronization << 3) | + (self.actor_state_collecting << 4) | + (self.actor_state_distributing << 5) | + (self.actor_state_defaulted << 6) | + (self.actor_state_expired << 7)) + self.partner_tag = lacp.LACP_TLV_TYPE_PARTNER + self.partner_length = 20 + self.partner_system_priority = 0 + self.partner_system = '00:00:00:00:00:00' + self.partner_key = 0 + self.partner_port_priority = 0 + self.partner_port = 0 + self.partner_state_activity = 0 + self.partner_state_timeout = lacp.LACP_STATE_SHORT_TIMEOUT + self.partner_state_aggregation = 0 + self.partner_state_synchronization = 0 + self.partner_state_collecting = 0 + self.partner_state_distributing = 0 + self.partner_state_defaulted = 0 + self.partner_state_expired = 0 + self.partner_state = ( + (self.partner_state_activity << 0) | + (self.partner_state_timeout << 1) | + (self.partner_state_aggregation << 2) | + (self.partner_state_synchronization << 3) | + (self.partner_state_collecting << 4) | + (self.partner_state_distributing << 5) | + (self.partner_state_defaulted << 6) | + (self.partner_state_expired << 7)) + self.collector_tag = lacp.LACP_TLV_TYPE_COLLECTOR + self.collector_length = 16 + self.collector_max_delay = 0 + self.terminator_tag = lacp.LACP_TLV_TYPE_TERMINATOR + self.terminator_length = 0 + + self.head_fmt = lacp._HLEN_PACK_STR + self.head_len = lacp._HLEN_PACK_LEN + self.act_fmt = lacp._ACTPRT_INFO_PACK_STR + self.act_len = lacp._ACTPRT_INFO_PACK_LEN + self.prt_fmt = lacp._ACTPRT_INFO_PACK_STR + self.prt_len = lacp._ACTPRT_INFO_PACK_LEN + self.col_fmt = lacp._COL_INFO_PACK_STR + self.col_len = lacp._COL_INFO_PACK_LEN + self.trm_fmt = lacp._TRM_PACK_STR + self.trm_len = lacp._TRM_PACK_LEN + self.length = lacp._ALL_PACK_LEN + + self.head_buf = pack(self.head_fmt, + self.subtype, + self.version) + self.act_buf = pack(self.act_fmt, + self.actor_tag, + self.actor_length, + self.actor_system_priority, + addrconv.mac.text_to_bin(self.actor_system), + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state) + self.prt_buf = pack(self.prt_fmt, + self.partner_tag, + self.partner_length, + self.partner_system_priority, + addrconv.mac.text_to_bin(self.partner_system), + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state) + self.col_buf = pack(self.col_fmt, + self.collector_tag, + self.collector_length, + self.collector_max_delay) + self.trm_buf = pack(self.trm_fmt, + self.terminator_tag, + self.terminator_length) + + self.buf = self.head_buf + self.act_buf + self.prt_buf + \ + self.col_buf + self.trm_buf + + def tearDown(self): + pass + + def test_parser(self): + slow.parser(self.buf) + + def test_not_implemented_subtype(self): + not_implemented_buf = pack( + slow._PACK_STR, SLOW_SUBTYPE_MARKER) + self.buf[1:] + (instance, nexttype, last) = slow.parser(not_implemented_buf) + assert None == instance + assert None == nexttype + assert None != last + + def test_invalid_subtype(self): + invalid_buf = b'\xff' + self.buf[1:] + (instance, nexttype, last) = slow.parser(invalid_buf) + assert None == instance + assert None == nexttype + assert None != last + + +class Test_lacp(unittest.TestCase): + """ Test case for lacp + """ + + def setUp(self): + self.subtype = SLOW_SUBTYPE_LACP + self.version = lacp.LACP_VERSION_NUMBER + self.actor_tag = lacp.LACP_TLV_TYPE_ACTOR + self.actor_length = 20 + self.actor_system_priority = 65534 + self.actor_system = '00:07:0d:af:f4:54' + self.actor_key = 1 + self.actor_port_priority = 65535 + self.actor_port = 1 + self.actor_state_activity = lacp.LACP_STATE_ACTIVE + self.actor_state_timeout = lacp.LACP_STATE_LONG_TIMEOUT + self.actor_state_aggregation = lacp.LACP_STATE_AGGREGATEABLE + self.actor_state_synchronization = lacp.LACP_STATE_IN_SYNC + self.actor_state_collecting = lacp.LACP_STATE_COLLECTING_ENABLED + self.actor_state_distributing = lacp.LACP_STATE_DISTRIBUTING_ENABLED + self.actor_state_defaulted = lacp.LACP_STATE_OPERATIONAL_PARTNER + self.actor_state_expired = lacp.LACP_STATE_EXPIRED + self.actor_state = ( + (self.actor_state_activity << 0) | + (self.actor_state_timeout << 1) | + (self.actor_state_aggregation << 2) | + (self.actor_state_synchronization << 3) | + (self.actor_state_collecting << 4) | + (self.actor_state_distributing << 5) | + (self.actor_state_defaulted << 6) | + (self.actor_state_expired << 7)) + self.partner_tag = lacp.LACP_TLV_TYPE_PARTNER + self.partner_length = 20 + self.partner_system_priority = 0 + self.partner_system = '00:00:00:00:00:00' + self.partner_key = 0 + self.partner_port_priority = 0 + self.partner_port = 0 + self.partner_state_activity = 0 + self.partner_state_timeout = lacp.LACP_STATE_SHORT_TIMEOUT + self.partner_state_aggregation = 0 + self.partner_state_synchronization = 0 + self.partner_state_collecting = 0 + self.partner_state_distributing = 0 + self.partner_state_defaulted = 0 + self.partner_state_expired = 0 + self.partner_state = ( + (self.partner_state_activity << 0) | + (self.partner_state_timeout << 1) | + (self.partner_state_aggregation << 2) | + (self.partner_state_synchronization << 3) | + (self.partner_state_collecting << 4) | + (self.partner_state_distributing << 5) | + (self.partner_state_defaulted << 6) | + (self.partner_state_expired << 7)) + self.collector_tag = lacp.LACP_TLV_TYPE_COLLECTOR + self.collector_length = 16 + self.collector_max_delay = 0 + self.terminator_tag = lacp.LACP_TLV_TYPE_TERMINATOR + self.terminator_length = 0 + + self.head_fmt = lacp._HLEN_PACK_STR + self.head_len = lacp._HLEN_PACK_LEN + self.act_fmt = lacp._ACTPRT_INFO_PACK_STR + self.act_len = lacp._ACTPRT_INFO_PACK_LEN + self.prt_fmt = lacp._ACTPRT_INFO_PACK_STR + self.prt_len = lacp._ACTPRT_INFO_PACK_LEN + self.col_fmt = lacp._COL_INFO_PACK_STR + self.col_len = lacp._COL_INFO_PACK_LEN + self.trm_fmt = lacp._TRM_PACK_STR + self.trm_len = lacp._TRM_PACK_LEN + self.length = lacp._ALL_PACK_LEN + + self.head_buf = pack(self.head_fmt, + self.subtype, + self.version) + self.act_buf = pack(self.act_fmt, + self.actor_tag, + self.actor_length, + self.actor_system_priority, + addrconv.mac.text_to_bin(self.actor_system), + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state) + self.prt_buf = pack(self.prt_fmt, + self.partner_tag, + self.partner_length, + self.partner_system_priority, + addrconv.mac.text_to_bin(self.partner_system), + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state) + self.col_buf = pack(self.col_fmt, + self.collector_tag, + self.collector_length, + self.collector_max_delay) + self.trm_buf = pack(self.trm_fmt, + self.terminator_tag, + self.terminator_length) + + self.buf = self.head_buf + self.act_buf + self.prt_buf + \ + self.col_buf + self.trm_buf + + self.l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + + def tearDown(self): + pass + + def find_protocol(self, pkt, name): + for p in pkt.protocols: + if p.protocol_name == name: + return p + + def test_init(self): + eq_(self.subtype, self.l._subtype) + eq_(self.version, self.l.version) + eq_(self.actor_tag, self.l._actor_tag) + eq_(self.actor_length, self.l._actor_length) + eq_(self.actor_system_priority, self.l.actor_system_priority) + eq_(self.actor_system, self.l.actor_system) + eq_(self.actor_key, self.l.actor_key) + eq_(self.actor_port_priority, self.l.actor_port_priority) + eq_(self.actor_port, self.l.actor_port) + eq_(self.actor_state_activity, self.l.actor_state_activity) + eq_(self.actor_state_timeout, self.l.actor_state_timeout) + eq_(self.actor_state_aggregation, + self.l.actor_state_aggregation) + eq_(self.actor_state_synchronization, + self.l.actor_state_synchronization) + eq_(self.actor_state_collecting, + self.l.actor_state_collecting) + eq_(self.actor_state_distributing, + self.l.actor_state_distributing) + eq_(self.actor_state_defaulted, self.l.actor_state_defaulted) + eq_(self.actor_state_expired, self.l.actor_state_expired) + eq_(self.actor_state, self.l._actor_state) + eq_(self.partner_tag, self.l._partner_tag) + eq_(self.partner_length, self.l._partner_length) + eq_(self.partner_system_priority, + self.l.partner_system_priority) + eq_(self.partner_system, self.l.partner_system) + eq_(self.partner_key, self.l.partner_key) + eq_(self.partner_port_priority, self.l.partner_port_priority) + eq_(self.partner_port, self.l.partner_port) + eq_(self.partner_state_activity, self.l.partner_state_activity) + eq_(self.partner_state_timeout, self.l.partner_state_timeout) + eq_(self.partner_state_aggregation, + self.l.partner_state_aggregation) + eq_(self.partner_state_synchronization, + self.l.partner_state_synchronization) + eq_(self.partner_state_collecting, + self.l.partner_state_collecting) + eq_(self.partner_state_distributing, + self.l.partner_state_distributing) + eq_(self.partner_state_defaulted, + self.l.partner_state_defaulted) + eq_(self.partner_state_expired, self.l.partner_state_expired) + eq_(self.partner_state, self.l._partner_state) + eq_(self.collector_tag, self.l._collector_tag) + eq_(self.collector_length, self.l._collector_length) + eq_(self.collector_max_delay, self.l.collector_max_delay) + eq_(self.terminator_tag, self.l._terminator_tag) + eq_(self.terminator_length, self.l._terminator_length) + + def test_parser(self): + _res = self.l.parser(self.buf) + if type(_res) is tuple: + res = _res[0] + else: + res = _res + + eq_(res._subtype, self.subtype) + eq_(res.version, self.version) + eq_(res._actor_tag, self.actor_tag) + eq_(res._actor_length, self.actor_length) + eq_(res.actor_system_priority, self.actor_system_priority) + eq_(res.actor_system, self.actor_system) + eq_(res.actor_key, self.actor_key) + eq_(res.actor_port_priority, self.actor_port_priority) + eq_(res.actor_port, self.actor_port) + eq_(res.actor_state_activity, self.actor_state_activity) + eq_(res.actor_state_timeout, self.actor_state_timeout) + eq_(res.actor_state_aggregation, self.actor_state_aggregation) + eq_(res.actor_state_synchronization, + self.actor_state_synchronization) + eq_(res.actor_state_collecting, self.actor_state_collecting) + eq_(res.actor_state_distributing, self.actor_state_distributing) + eq_(res.actor_state_defaulted, self.actor_state_defaulted) + eq_(res.actor_state_expired, self.actor_state_expired) + eq_(res._actor_state, self.actor_state) + eq_(res._partner_tag, self.partner_tag) + eq_(res._partner_length, self.partner_length) + eq_(res.partner_system_priority, self.partner_system_priority) + eq_(res.partner_system, self.partner_system) + eq_(res.partner_key, self.partner_key) + eq_(res.partner_port_priority, self.partner_port_priority) + eq_(res.partner_port, self.partner_port) + eq_(res.partner_state_activity, self.partner_state_activity) + eq_(res.partner_state_timeout, self.partner_state_timeout) + eq_(res.partner_state_aggregation, + self.partner_state_aggregation) + eq_(res.partner_state_synchronization, + self.partner_state_synchronization) + eq_(res.partner_state_collecting, self.partner_state_collecting) + eq_(res.partner_state_distributing, + self.partner_state_distributing) + eq_(res.partner_state_defaulted, self.partner_state_defaulted) + eq_(res.partner_state_expired, self.partner_state_expired) + eq_(res._partner_state, self.partner_state) + eq_(res._collector_tag, self.collector_tag) + eq_(res._collector_length, self.collector_length) + eq_(res.collector_max_delay, self.collector_max_delay) + eq_(res._terminator_tag, self.terminator_tag) + eq_(res._terminator_length, self.terminator_length) + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.l.serialize(data, prev) + + offset = 0 + head_res = unpack_from(self.head_fmt, buf, offset) + offset += self.head_len + act_res = unpack_from(self.act_fmt, buf, offset) + offset += self.act_len + prt_res = unpack_from(self.prt_fmt, buf, offset) + offset += self.prt_len + col_res = unpack_from(self.col_fmt, buf, offset) + offset += self.col_len + trm_res = unpack_from(self.trm_fmt, buf, offset) + + eq_(head_res[0], self.subtype) + eq_(head_res[1], self.version) + + eq_(act_res[0], self.actor_tag) + eq_(act_res[1], self.actor_length) + eq_(act_res[2], self.actor_system_priority) + eq_(act_res[3], addrconv.mac.text_to_bin(self.actor_system)) + eq_(act_res[4], self.actor_key) + eq_(act_res[5], self.actor_port_priority) + eq_(act_res[6], self.actor_port) + eq_(act_res[7], self.actor_state) + + eq_(prt_res[0], self.partner_tag) + eq_(prt_res[1], self.partner_length) + eq_(prt_res[2], self.partner_system_priority) + eq_(prt_res[3], addrconv.mac.text_to_bin(self.partner_system)) + eq_(prt_res[4], self.partner_key) + eq_(prt_res[5], self.partner_port_priority) + eq_(prt_res[6], self.partner_port) + eq_(prt_res[7], self.partner_state) + + eq_(col_res[0], self.collector_tag) + eq_(col_res[1], self.collector_length) + eq_(col_res[2], self.collector_max_delay) + + eq_(trm_res[0], self.terminator_tag) + eq_(trm_res[1], self.terminator_length) + + def _build_lacp(self): + ethertype = ether.ETH_TYPE_SLOW + dst = SLOW_PROTOCOL_MULTICAST + e = ethernet(dst, self.actor_system, ethertype) + p = Packet() + + p.add_protocol(e) + p.add_protocol(self.l) + p.serialize() + return p + + def test_build_lacp(self): + p = self._build_lacp() + + e = self.find_protocol(p, "ethernet") + ok_(e) + eq_(e.ethertype, ether.ETH_TYPE_SLOW) + + l = self.find_protocol(p, "lacp") + ok_(l) + + eq_(l._subtype, self.subtype) + eq_(l.version, self.version) + eq_(l._actor_tag, self.actor_tag) + eq_(l._actor_length, self.actor_length) + eq_(l.actor_system_priority, self.actor_system_priority) + eq_(l.actor_system, self.actor_system) + eq_(l.actor_key, self.actor_key) + eq_(l.actor_port_priority, self.actor_port_priority) + eq_(l.actor_port, self.actor_port) + eq_(l.actor_state_activity, self.actor_state_activity) + eq_(l.actor_state_timeout, self.actor_state_timeout) + eq_(l.actor_state_aggregation, self.actor_state_aggregation) + eq_(l.actor_state_synchronization, + self.actor_state_synchronization) + eq_(l.actor_state_collecting, self.actor_state_collecting) + eq_(l.actor_state_distributing, self.actor_state_distributing) + eq_(l.actor_state_defaulted, self.actor_state_defaulted) + eq_(l.actor_state_expired, self.actor_state_expired) + eq_(l._actor_state, self.actor_state) + eq_(l._partner_tag, self.partner_tag) + eq_(l._partner_length, self.partner_length) + eq_(l.partner_system_priority, self.partner_system_priority) + eq_(l.partner_system, self.partner_system) + eq_(l.partner_key, self.partner_key) + eq_(l.partner_port_priority, self.partner_port_priority) + eq_(l.partner_port, self.partner_port) + eq_(l.partner_state_activity, self.partner_state_activity) + eq_(l.partner_state_timeout, self.partner_state_timeout) + eq_(l.partner_state_aggregation, self.partner_state_aggregation) + eq_(l.partner_state_synchronization, + self.partner_state_synchronization) + eq_(l.partner_state_collecting, self.partner_state_collecting) + eq_(l.partner_state_distributing, + self.partner_state_distributing) + eq_(l.partner_state_defaulted, self.partner_state_defaulted) + eq_(l.partner_state_expired, self.partner_state_expired) + eq_(l._partner_state, self.partner_state) + eq_(l._collector_tag, self.collector_tag) + eq_(l._collector_length, self.collector_length) + eq_(l.collector_max_delay, self.collector_max_delay) + eq_(l._terminator_tag, self.terminator_tag) + eq_(l._terminator_length, self.terminator_length) + + @raises(Exception) + def test_malformed_lacp(self): + m_short_buf = self.buf[1:self.length] + slow.parser(m_short_buf) + + @raises(Exception) + def test_invalid_subtype(self): + invalid_lacv = copy.deepcopy(self.l) + invalid_lacv.subtype = 0xff + invalid_buf = invalid_lacv.serialize() + slow.parser(invalid_buf) + + @raises(Exception) + def test_invalid_version(self): + invalid_lacv = copy.deepcopy(self.l) + invalid_lacv.version = 0xff + invalid_buf = invalid_lacv.serialize() + slow.parser(invalid_buf) + + @raises(Exception) + def test_invalid_actor_tag(self): + invalid_lacv = copy.deepcopy(self.l) + invalid_lacv.actor_tag = 0x04 + invalid_buf = invalid_lacv.serialize() + slow.parser(invalid_buf) + + @raises(Exception) + def test_invalid_actor_length(self): + invalid_lacv = copy.deepcopy(self.l) + invalid_lacv.actor_length = 50 + invalid_buf = invalid_lacv.serialize() + slow.parser(invalid_buf) + + @raises(Exception) + def test_invalid_partner_tag(self): + invalid_lacv = copy.deepcopy(self.l) + invalid_lacv.partner_tag = 0x01 + invalid_buf = invalid_lacv.serialize() + slow.parser(invalid_buf) + + @raises(Exception) + def test_invalid_partner_length(self): + invalid_lacv = copy.deepcopy(self.l) + invalid_lacv.partner_length = 0 + invalid_buf = invalid_lacv.serialize() + slow.parser(invalid_buf) + + @raises(Exception) + def test_invalid_collector_tag(self): + invalid_lacv = copy.deepcopy(self.l) + invalid_lacv.collector_tag = 0x00 + invalid_buf = invalid_lacv.serialize() + slow.parser(invalid_buf) + + @raises(Exception) + def test_invalid_collector_length(self): + invalid_lacv = copy.deepcopy(self.l) + invalid_lacv.collector_length = 20 + invalid_buf = invalid_lacv.serialize() + slow.parser(invalid_buf) + + @raises(Exception) + def test_invalid_terminator_tag(self): + invalid_lacv = copy.deepcopy(self.l) + invalid_lacv.terminator_tag = 0x04 + invalid_buf = invalid_lacv.serialize() + slow.parser(invalid_buf) + + @raises(Exception) + def test_invalid_terminator_length(self): + invalid_lacv = copy.deepcopy(self.l) + invalid_lacv.terminator_length = self.trm_len + invalid_buf = invalid_lacv.serialize() + slow.parser(invalid_buf) + + @raises(Exception) + def test_invalid_actor_state_activity(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + 2, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_actor_state_timeout(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + 2, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_actor_state_aggregation(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + 2, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_actor_state_synchronization(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + 2, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_actor_state_collecting(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + 2, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_actor_state_distributing(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + 2, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_actor_state_defaulted(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + 2, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_actor_state_expired(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + 2, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_partner_state_activity(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + -1, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_partner_state_timeout(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + -1, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_partner_state_aggregation(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + -1, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_partner_state_synchronization(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + -1, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_partner_state_collecting(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + -1, + self.partner_state_distributing, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_partner_state_distributing(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + -1, + self.partner_state_defaulted, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_partner_state_defaulted(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + -1, + self.partner_state_expired, + self.collector_max_delay) + l.serialize() + + @raises(Exception) + def test_invalid_partner_state_expired(self): + l = lacp(self.version, + self.actor_system_priority, + self.actor_system, + self.actor_key, + self.actor_port_priority, + self.actor_port, + self.actor_state_activity, + self.actor_state_timeout, + self.actor_state_aggregation, + self.actor_state_synchronization, + self.actor_state_collecting, + self.actor_state_distributing, + self.actor_state_defaulted, + self.actor_state_expired, + self.partner_system_priority, + self.partner_system, + self.partner_key, + self.partner_port_priority, + self.partner_port, + self.partner_state_activity, + self.partner_state_timeout, + self.partner_state_aggregation, + self.partner_state_synchronization, + self.partner_state_collecting, + self.partner_state_distributing, + self.partner_state_defaulted, + -1, + self.collector_max_delay) + l.serialize() + + def test_json(self): + jsondict = self.l.to_jsondict() + l = lacp.from_jsondict(jsondict['lacp']) + eq_(str(self.l), str(l)) diff --git a/tests/unit/packet/test_tcp.py b/tests/unit/packet/test_tcp.py new file mode 100644 index 00000000..7224df0e --- /dev/null +++ b/tests/unit/packet/test_tcp.py @@ -0,0 +1,267 @@ +# Copyright (C) 2012-2015 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import six +import struct +from struct import * +from nose.tools import * +from ryu.ofproto import inet +from ryu.lib.packet import tcp +from ryu.lib.packet.ipv4 import ipv4 +from ryu.lib.packet import packet_utils +from ryu.lib import addrconv + + +LOG = logging.getLogger('test_tcp') + + +class Test_tcp(unittest.TestCase): + """ Test case for tcp + """ + src_port = 6431 + dst_port = 8080 + seq = 5 + ack = 1 + offset = 6 + bits = 0b101010 + window_size = 2048 + csum = 12345 + urgent = 128 + option = b'\x01\x02\x03\x04' + + t = tcp.tcp(src_port, dst_port, seq, ack, offset, bits, + window_size, csum, urgent, option) + + buf = pack(tcp.tcp._PACK_STR, src_port, dst_port, seq, ack, + offset << 4, bits, window_size, csum, urgent) + buf += option + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.src_port, self.t.src_port) + eq_(self.dst_port, self.t.dst_port) + eq_(self.seq, self.t.seq) + eq_(self.ack, self.t.ack) + eq_(self.offset, self.t.offset) + eq_(self.bits, self.t.bits) + eq_(self.window_size, self.t.window_size) + eq_(self.csum, self.t.csum) + eq_(self.urgent, self.t.urgent) + eq_(self.option, self.t.option) + + def test_parser(self): + r1, r2, _ = self.t.parser(self.buf) + + eq_(self.src_port, r1.src_port) + eq_(self.dst_port, r1.dst_port) + eq_(self.seq, r1.seq) + eq_(self.ack, r1.ack) + eq_(self.offset, r1.offset) + eq_(self.bits, r1.bits) + eq_(self.window_size, r1.window_size) + eq_(self.csum, r1.csum) + eq_(self.urgent, r1.urgent) + eq_(self.option, r1.option) + eq_(None, r2) + + def test_serialize(self): + offset = 5 + csum = 0 + + src_ip = '192.168.10.1' + dst_ip = '192.168.100.1' + prev = ipv4(4, 5, 0, 0, 0, 0, 0, 64, + inet.IPPROTO_TCP, 0, src_ip, dst_ip) + + t = tcp.tcp(self.src_port, self.dst_port, self.seq, self.ack, + offset, self.bits, self.window_size, csum, self.urgent) + buf = t.serialize(bytearray(), prev) + res = struct.unpack(tcp.tcp._PACK_STR, six.binary_type(buf)) + + eq_(res[0], self.src_port) + eq_(res[1], self.dst_port) + eq_(res[2], self.seq) + eq_(res[3], self.ack) + eq_(res[4], offset << 4) + eq_(res[5], self.bits) + eq_(res[6], self.window_size) + eq_(res[8], self.urgent) + + # test __len__ + # offset indicates the number of 32 bit (= 4 bytes) + # words in the TCP Header. + # So, we compare len(tcp) with offset * 4, here. + eq_(offset * 4, len(t)) + + # checksum + ph = struct.pack('!4s4sBBH', + addrconv.ipv4.text_to_bin(src_ip), + addrconv.ipv4.text_to_bin(dst_ip), 0, 6, offset * 4) + d = ph + buf + s = packet_utils.checksum(d) + eq_(0, s) + + def test_serialize_option(self): + # prepare test data + offset = 0 + csum = 0 + option = [ + tcp.TCPOptionMaximumSegmentSize(max_seg_size=1460), + tcp.TCPOptionSACKPermitted(), + tcp.TCPOptionTimestamps(ts_val=287454020, ts_ecr=1432778632), + tcp.TCPOptionNoOperation(), + tcp.TCPOptionWindowScale(shift_cnt=9), + ] + option_buf = ( + b'\x02\x04\x05\xb4' + b'\x04\x02' + b'\x08\x0a\x11\x22\x33\x44\x55\x66\x77\x88' + b'\x01' + b'\x03\x03\x09' + ) + prev = ipv4(4, 5, 0, 0, 0, 0, 0, 64, + inet.IPPROTO_TCP, 0, '192.168.10.1', '192.168.100.1') + + # test serializer + t = tcp.tcp(self.src_port, self.dst_port, self.seq, self.ack, + offset, self.bits, self.window_size, csum, self.urgent, + option) + buf = t.serialize(bytearray(), prev) + r_option_buf = buf[tcp.tcp._MIN_LEN:tcp.tcp._MIN_LEN + len(option_buf)] + eq_(option_buf, r_option_buf) + + # test parser + (r_tcp, _, _) = tcp.tcp.parser(buf) + eq_(str(option), str(r_tcp.option)) + + @raises(Exception) + def test_malformed_tcp(self): + m_short_buf = self.buf[1:tcp.tcp._MIN_LEN] + tcp.tcp.parser(m_short_buf) + + def test_default_args(self): + prev = ipv4(proto=inet.IPPROTO_TCP) + t = tcp.tcp() + buf = t.serialize(bytearray(), prev) + res = struct.unpack(tcp.tcp._PACK_STR, buf) + + eq_(res[0], 1) + eq_(res[1], 1) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 5 << 4) + eq_(res[5], 0) + eq_(res[6], 0) + eq_(res[8], 0) + + # with option, without offset + t = tcp.tcp(option=[tcp.TCPOptionMaximumSegmentSize(1460)]) + buf = t.serialize(bytearray(), prev) + res = struct.unpack(tcp.tcp._PACK_STR + '4s', buf) + + eq_(res[0], 1) + eq_(res[1], 1) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 6 << 4) + eq_(res[5], 0) + eq_(res[6], 0) + eq_(res[8], 0) + eq_(res[9], b'\x02\x04\x05\xb4') + + # with option, with long offset + t = tcp.tcp(offset=7, option=[tcp.TCPOptionWindowScale(shift_cnt=9)]) + buf = t.serialize(bytearray(), prev) + res = struct.unpack(tcp.tcp._PACK_STR + '8s', buf) + + eq_(res[0], 1) + eq_(res[1], 1) + eq_(res[2], 0) + eq_(res[3], 0) + eq_(res[4], 7 << 4) + eq_(res[5], 0) + eq_(res[6], 0) + eq_(res[8], 0) + eq_(res[9], b'\x03\x03\x09\x00\x00\x00\x00\x00') + + def test_json(self): + jsondict = self.t.to_jsondict() + t = tcp.tcp.from_jsondict(jsondict['tcp']) + eq_(str(self.t), str(t)) + + +class Test_TCPOption(unittest.TestCase): + # prepare test data + input_options = [ + tcp.TCPOptionEndOfOptionList(), + tcp.TCPOptionNoOperation(), + tcp.TCPOptionMaximumSegmentSize(max_seg_size=1460), + tcp.TCPOptionWindowScale(shift_cnt=9), + tcp.TCPOptionSACKPermitted(), + tcp.TCPOptionSACK(blocks=[(1, 2), (3, 4)], length=18), + tcp.TCPOptionTimestamps(ts_val=287454020, ts_ecr=1432778632), + tcp.TCPOptionUserTimeout(granularity=1, user_timeout=564), + tcp.TCPOptionAuthentication( + key_id=1, r_next_key_id=2, + mac=b'abcdefghijkl', length=16), + tcp.TCPOptionUnknown(value=b'foobar', kind=255, length=8), + tcp.TCPOptionUnknown(value=b'', kind=255, length=2), + ] + input_buf = ( + b'\x00' # End of Option List + b'\x01' # No-Operation + b'\x02\x04\x05\xb4' # Maximum Segment Size + b'\x03\x03\x09' # Window Scale + b'\x04\x02' # SACK Permitted + b'\x05\x12' # SACK + b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04' + b'\x08\x0a' # Timestamps + b'\x11\x22\x33\x44\x55\x66\x77\x88' + b'\x1c\x04\x82\x34' # User Timeout Option + b'\x1d\x10\x01\x02' # TCP Authentication Option (TCP-AO) + b'abcdefghijkl' + b'\xff\x08' # Unknown with body + b'foobar' + b'\xff\x02' # Unknown + ) + + def test_serialize(self): + output_buf = bytearray() + for option in self.input_options: + output_buf += option.serialize() + eq_(self.input_buf, output_buf) + + def test_parser(self): + buf = self.input_buf + output_options = [] + while buf: + opt, buf = tcp.TCPOption.parser(buf) + output_options.append(opt) + eq_(str(self.input_options), str(output_options)) + + def test_json(self): + for option in self.input_options: + json_dict = option.to_jsondict()[option.__class__.__name__] + output_option = option.__class__.from_jsondict(json_dict) + eq_(str(option), str(output_option)) diff --git a/tests/unit/packet/test_udp.py b/tests/unit/packet/test_udp.py new file mode 100644 index 00000000..0d7d0aa9 --- /dev/null +++ b/tests/unit/packet/test_udp.py @@ -0,0 +1,110 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import struct +from struct import * +from nose.tools import * +from ryu.ofproto import ether, inet +from ryu.lib.packet.packet import Packet +from ryu.lib.packet.udp import udp +from ryu.lib.packet.ipv4 import ipv4 +from ryu.lib.packet import packet_utils +from ryu.lib import addrconv + + +LOG = logging.getLogger('test_udp') + + +class Test_udp(unittest.TestCase): + """ Test case for udp + """ + src_port = 6431 + dst_port = 8080 + total_length = 65507 + csum = 12345 + u = udp(src_port, dst_port, total_length, csum) + buf = pack(udp._PACK_STR, src_port, dst_port, total_length, csum) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.src_port, self.u.src_port) + eq_(self.dst_port, self.u.dst_port) + eq_(self.total_length, self.u.total_length) + eq_(self.csum, self.u.csum) + + def test_parser(self): + r1, r2, _ = self.u.parser(self.buf) + + eq_(self.src_port, r1.src_port) + eq_(self.dst_port, r1.dst_port) + eq_(self.total_length, r1.total_length) + eq_(self.csum, r1.csum) + eq_(None, r2) + + def test_serialize(self): + src_port = 6431 + dst_port = 8080 + total_length = 0 + csum = 0 + + src_ip = '192.168.10.1' + dst_ip = '192.168.100.1' + prev = ipv4(4, 5, 0, 0, 0, 0, 0, 64, + inet.IPPROTO_UDP, 0, src_ip, dst_ip) + + u = udp(src_port, dst_port, total_length, csum) + buf = u.serialize(bytearray(), prev) + res = struct.unpack(udp._PACK_STR, buf) + + eq_(res[0], src_port) + eq_(res[1], dst_port) + eq_(res[2], struct.calcsize(udp._PACK_STR)) + + # checksum + ph = struct.pack('!4s4sBBH', + addrconv.ipv4.text_to_bin(src_ip), + addrconv.ipv4.text_to_bin(dst_ip), 0, 17, res[2]) + d = ph + buf + bytearray() + s = packet_utils.checksum(d) + eq_(0, s) + + @raises(Exception) + def test_malformed_udp(self): + m_short_buf = self.buf[1:udp._MIN_LEN] + udp.parser(m_short_buf) + + def test_default_args(self): + prev = ipv4(proto=inet.IPPROTO_UDP) + u = udp() + buf = u.serialize(bytearray(), prev) + res = struct.unpack(udp._PACK_STR, buf) + + eq_(res[0], 1) + eq_(res[1], 1) + eq_(res[2], udp._MIN_LEN) + + def test_json(self): + jsondict = self.u.to_jsondict() + u = udp.from_jsondict(jsondict['udp']) + eq_(str(self.u), str(u)) diff --git a/tests/unit/packet/test_vlan.py b/tests/unit/packet/test_vlan.py new file mode 100644 index 00000000..b8e3a048 --- /dev/null +++ b/tests/unit/packet/test_vlan.py @@ -0,0 +1,265 @@ +# Copyright (C) 2012 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +import logging +import struct +from struct import * +from nose.tools import * +from ryu.ofproto import ether, inet +from ryu.lib.packet.ethernet import ethernet +from ryu.lib.packet.packet import Packet +from ryu.lib.packet.ipv4 import ipv4 +from ryu.lib.packet.vlan import vlan +from ryu.lib.packet.vlan import svlan + + +LOG = logging.getLogger('test_vlan') + + +class Test_vlan(unittest.TestCase): + """ Test case for vlan + """ + + pcp = 0 + cfi = 0 + vid = 32 + tci = pcp << 15 | cfi << 12 | vid + ethertype = ether.ETH_TYPE_IP + + buf = pack(vlan._PACK_STR, tci, ethertype) + + v = vlan(pcp, cfi, vid, ethertype) + + def setUp(self): + pass + + def tearDown(self): + pass + + def find_protocol(self, pkt, name): + for p in pkt.protocols: + if p.protocol_name == name: + return p + + def test_init(self): + eq_(self.pcp, self.v.pcp) + eq_(self.cfi, self.v.cfi) + eq_(self.vid, self.v.vid) + eq_(self.ethertype, self.v.ethertype) + + def test_parser(self): + res, ptype, _ = self.v.parser(self.buf) + + eq_(res.pcp, self.pcp) + eq_(res.cfi, self.cfi) + eq_(res.vid, self.vid) + eq_(res.ethertype, self.ethertype) + eq_(ptype, ipv4) + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.v.serialize(data, prev) + + fmt = vlan._PACK_STR + res = struct.unpack(fmt, buf) + + eq_(res[0], self.tci) + eq_(res[1], self.ethertype) + + def _build_vlan(self): + src_mac = '00:07:0d:af:f4:54' + dst_mac = '00:00:00:00:00:00' + ethertype = ether.ETH_TYPE_8021Q + e = ethernet(dst_mac, src_mac, ethertype) + + version = 4 + header_length = 20 + tos = 0 + total_length = 24 + identification = 0x8a5d + flags = 0 + offset = 1480 + ttl = 64 + proto = inet.IPPROTO_ICMP + csum = 0xa7f2 + src = '131.151.32.21' + dst = '131.151.32.129' + option = b'TEST' + ip = ipv4(version, header_length, tos, total_length, identification, + flags, offset, ttl, proto, csum, src, dst, option) + + p = Packet() + + p.add_protocol(e) + p.add_protocol(self.v) + p.add_protocol(ip) + p.serialize() + + return p + + def test_build_vlan(self): + p = self._build_vlan() + + e = self.find_protocol(p, "ethernet") + ok_(e) + eq_(e.ethertype, ether.ETH_TYPE_8021Q) + + v = self.find_protocol(p, "vlan") + ok_(v) + eq_(v.ethertype, ether.ETH_TYPE_IP) + + ip = self.find_protocol(p, "ipv4") + ok_(ip) + + eq_(v.pcp, self.pcp) + eq_(v.cfi, self.cfi) + eq_(v.vid, self.vid) + eq_(v.ethertype, self.ethertype) + + @raises(Exception) + def test_malformed_vlan(self): + m_short_buf = self.buf[1:vlan._MIN_LEN] + vlan.parser(m_short_buf) + + def test_json(self): + jsondict = self.v.to_jsondict() + v = vlan.from_jsondict(jsondict['vlan']) + eq_(str(self.v), str(v)) + + +class Test_svlan(unittest.TestCase): + + pcp = 0 + cfi = 0 + vid = 32 + tci = pcp << 15 | cfi << 12 | vid + ethertype = ether.ETH_TYPE_8021Q + + buf = pack(svlan._PACK_STR, tci, ethertype) + + sv = svlan(pcp, cfi, vid, ethertype) + + def setUp(self): + pass + + def tearDown(self): + pass + + def find_protocol(self, pkt, name): + for p in pkt.protocols: + if p.protocol_name == name: + return p + + def test_init(self): + eq_(self.pcp, self.sv.pcp) + eq_(self.cfi, self.sv.cfi) + eq_(self.vid, self.sv.vid) + eq_(self.ethertype, self.sv.ethertype) + + def test_parser(self): + res, ptype, _ = self.sv.parser(self.buf) + + eq_(res.pcp, self.pcp) + eq_(res.cfi, self.cfi) + eq_(res.vid, self.vid) + eq_(res.ethertype, self.ethertype) + eq_(ptype, vlan) + + def test_serialize(self): + data = bytearray() + prev = None + buf = self.sv.serialize(data, prev) + + fmt = svlan._PACK_STR + res = struct.unpack(fmt, buf) + + eq_(res[0], self.tci) + eq_(res[1], self.ethertype) + + def _build_svlan(self): + src_mac = '00:07:0d:af:f4:54' + dst_mac = '00:00:00:00:00:00' + ethertype = ether.ETH_TYPE_8021AD + e = ethernet(dst_mac, src_mac, ethertype) + + pcp = 0 + cfi = 0 + vid = 32 + tci = pcp << 15 | cfi << 12 | vid + ethertype = ether.ETH_TYPE_IP + v = vlan(pcp, cfi, vid, ethertype) + + version = 4 + header_length = 20 + tos = 0 + total_length = 24 + identification = 0x8a5d + flags = 0 + offset = 1480 + ttl = 64 + proto = inet.IPPROTO_ICMP + csum = 0xa7f2 + src = '131.151.32.21' + dst = '131.151.32.129' + option = b'TEST' + ip = ipv4(version, header_length, tos, total_length, identification, + flags, offset, ttl, proto, csum, src, dst, option) + + p = Packet() + + p.add_protocol(e) + p.add_protocol(self.sv) + p.add_protocol(v) + p.add_protocol(ip) + p.serialize() + + return p + + def test_build_svlan(self): + p = self._build_svlan() + + e = self.find_protocol(p, "ethernet") + ok_(e) + eq_(e.ethertype, ether.ETH_TYPE_8021AD) + + sv = self.find_protocol(p, "svlan") + ok_(sv) + eq_(sv.ethertype, ether.ETH_TYPE_8021Q) + + v = self.find_protocol(p, "vlan") + ok_(v) + eq_(v.ethertype, ether.ETH_TYPE_IP) + + ip = self.find_protocol(p, "ipv4") + ok_(ip) + + eq_(sv.pcp, self.pcp) + eq_(sv.cfi, self.cfi) + eq_(sv.vid, self.vid) + eq_(sv.ethertype, self.ethertype) + + @raises(Exception) + def test_malformed_svlan(self): + m_short_buf = self.buf[1:svlan._MIN_LEN] + svlan.parser(m_short_buf) + + def test_json(self): + jsondict = self.sv.to_jsondict() + sv = svlan.from_jsondict(jsondict['svlan']) + eq_(str(self.sv), str(sv)) diff --git a/tests/unit/packet/test_vrrp.py b/tests/unit/packet/test_vrrp.py new file mode 100644 index 00000000..71c52500 --- /dev/null +++ b/tests/unit/packet/test_vrrp.py @@ -0,0 +1,496 @@ +# Copyright (C) 2013 Nippon Telegraph and Telephone Corporation. +# Copyright (C) 2013 Isaku Yamahata +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +from __future__ import print_function + +import unittest +import logging +import six +import struct +import inspect + +from nose.tools import eq_, ok_ +from nose.tools import raises + +from ryu.ofproto import inet +from ryu.lib.packet import ipv4 +from ryu.lib.packet import ipv6 +from ryu.lib.packet import packet +from ryu.lib.packet import packet_utils +from ryu.lib.packet import vrrp +from ryu.lib import addrconv + + +LOG = logging.getLogger(__name__) + + +class Test_vrrpv2(unittest.TestCase): + """ Test case for vrrp v2 + """ + version = vrrp.VRRP_VERSION_V2 + type_ = vrrp.VRRP_TYPE_ADVERTISEMENT + vrid = 128 + priority = 100 + count_ip = 1 + auth_type = vrrp.VRRP_AUTH_NO_AUTH + max_adver_int = 100 + checksum = 0 + ip_address = '192.168.0.1' + auth_data = (0, 0) + vrrpv2 = vrrp.vrrpv2.create(type_, vrid, priority, max_adver_int, + [ip_address]) + buf = struct.pack(vrrp.vrrpv2._PACK_STR + '4sII', + vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V2, type_), + vrid, priority, count_ip, + auth_type, max_adver_int, checksum, + addrconv.ipv4.text_to_bin(ip_address), + auth_data[0], auth_data[1]) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.type_, self.vrrpv2.type) + eq_(self.vrid, self.vrrpv2.vrid) + eq_(self.priority, self.vrrpv2.priority) + eq_(self.count_ip, self.vrrpv2.count_ip) + eq_(self.auth_type, self.vrrpv2.auth_type) + eq_(1, len(self.vrrpv2.ip_addresses)) + eq_(self.ip_address, self.vrrpv2.ip_addresses[0]) + eq_(self.auth_data, self.vrrpv2.auth_data) + + def test_parser(self): + vrrpv2, _cls, _ = self.vrrpv2.parser(self.buf) + + eq_(self.version, vrrpv2.version) + eq_(self.type_, vrrpv2.type) + eq_(self.vrid, vrrpv2.vrid) + eq_(self.priority, vrrpv2.priority) + eq_(self.count_ip, vrrpv2.count_ip) + eq_(self.auth_type, vrrpv2.auth_type) + eq_(self.max_adver_int, vrrpv2.max_adver_int) + eq_(self.checksum, vrrpv2.checksum) + eq_(1, len(vrrpv2.ip_addresses)) + eq_(str, type(vrrpv2.ip_addresses[0])) + eq_(self.ip_address, vrrpv2.ip_addresses[0]) + eq_(self.auth_data, vrrpv2.auth_data) + + def test_serialize(self): + src_ip = '192.168.0.1' + dst_ip = vrrp.VRRP_IPV4_DST_ADDRESS + prev = ipv4.ipv4(4, 5, 0, 0, 0, 0, 0, vrrp.VRRP_IPV4_TTL, + inet.IPPROTO_VRRP, 0, src_ip, dst_ip) + + type_ = vrrp.VRRP_TYPE_ADVERTISEMENT + vrid = 5 + priority = 10 + max_adver_int = 30 + ip_address = '192.168.0.2' + ip_addresses = [ip_address] + + vrrp_ = vrrp.vrrpv2.create( + type_, vrid, priority, max_adver_int, ip_addresses) + + buf = vrrp_.serialize(bytearray(), prev) + pack_str = vrrp.vrrpv2._PACK_STR + '4sII' + pack_len = struct.calcsize(pack_str) + res = struct.unpack(pack_str, six.binary_type(buf)) + eq_(res[0], vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V2, type_)) + eq_(res[1], vrid) + eq_(res[2], priority) + eq_(res[3], len(ip_addresses)) + eq_(res[4], vrrp.VRRP_AUTH_NO_AUTH) + eq_(res[5], max_adver_int) + # res[6] is checksum + eq_(res[7], addrconv.ipv4.text_to_bin(ip_address)) + eq_(res[8], 0) + eq_(res[9], 0) + eq_(len(buf), pack_len) + + # checksum + s = packet_utils.checksum(buf) + eq_(0, s) + + @raises(Exception) + def test_malformed_vrrpv2(self): + m_short_buf = self.buf[1:vrrp.vrrpv2._MIN_LEN] + vrrp.vrrp.parser(m_short_buf) + + def test_create_packet(self): + primary_ip = '192.168.0.2' + p0 = self.vrrpv2.create_packet(primary_ip) + p0.serialize() + p1 = packet.Packet(six.binary_type(p0.data)) + p1.serialize() + eq_(p0.data, p1.data) + + def _test_is_valid(self, type_=None, vrid=None, priority=None, + max_adver_int=None): + if type_ is None: + type_ = self.type_ + if vrid is None: + vrid = self.vrid + if priority is None: + priority = self.priority + if max_adver_int is None: + max_adver_int = self.max_adver_int + + vrrp_ = vrrp.vrrpv2.create(type_, vrid, priority, max_adver_int, + [self.ip_address]) + return vrrp_.is_valid() + + def test_is_valid_ok(self): + ok_(self._test_is_valid()) + + def test_is_valid_ng_type(self): + ok_(not self._test_is_valid(type_=15)) + + def test_is_valid_ng_vrid_min(self): + vrid = vrrp.VRRP_VRID_MIN - 1 + ok_(not self._test_is_valid(vrid=vrid)) + + def test_is_valid_ng_vrid_max(self): + vrid = vrrp.VRRP_VRID_MAX + 1 + ok_(not self._test_is_valid(vrid=vrid)) + + def test_is_valid_ng_priority_min(self): + priority = vrrp.VRRP_PRIORITY_MIN - 1 + ok_(not self._test_is_valid(priority=priority)) + + def test_is_valid_ng_priority_max(self): + priority = vrrp.VRRP_PRIORITY_MAX + 1 + ok_(not self._test_is_valid(priority=priority)) + + def test_is_valid_ng_adver_min(self): + max_adver_int = vrrp.VRRP_V2_MAX_ADVER_INT_MIN - 1 + ok_(not self._test_is_valid(max_adver_int=max_adver_int)) + + def test_is_valid_ng_adver_max(self): + max_adver_int = vrrp.VRRP_V2_MAX_ADVER_INT_MAX + 1 + ok_(not self._test_is_valid(max_adver_int=max_adver_int)) + + def test_to_string(self): + vrrpv2_values = {'version': self.version, + 'type': self.type_, + 'vrid': self.vrid, + 'priority': self.priority, + 'count_ip': self.count_ip, + 'max_adver_int': self.max_adver_int, + 'checksum': self.vrrpv2.checksum, + 'ip_addresses': [self.ip_address], + 'auth_type': self.auth_type, + 'auth_data': self.auth_data, + 'identification': self.vrrpv2.identification} + _vrrpv2_str = ','.join(['%s=%s' % (k, repr(vrrpv2_values[k])) + for k, v in inspect.getmembers(self.vrrpv2) + if k in vrrpv2_values]) + vrrpv2_str = '%s(%s)' % (vrrp.vrrpv2.__name__, _vrrpv2_str) + + eq_(str(self.vrrpv2), vrrpv2_str) + eq_(repr(self.vrrpv2), vrrpv2_str) + + +class Test_vrrpv3_ipv4(unittest.TestCase): + """ Test case for vrrp v3 IPv4 + """ + version = vrrp.VRRP_VERSION_V3 + type_ = vrrp.VRRP_TYPE_ADVERTISEMENT + vrid = 128 + priority = 99 + count_ip = 1 + max_adver_int = 111 + checksum = 0 + ip_address = '192.168.0.1' + vrrpv3 = vrrp.vrrpv3.create(type_, vrid, priority, max_adver_int, + [ip_address]) + buf = struct.pack(vrrp.vrrpv3._PACK_STR + '4s', + vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V3, type_), + vrid, priority, count_ip, + max_adver_int, checksum, + addrconv.ipv4.text_to_bin(ip_address)) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.type_, self.vrrpv3.type) + eq_(self.vrid, self.vrrpv3.vrid) + eq_(self.priority, self.vrrpv3.priority) + eq_(self.count_ip, self.vrrpv3.count_ip) + eq_(1, len(self.vrrpv3.ip_addresses)) + eq_(self.ip_address, self.vrrpv3.ip_addresses[0]) + + def test_parser(self): + vrrpv3, _cls, _ = self.vrrpv3.parser(self.buf) + + eq_(self.version, vrrpv3.version) + eq_(self.type_, vrrpv3.type) + eq_(self.vrid, vrrpv3.vrid) + eq_(self.priority, vrrpv3.priority) + eq_(self.count_ip, vrrpv3.count_ip) + eq_(self.max_adver_int, vrrpv3.max_adver_int) + eq_(self.checksum, vrrpv3.checksum) + eq_(1, len(vrrpv3.ip_addresses)) + eq_(str, type(vrrpv3.ip_addresses[0])) + eq_(self.ip_address, vrrpv3.ip_addresses[0]) + + def test_serialize(self): + src_ip = '192.168.0.1' + dst_ip = vrrp.VRRP_IPV4_DST_ADDRESS + prev = ipv4.ipv4(4, 5, 0, 0, 0, 0, 0, vrrp.VRRP_IPV4_TTL, + inet.IPPROTO_VRRP, 0, src_ip, dst_ip) + + type_ = vrrp.VRRP_TYPE_ADVERTISEMENT + vrid = 5 + priority = 10 + max_adver_int = 30 + ip_address = '192.168.0.2' + ip_addresses = [ip_address] + + vrrp_ = vrrp.vrrpv3.create( + type_, vrid, priority, max_adver_int, ip_addresses) + + buf = vrrp_.serialize(bytearray(), prev) + print(len(buf), type(buf), buf) + pack_str = vrrp.vrrpv3._PACK_STR + '4s' + pack_len = struct.calcsize(pack_str) + res = struct.unpack(pack_str, six.binary_type(buf)) + eq_(res[0], vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V3, type_)) + eq_(res[1], vrid) + eq_(res[2], priority) + eq_(res[3], len(ip_addresses)) + eq_(res[4], max_adver_int) + # res[5] is checksum + eq_(res[6], addrconv.ipv4.text_to_bin(ip_address)) + eq_(len(buf), pack_len) + print(res) + + # checksum + ph = struct.pack('!4s4sxBH', + addrconv.ipv4.text_to_bin(src_ip), + addrconv.ipv4.text_to_bin(dst_ip), + inet.IPPROTO_VRRP, pack_len) + s = packet_utils.checksum(ph + buf) + eq_(0, s) + + @raises(Exception) + def test_malformed_vrrpv3(self): + m_short_buf = self.buf[1:vrrp.vrrpv3._MIN_LEN] + vrrp.vrrp.parser(m_short_buf) + + def test_create_packet(self): + primary_ip = '192.168.0.2' + p0 = self.vrrpv3.create_packet(primary_ip) + p0.serialize() + p1 = packet.Packet(six.binary_type(p0.data)) + p1.serialize() + eq_(p0.data, p1.data) + + def _test_is_valid(self, type_=None, vrid=None, priority=None, + max_adver_int=None): + if type_ is None: + type_ = self.type_ + if vrid is None: + vrid = self.vrid + if priority is None: + priority = self.priority + if max_adver_int is None: + max_adver_int = self.max_adver_int + + vrrp_ = vrrp.vrrpv3.create(type_, vrid, priority, max_adver_int, + [self.ip_address]) + return vrrp_.is_valid() + + def test_is_valid_ok(self): + ok_(self._test_is_valid()) + + def test_is_valid_ng_type(self): + ok_(not self._test_is_valid(type_=15)) + + def test_is_valid_ng_vrid_min(self): + vrid = vrrp.VRRP_VRID_MIN - 1 + ok_(not self._test_is_valid(vrid=vrid)) + + def test_is_valid_ng_vrid_max(self): + vrid = vrrp.VRRP_VRID_MAX + 1 + ok_(not self._test_is_valid(vrid=vrid)) + + def test_is_valid_ng_priority_min(self): + priority = vrrp.VRRP_PRIORITY_MIN - 1 + ok_(not self._test_is_valid(priority=priority)) + + def test_is_valid_ng_priority_max(self): + priority = vrrp.VRRP_PRIORITY_MAX + 1 + ok_(not self._test_is_valid(priority=priority)) + + def test_is_valid_ng_adver_min(self): + max_adver_int = vrrp.VRRP_V3_MAX_ADVER_INT_MIN - 1 + ok_(not self._test_is_valid(max_adver_int=max_adver_int)) + + def test_is_valid_ng_adver_max(self): + max_adver_int = vrrp.VRRP_V3_MAX_ADVER_INT_MAX + 1 + ok_(not self._test_is_valid(max_adver_int=max_adver_int)) + + def test_to_string(self): + vrrpv3_values = {'version': self.version, + 'type': self.type_, + 'vrid': self.vrid, + 'priority': self.priority, + 'count_ip': self.count_ip, + 'max_adver_int': self.max_adver_int, + 'checksum': self.vrrpv3.checksum, + 'ip_addresses': [self.ip_address], + 'auth_type': None, + 'auth_data': None, + 'identification': self.vrrpv3.identification} + _vrrpv3_str = ','.join(['%s=%s' % (k, repr(vrrpv3_values[k])) + for k, v in inspect.getmembers(self.vrrpv3) + if k in vrrpv3_values]) + vrrpv3_str = '%s(%s)' % (vrrp.vrrpv3.__name__, _vrrpv3_str) + + eq_(str(self.vrrpv3), vrrpv3_str) + eq_(repr(self.vrrpv3), vrrpv3_str) + + +class Test_vrrpv3_ipv6(unittest.TestCase): + """ Test case for vrrp v3 IPv6 + """ + version = vrrp.VRRP_VERSION_V3 + type_ = vrrp.VRRP_TYPE_ADVERTISEMENT + vrid = 128 + priority = 99 + count_ip = 1 + max_adver_int = 111 + checksum = 0 + ip_address = '2001:db8:2000::1' + vrrpv3 = vrrp.vrrpv3.create(type_, vrid, priority, max_adver_int, + [ip_address]) + buf = struct.pack(vrrp.vrrpv3._PACK_STR + '16s', + vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V3, type_), + vrid, priority, count_ip, + max_adver_int, checksum, + addrconv.ipv6.text_to_bin(ip_address)) + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_init(self): + eq_(self.type_, self.vrrpv3.type) + eq_(self.vrid, self.vrrpv3.vrid) + eq_(self.priority, self.vrrpv3.priority) + eq_(self.count_ip, self.vrrpv3.count_ip) + eq_(1, len(self.vrrpv3.ip_addresses)) + eq_(self.ip_address, self.vrrpv3.ip_addresses[0]) + + def test_parser(self): + vrrpv3, _cls, _ = self.vrrpv3.parser(self.buf) + + eq_(self.version, vrrpv3.version) + eq_(self.type_, vrrpv3.type) + eq_(self.vrid, vrrpv3.vrid) + eq_(self.priority, vrrpv3.priority) + eq_(self.count_ip, vrrpv3.count_ip) + eq_(self.max_adver_int, vrrpv3.max_adver_int) + eq_(self.checksum, vrrpv3.checksum) + eq_(1, len(vrrpv3.ip_addresses)) + eq_(str, type(vrrpv3.ip_addresses[0])) + eq_(self.ip_address, vrrpv3.ip_addresses[0]) + + def test_serialize(self): + src_ip = '2001:db8:2000::1' + dst_ip = vrrp.VRRP_IPV6_DST_ADDRESS + prev = ipv6.ipv6(6, 0, 0, 0, inet.IPPROTO_VRRP, + vrrp.VRRP_IPV6_HOP_LIMIT, src_ip, dst_ip) + + type_ = vrrp.VRRP_TYPE_ADVERTISEMENT + vrid = 5 + priority = 10 + max_adver_int = 30 + ip_address = '2001:db8:2000::2' + ip_addresses = [ip_address] + + vrrp_ = vrrp.vrrpv3.create( + type_, vrid, priority, max_adver_int, ip_addresses) + + buf = vrrp_.serialize(bytearray(), prev) + print(len(buf), type(buf), buf) + pack_str = vrrp.vrrpv3._PACK_STR + '16s' + pack_len = struct.calcsize(pack_str) + res = struct.unpack(pack_str, six.binary_type(buf)) + eq_(res[0], vrrp.vrrp_to_version_type(vrrp.VRRP_VERSION_V3, type_)) + eq_(res[1], vrid) + eq_(res[2], priority) + eq_(res[3], len(ip_addresses)) + eq_(res[4], max_adver_int) + # res[5] is checksum + eq_(res[6], addrconv.ipv6.text_to_bin(ip_address)) + eq_(len(buf), pack_len) + print(res) + + # checksum + ph = struct.pack('!16s16sI3xB', + addrconv.ipv6.text_to_bin(src_ip), + addrconv.ipv6.text_to_bin(dst_ip), + pack_len, inet.IPPROTO_VRRP) + s = packet_utils.checksum(ph + buf) + eq_(0, s) + + @raises(Exception) + def test_malformed_vrrpv3(self): + m_short_buf = self.buf[1:vrrp.vrrpv3._MIN_LEN] + vrrp.vrrp.parser(m_short_buf) + + def test_create_packet(self): + primary_ip = '2001:db8:2000::3' + p0 = self.vrrpv3.create_packet(primary_ip) + p0.serialize() + print(len(p0.data), p0.data) + p1 = packet.Packet(six.binary_type(p0.data)) + p1.serialize() + print(len(p0.data), p0.data) + print(len(p1.data), p1.data) + eq_(p0.data, p1.data) + + def test_to_string(self): + vrrpv3_values = {'version': self.version, + 'type': self.type_, + 'vrid': self.vrid, + 'priority': self.priority, + 'count_ip': self.count_ip, + 'max_adver_int': self.max_adver_int, + 'checksum': self.vrrpv3.checksum, + 'ip_addresses': [self.ip_address], + 'auth_type': None, + 'auth_data': None, + 'identification': self.vrrpv3.identification} + _vrrpv3_str = ','.join(['%s=%s' % (k, repr(vrrpv3_values[k])) + for k, v in inspect.getmembers(self.vrrpv3) + if k in vrrpv3_values]) + vrrpv3_str = '%s(%s)' % (vrrp.vrrpv3.__name__, _vrrpv3_str) + + eq_(str(self.vrrpv3), vrrpv3_str) + eq_(repr(self.vrrpv3), vrrpv3_str) diff --git a/tests/unit/packet/test_vxlan.py b/tests/unit/packet/test_vxlan.py new file mode 100644 index 00000000..8cace581 --- /dev/null +++ b/tests/unit/packet/test_vxlan.py @@ -0,0 +1,82 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import unittest + +from nose.tools import eq_ +from nose.tools import raises + +from ryu.lib.packet import ethernet +from ryu.lib.packet import vxlan + + +LOG = logging.getLogger(__name__) + + +class Test_vxlan(unittest.TestCase): + """ + Test case for VXLAN (RFC 7348) header encoder/decoder class. + """ + + vni = 0x123456 + buf = ( + b'\x08\x00\x00\x00' # flags = R|R|R|R|I|R|R|R (8 bits) + b'\x12\x34\x56\x00' # vni = 0x123456 (24 bits) + b'test_payload' # for test + ) + pkt = vxlan.vxlan(vni) + jsondict = { + 'vxlan': { + 'vni': vni + } + } + + def test_init(self): + eq_(self.vni, self.pkt.vni) + + def test_parser(self): + parsed_pkt, next_proto_cls, rest_buf = vxlan.vxlan.parser(self.buf) + eq_(self.vni, parsed_pkt.vni) + eq_(ethernet.ethernet, next_proto_cls) + eq_(b'test_payload', rest_buf) + + @raises(AssertionError) + def test_invalid_flags(self): + invalid_flags_bug = ( + b'\x00\x00\x00\x00' # all bits are set to zero + b'\x12\x34\x56\x00' # vni = 0x123456 (24 bits) + ) + vxlan.vxlan.parser(invalid_flags_bug) + + def test_serialize(self): + serialized_buf = self.pkt.serialize(payload=None, prev=None) + eq_(self.buf[:vxlan.vxlan._MIN_LEN], serialized_buf) + + def test_from_jsondict(self): + pkt_from_json = vxlan.vxlan.from_jsondict( + self.jsondict[vxlan.vxlan.__name__]) + eq_(self.vni, pkt_from_json.vni) + + def test_to_jsondict(self): + jsondict_from_pkt = self.pkt.to_jsondict() + eq_(self.jsondict, jsondict_from_pkt) + + def test_vni_from_bin(self): + vni = vxlan.vni_from_bin(b'\x12\x34\x56') + eq_(self.vni, vni) + + def test_vni_to_bin(self): + eq_(b'\x12\x34\x56', vxlan.vni_to_bin(self.vni)) diff --git a/tests/unit/packet/test_zebra.py b/tests/unit/packet/test_zebra.py new file mode 100644 index 00000000..19ff88de --- /dev/null +++ b/tests/unit/packet/test_zebra.py @@ -0,0 +1,66 @@ +# Copyright (C) 2017 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from __future__ import print_function + +import os +import sys +import unittest + +from nose.tools import eq_ +from nose.tools import ok_ +import six + +from ryu.lib import pcaplib +from ryu.lib.packet import packet +from ryu.lib.packet import zebra +from ryu.utils import binary_str + + +PCAP_DATA_DIR = os.path.join( + os.path.dirname(sys.modules[__name__].__file__), + '../../packet_data/pcap/') + + +class Test_zebra(unittest.TestCase): + """ + Test case for ryu.lib.packet.zebra. + """ + + def test_pcap(self): + files = [ + 'zebra_v2', + 'zebra_v3', + ] + + for f in files: + zebra_pcap_file = os.path.join(PCAP_DATA_DIR, f + '.pcap') + # print('*** testing %s' % zebra_pcap_file) + + for _, buf in pcaplib.Reader(open(zebra_pcap_file, 'rb')): + # Checks if Zebra message can be parsed as expected. + pkt = packet.Packet(buf) + zebra_pkts = pkt.get_protocols(zebra.ZebraMessage) + for zebra_pkt in zebra_pkts: + ok_(isinstance(zebra_pkt, zebra.ZebraMessage), + 'Failed to parse Zebra message: %s' % pkt) + ok_(not isinstance(pkt.protocols[-1], + (six.binary_type, bytearray)), + 'Some messages could not be parsed: %s' % pkt) + + # Checks if Zebra message can be serialized as expected. + pkt.serialize() + eq_(buf, pkt.data, + "b'%s' != b'%s'" % (binary_str(buf), binary_str(pkt.data))) diff --git a/tests/unit/sample/__init__.py b/tests/unit/sample/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/sample/test_sample1.py b/tests/unit/sample/test_sample1.py new file mode 100644 index 00000000..b4963556 --- /dev/null +++ b/tests/unit/sample/test_sample1.py @@ -0,0 +1,20 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +from nose.tools import ok_, eq_ +# from ryu.app.simple_switch import SimpleSwitch + +import logging + + +LOG = logging.getLogger('tests.test_sample1') + + +class TestSample1(unittest.TestCase): + + def testS1Func1(self): + LOG.debug('testS1Func1 - START') + ok_(True) + + def testS1Func2(self): + ok_(True) diff --git a/tests/unit/sample/test_sample2.py b/tests/unit/sample/test_sample2.py new file mode 100644 index 00000000..9c21a42a --- /dev/null +++ b/tests/unit/sample/test_sample2.py @@ -0,0 +1,14 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +import unittest +from nose.tools import ok_, eq_ +# from ryu.app.simple_switch import SimpleSwitch + + +class TestSample2(unittest.TestCase): + + def testS2Func1(self): + ok_(True) + + def testS2Func2(self): + ok_(True) diff --git a/tests/unit/services/__init__.py b/tests/unit/services/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/services/protocols/__init__.py b/tests/unit/services/protocols/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/services/protocols/bgp/__init__.py b/tests/unit/services/protocols/bgp/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/services/protocols/bgp/core_managers/__init__.py b/tests/unit/services/protocols/bgp/core_managers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/services/protocols/bgp/core_managers/test_table_manager.py b/tests/unit/services/protocols/bgp/core_managers/test_table_manager.py new file mode 100644 index 00000000..c9c9f55e --- /dev/null +++ b/tests/unit/services/protocols/bgp/core_managers/test_table_manager.py @@ -0,0 +1,937 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from collections import OrderedDict +import unittest +import logging +try: + import mock # Python 2 +except ImportError: + from unittest import mock # Python 3 + +from nose.tools import ok_, eq_, raises + +from ryu.lib.packet.bgp import BGPPathAttributeOrigin +from ryu.lib.packet.bgp import BGPPathAttributeAsPath +from ryu.lib.packet.bgp import BGP_ATTR_ORIGIN_IGP +from ryu.lib.packet.bgp import BGP_ATTR_TYPE_ORIGIN +from ryu.lib.packet.bgp import BGP_ATTR_TYPE_AS_PATH +from ryu.lib.packet.bgp import BGP_ATTR_TYPE_EXTENDED_COMMUNITIES +from ryu.lib.packet.bgp import IPAddrPrefix +from ryu.lib.packet.bgp import IP6AddrPrefix +from ryu.lib.packet.bgp import EvpnArbitraryEsi +from ryu.lib.packet.bgp import EvpnLACPEsi +from ryu.lib.packet.bgp import EvpnEthernetAutoDiscoveryNLRI +from ryu.lib.packet.bgp import EvpnMacIPAdvertisementNLRI +from ryu.lib.packet.bgp import EvpnInclusiveMulticastEthernetTagNLRI +from ryu.lib.packet.bgp import FlowSpecIPv4NLRI +from ryu.lib.packet.bgp import BGPPathAttributeExtendedCommunities +from ryu.services.protocols.bgp.bgpspeaker import EVPN_MAX_ET +from ryu.services.protocols.bgp.bgpspeaker import ESI_TYPE_LACP +from ryu.services.protocols.bgp.bgpspeaker import FLOWSPEC_FAMILY_IPV4 +from ryu.services.protocols.bgp.bgpspeaker import FLOWSPEC_FAMILY_VPNV4 +from ryu.services.protocols.bgp.bgpspeaker import FLOWSPEC_TA_SAMPLE +from ryu.services.protocols.bgp.bgpspeaker import FLOWSPEC_TA_TERMINAL +from ryu.services.protocols.bgp.core import BgpCoreError +from ryu.services.protocols.bgp.core_managers import table_manager +from ryu.services.protocols.bgp.rtconf.vrfs import VRF_RF_IPV4 +from ryu.services.protocols.bgp.rtconf.vrfs import VRF_RF_IPV6 +from ryu.services.protocols.bgp.rtconf.vrfs import VRF_RF_L2_EVPN +from ryu.services.protocols.bgp.rtconf.vrfs import VRF_RF_IPV4_FLOWSPEC +from ryu.services.protocols.bgp.utils.bgp import create_v4flowspec_actions + + +LOG = logging.getLogger(__name__) + + +class Test_TableCoreManager(unittest.TestCase): + """ + Test case for bgp.core_managers.table_manager.TableCoreManager + """ + + @mock.patch( + 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', + mock.MagicMock(return_value=None)) + def _test_update_vrf_table(self, prefix_inst, route_dist, prefix_str, + next_hop, route_family, route_type, + is_withdraw=False, **kwargs): + # Instantiate TableCoreManager + tbl_mng = table_manager.TableCoreManager(None, None) + vrf_table_mock = mock.MagicMock() + tbl_mng._tables = {(route_dist, route_family): vrf_table_mock} + + # Test + tbl_mng.update_vrf_table( + route_dist=route_dist, + prefix=prefix_str, + next_hop=next_hop, + route_family=route_family, + route_type=route_type, + is_withdraw=is_withdraw, + **kwargs) + + # Check + call_args_list = vrf_table_mock.insert_vrf_path.call_args_list + ok_(len(call_args_list) == 1) # insert_vrf_path should be called once + args, kwargs = call_args_list[0] + ok_(len(args) == 0) # no positional argument + eq_(str(prefix_inst), str(kwargs['nlri'])) + eq_(is_withdraw, kwargs['is_withdraw']) + if is_withdraw: + eq_(None, kwargs['next_hop']) + eq_(False, kwargs['gen_lbl']) + else: + eq_(next_hop, kwargs['next_hop']) + eq_(True, kwargs['gen_lbl']) + + def test_update_vrf_table_ipv4(self): + # Prepare test data + route_dist = '65000:100' + ip_network = '192.168.0.0' + ip_prefix_len = 24 + prefix_str = '%s/%d' % (ip_network, ip_prefix_len) + prefix_inst = IPAddrPrefix(ip_prefix_len, ip_network) + next_hop = '10.0.0.1' + route_family = VRF_RF_IPV4 + route_type = None # should be ignored + kwargs = {} # should be ignored + + self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, + next_hop, route_family, route_type, + **kwargs) + + def test_update_vrf_table_ipv6(self): + # Prepare test data + route_dist = '65000:100' + ip_network = 'fe80::' + ip_prefix_len = 64 + prefix_str = '%s/%d' % (ip_network, ip_prefix_len) + prefix_inst = IP6AddrPrefix(ip_prefix_len, ip_network) + next_hop = 'fe80::0011:aabb:ccdd:eeff' + route_family = VRF_RF_IPV6 + route_type = None # should be ignored + kwargs = {} # should be ignored + + self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, + next_hop, route_family, route_type, + **kwargs) + + def test_update_vrf_table_l2_evpn_with_esi_int(self): + # Prepare test data + route_dist = '65000:100' + prefix_str = None # should be ignored + kwargs = { + 'ethernet_tag_id': 100, + 'mac_addr': 'aa:bb:cc:dd:ee:ff', + 'ip_addr': '192.168.0.1', + 'mpls_labels': [], # not be used + } + esi = EvpnArbitraryEsi(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00') + prefix_inst = EvpnMacIPAdvertisementNLRI( + route_dist=route_dist, + esi=esi, + **kwargs) + next_hop = '10.0.0.1' + route_family = VRF_RF_L2_EVPN + route_type = EvpnMacIPAdvertisementNLRI.ROUTE_TYPE_NAME + kwargs['esi'] = 0 + + self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, + next_hop, route_family, route_type, + **kwargs) + + def test_update_vrf_table_l2_evpn_with_esi_dict(self): + # Prepare test data + route_dist = '65000:100' + prefix_str = None # should be ignored + kwargs = { + 'ethernet_tag_id': EVPN_MAX_ET, + } + esi = EvpnLACPEsi(mac_addr='aa:bb:cc:dd:ee:ff', port_key=100) + prefix_inst = EvpnEthernetAutoDiscoveryNLRI( + route_dist=route_dist, + esi=esi, + **kwargs) + next_hop = '0.0.0.0' + route_family = VRF_RF_L2_EVPN + route_type = EvpnEthernetAutoDiscoveryNLRI.ROUTE_TYPE_NAME + kwargs['esi'] = { + 'type': ESI_TYPE_LACP, + 'mac_addr': 'aa:bb:cc:dd:ee:ff', + 'port_key': 100, + } + + self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, + next_hop, route_family, route_type, + **kwargs) + + def test_update_vrf_table_l2_evpn_without_esi(self): + # Prepare test data + route_dist = '65000:100' + prefix_str = None # should be ignored + kwargs = { + 'ethernet_tag_id': 100, + 'ip_addr': '192.168.0.1', + } + prefix_inst = EvpnInclusiveMulticastEthernetTagNLRI( + route_dist=route_dist, **kwargs) + next_hop = '10.0.0.1' + route_family = VRF_RF_L2_EVPN + route_type = EvpnInclusiveMulticastEthernetTagNLRI.ROUTE_TYPE_NAME + + self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, + next_hop, route_family, route_type, + **kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', + mock.MagicMock(return_value=None)) + def test_update_vrf_table_l2_evpn_with_vni(self): + # Prepare test data + route_dist = '65000:100' + prefix_str = None # should be ignored + kwargs = { + 'ethernet_tag_id': 100, + 'mac_addr': 'aa:bb:cc:dd:ee:ff', + 'ip_addr': '192.168.0.1', + 'vni': 500, + } + esi = EvpnArbitraryEsi(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00') + prefix_inst = EvpnMacIPAdvertisementNLRI( + route_dist=route_dist, + esi=esi, + **kwargs) + next_hop = '10.0.0.1' + route_family = VRF_RF_L2_EVPN + route_type = EvpnMacIPAdvertisementNLRI.ROUTE_TYPE_NAME + tunnel_type = 'vxlan' + kwargs['esi'] = 0 + + # Instantiate TableCoreManager + tbl_mng = table_manager.TableCoreManager(None, None) + vrf_table_mock = mock.MagicMock() + tbl_mng._tables = {(route_dist, route_family): vrf_table_mock} + + # Test + tbl_mng.update_vrf_table( + route_dist=route_dist, + prefix=prefix_str, + next_hop=next_hop, + route_family=route_family, + route_type=route_type, + tunnel_type=tunnel_type, + **kwargs) + + # Check + call_args_list = vrf_table_mock.insert_vrf_path.call_args_list + ok_(len(call_args_list) == 1) # insert_vrf_path should be called once + args, kwargs = call_args_list[0] + ok_(len(args) == 0) # no positional argument + eq_(str(prefix_inst), str(kwargs['nlri'])) + eq_(next_hop, kwargs['next_hop']) + eq_(False, kwargs['gen_lbl']) # should not generate MPLS labels + eq_(tunnel_type, kwargs['tunnel_type']) + + def test_update_vrf_table_ipv4_withdraw(self): + # Prepare test data + route_dist = '65000:100' + ip_network = '192.168.0.0' + ip_prefix_len = 24 + prefix_str = '%s/%d' % (ip_network, ip_prefix_len) + prefix_inst = IPAddrPrefix(ip_prefix_len, ip_network) + next_hop = '10.0.0.1' + route_family = VRF_RF_IPV4 + route_type = None # should be ignored + kwargs = {} # should be ignored + + self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, + next_hop, route_family, route_type, + is_withdraw=True, **kwargs) + + @raises(BgpCoreError) + @mock.patch( + 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', + mock.MagicMock(return_value=None)) + def test_update_vrf_table_no_vrf(self): + # Prepare test data + route_dist = '65000:100' + ip_network = '192.168.0.0' + ip_prefix_len = 24 + prefix_str = '%s/%d' % (ip_network, ip_prefix_len) + next_hop = '10.0.0.1' + route_family = VRF_RF_IPV4 + route_type = None # should be ignored + kwargs = {} # should be ignored + + # Instantiate TableCoreManager + tbl_mng = table_manager.TableCoreManager(None, None) + tbl_mng._tables = {} # no table + + # Test + tbl_mng.update_vrf_table( + route_dist=route_dist, + prefix=prefix_str, + next_hop=next_hop, + route_family=route_family, + route_type=route_type, + **kwargs) + + @raises(BgpCoreError) + def test_update_vrf_table_invalid_next_hop(self): + # Prepare test data + route_dist = '65000:100' + ip_network = '192.168.0.0' + ip_prefix_len = 24 + prefix_str = '%s/%d' % (ip_network, ip_prefix_len) + prefix_inst = IPAddrPrefix(ip_prefix_len, ip_network) + next_hop = 'xxx.xxx.xxx.xxx' # invalid + route_family = VRF_RF_IPV4 + route_type = None # should be ignored + kwargs = {} # should be ignored + + self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, + next_hop, route_family, route_type, + **kwargs) + + @raises(BgpCoreError) + def test_update_vrf_table_invalid_ipv4_prefix(self): + # Prepare test data + route_dist = '65000:100' + ip_network = 'xxx.xxx.xxx.xxx' # invalid + ip_prefix_len = 24 + prefix_str = '%s/%d' % (ip_network, ip_prefix_len) + prefix_inst = IPAddrPrefix(ip_prefix_len, ip_network) + next_hop = '10.0.0.1' + route_family = VRF_RF_IPV4 + route_type = None # should be ignored + kwargs = {} # should be ignored + + self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, + next_hop, route_family, route_type, + **kwargs) + + @raises(BgpCoreError) + def test_update_vrf_table_invalid_ipv6_prefix(self): + # Prepare test data + route_dist = '65000:100' + ip_network = 'xxxx::' # invalid + ip_prefix_len = 64 + prefix_str = '%s/%d' % (ip_network, ip_prefix_len) + prefix_inst = IP6AddrPrefix(ip_prefix_len, ip_network) + next_hop = 'fe80::0011:aabb:ccdd:eeff' + route_family = VRF_RF_IPV6 + route_type = None # should be ignored + kwargs = {} # should be ignored + + self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, + next_hop, route_family, route_type, + **kwargs) + + @raises(BgpCoreError) + def test_update_vrf_table_invalid_route_family(self): + # Prepare test data + route_dist = '65000:100' + ip_network = '192.168.0.0' + ip_prefix_len = 24 + prefix_str = '%s/%d' % (ip_network, ip_prefix_len) + prefix_inst = IPAddrPrefix(ip_prefix_len, ip_network) + next_hop = '10.0.0.1' + route_family = 'foobar' # invalid + route_type = None # should be ignored + kwargs = {} # should be ignored + + self._test_update_vrf_table(prefix_inst, route_dist, prefix_str, + next_hop, route_family, route_type, + **kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', + mock.MagicMock(return_value=None)) + @mock.patch( + 'ryu.services.protocols.bgp.core_managers.TableCoreManager.learn_path') + def _test_update_global_table(self, learn_path_mock, prefix, next_hop, + is_withdraw, expected_next_hop): + # Prepare test data + origin = BGPPathAttributeOrigin(BGP_ATTR_ORIGIN_IGP) + aspath = BGPPathAttributeAsPath([[]]) + pathattrs = OrderedDict() + pathattrs[BGP_ATTR_TYPE_ORIGIN] = origin + pathattrs[BGP_ATTR_TYPE_AS_PATH] = aspath + pathattrs = str(pathattrs) + + # Instantiate TableCoreManager + tbl_mng = table_manager.TableCoreManager(None, None) + + # Test + tbl_mng.update_global_table( + prefix=prefix, + next_hop=next_hop, + is_withdraw=is_withdraw, + ) + + # Check + call_args_list = learn_path_mock.call_args_list + ok_(len(call_args_list) == 1) # learn_path should be called once + args, kwargs = call_args_list[0] + ok_(len(kwargs) == 0) # no keyword argument + output_path = args[0] + eq_(None, output_path.source) + eq_(prefix, output_path.nlri.prefix) + eq_(pathattrs, str(output_path.pathattr_map)) + eq_(expected_next_hop, output_path.nexthop) + eq_(is_withdraw, output_path.is_withdraw) + + def test_update_global_table_ipv4(self): + self._test_update_global_table( + prefix='192.168.0.0/24', + next_hop='10.0.0.1', + is_withdraw=False, + expected_next_hop='10.0.0.1', + ) + + def test_update_global_table_ipv4_withdraw(self): + self._test_update_global_table( + prefix='192.168.0.0/24', + next_hop='10.0.0.1', + is_withdraw=True, + expected_next_hop='10.0.0.1', + ) + + def test_update_global_table_ipv4_no_next_hop(self): + self._test_update_global_table( + prefix='192.168.0.0/24', + next_hop=None, + is_withdraw=True, + expected_next_hop='0.0.0.0', + ) + + def test_update_global_table_ipv6(self): + self._test_update_global_table( + prefix='fe80::/64', + next_hop='fe80::0011:aabb:ccdd:eeff', + is_withdraw=False, + expected_next_hop='fe80::0011:aabb:ccdd:eeff', + ) + + def test_update_global_table_ipv6_withdraw(self): + self._test_update_global_table( + prefix='fe80::/64', + next_hop='fe80::0011:aabb:ccdd:eeff', + is_withdraw=True, + expected_next_hop='fe80::0011:aabb:ccdd:eeff', + ) + + def test_update_global_table_ipv6_no_next_hop(self): + self._test_update_global_table( + prefix='fe80::/64', + next_hop=None, + is_withdraw=True, + expected_next_hop='::', + ) + + @mock.patch( + 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', + mock.MagicMock(return_value=None)) + def _test_update_flowspec_vrf_table(self, flowspec_family, route_family, + route_dist, rules, prefix, + is_withdraw, actions=None): + # Instantiate TableCoreManager + tbl_mng = table_manager.TableCoreManager(None, None) + vrf_table_mock = mock.MagicMock() + tbl_mng._tables = {(route_dist, route_family): vrf_table_mock} + + # Test + tbl_mng.update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_dist=route_dist, + rules=rules, + actions=actions, + is_withdraw=is_withdraw, + ) + + # Check + call_args_list = vrf_table_mock.insert_vrffs_path.call_args_list + ok_(len( + call_args_list) == 1) # insert_vrffs_path should be called once + args, kwargs = call_args_list[0] + ok_(len(args) == 0) # no positional argument + eq_(prefix, kwargs['nlri'].prefix) + eq_(is_withdraw, kwargs['is_withdraw']) + + def test_update_flowspec_vrf_table_vpnv4(self): + flowspec_family = 'vpnv4fs' + route_family = 'ipv4fs' + route_dist = '65001:100' + rules = { + 'dst_prefix': '10.70.1.0/24', + } + actions = { + 'traffic_rate': { + 'as_number': 0, + 'rate_info': 100.0, + }, + } + prefix = 'ipv4fs(dst_prefix:10.70.1.0/24)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + def test_update_flowspec_vrf_table_vpnv4_without_actions(self): + flowspec_family = 'vpnv4fs' + route_family = 'ipv4fs' + route_dist = '65001:100' + rules = { + 'dst_prefix': '10.70.1.0/24', + } + prefix = 'ipv4fs(dst_prefix:10.70.1.0/24)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + ) + + @raises(BgpCoreError) + def test_update_flowspec_vrf_table_vpnv4_invalid_actions(self): + flowspec_family = 'vpnv4fs' + route_family = 'ipv4fs' + route_dist = '65001:100' + rules = { + 'dst_prefix': '10.70.1.0/24', + } + actions = { + 'invalid_actions': { + 'invalid_param': 10, + }, + } + prefix = 'ipv4fs(dst_prefix:10.70.1.0/24)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + @raises(BgpCoreError) + def test_update_flowspec_vrf_table_vpnv4_invalid_flowspec_family(self): + flowspec_family = 'invalid' + route_family = 'ipv4fs' + route_dist = '65001:100' + rules = { + 'dst_prefix': '10.70.1.0/24', + } + prefix = 'ipv4fs(dst_prefix:10.70.1.0/24)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + ) + + @raises(BgpCoreError) + def test_update_flowspec_vrf_table_vpnv4_invalid_route_family(self): + flowspec_family = 'vpnv4fs' + route_family = 'invalid' + route_dist = '65001:100' + rules = { + 'dst_prefix': '10.70.1.0/24', + } + prefix = 'ipv4fs(dst_prefix:10.70.1.0/24)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + ) + + @mock.patch( + 'ryu.services.protocols.bgp.core_managers.TableCoreManager.__init__', + mock.MagicMock(return_value=None)) + @mock.patch( + 'ryu.services.protocols.bgp.core_managers.TableCoreManager.learn_path') + def _test_update_flowspec_global_table(self, learn_path_mock, + flowspec_family, rules, prefix, + is_withdraw, actions=None): + # Instantiate TableCoreManager + tbl_mng = table_manager.TableCoreManager(None, None) + + # Test + tbl_mng.update_flowspec_global_table( + flowspec_family=flowspec_family, + rules=rules, + actions=actions, + is_withdraw=is_withdraw, + ) + + # Check + call_args_list = learn_path_mock.call_args_list + ok_(len(call_args_list) == 1) # learn_path should be called once + args, kwargs = call_args_list[0] + ok_(len(kwargs) == 0) # no keyword argument + output_path = args[0] + eq_(None, output_path.source) + eq_(prefix, output_path.nlri.prefix) + eq_(None, output_path.nexthop) + eq_(is_withdraw, output_path.is_withdraw) + + def test_update_flowspec_global_table_ipv4(self): + flowspec_family = 'ipv4fs' + rules = { + 'dst_prefix': '10.60.1.0/24', + } + actions = { + 'traffic_rate': { + 'as_number': 0, + 'rate_info': 100.0, + }, + } + prefix = 'ipv4fs(dst_prefix:10.60.1.0/24)' + + self._test_update_flowspec_global_table( + flowspec_family=flowspec_family, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + def test_update_flowspec_global_table_ipv4_without_actions(self): + flowspec_family = 'ipv4fs' + rules = { + 'dst_prefix': '10.60.1.0/24', + } + prefix = 'ipv4fs(dst_prefix:10.60.1.0/24)' + + self._test_update_flowspec_global_table( + flowspec_family=flowspec_family, + rules=rules, + prefix=prefix, + is_withdraw=False, + ) + + @raises(BgpCoreError) + def test_update_flowspec_global_table_ipv4_invalid_actions(self): + flowspec_family = 'ipv4fs' + rules = { + 'dst_prefix': '10.60.1.0/24', + } + actions = { + 'invalid_actions': { + 'invalid_param': 10, + }, + } + prefix = 'ipv4fs(dst_prefix:10.60.1.0/24)' + + self._test_update_flowspec_global_table( + flowspec_family=flowspec_family, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + @raises(BgpCoreError) + def test_update_flowspec_global_table_ipv4_invalid_flowspec_family(self): + flowspec_family = 'invalid' + rules = { + 'dst_prefix': '10.60.1.0/24', + } + actions = { + 'traffic_rate': { + 'as_number': 0, + 'rate_info': 100.0, + }, + } + prefix = 'ipv4fs(dst_prefix:10.60.1.0/24)' + + self._test_update_flowspec_global_table( + flowspec_family=flowspec_family, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + def test_update_flowspec_global_table_ipv6(self): + flowspec_family = 'ipv6fs' + rules = { + 'dst_prefix': '2001::3/128/32', + } + actions = { + 'traffic_rate': { + 'as_number': 0, + 'rate_info': 100.0, + }, + } + prefix = 'ipv6fs(dst_prefix:2001::3/128/32)' + + self._test_update_flowspec_global_table( + flowspec_family=flowspec_family, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + def test_update_flowspec_global_table_ipv6_without_actions(self): + flowspec_family = 'ipv6fs' + rules = { + 'dst_prefix': '2001::3/128/32', + } + prefix = 'ipv6fs(dst_prefix:2001::3/128/32)' + + self._test_update_flowspec_global_table( + flowspec_family=flowspec_family, + rules=rules, + prefix=prefix, + is_withdraw=False, + ) + + @raises(BgpCoreError) + def test_update_flowspec_global_table_ipv6_invalid_actions(self): + flowspec_family = 'ipv6fs' + rules = { + 'dst_prefix': '2001::3/128/32', + } + actions = { + 'invalid_actions': { + 'invalid_param': 10, + }, + } + prefix = 'ipv4fs(dst_prefix:2001::3/128/32)' + + self._test_update_flowspec_global_table( + flowspec_family=flowspec_family, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + @raises(BgpCoreError) + def test_update_flowspec_global_table_ipv6_invalid_flowspec_family(self): + flowspec_family = 'invalid' + rules = { + 'dst_prefix': '2001::3/128/32', + } + actions = { + 'traffic_rate': { + 'as_number': 0, + 'rate_info': 100.0, + }, + } + prefix = 'ipv4fs(dst_prefix:2001::3/128/32)' + + self._test_update_flowspec_global_table( + flowspec_family=flowspec_family, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + def test_update_flowspec_vrf_table_vpnv6(self): + flowspec_family = 'vpnv6fs' + route_family = 'ipv6fs' + route_dist = '65001:100' + rules = { + 'dst_prefix': '2001::3/128/32', + } + actions = { + 'traffic_rate': { + 'as_number': 0, + 'rate_info': 100.0, + }, + } + prefix = 'ipv6fs(dst_prefix:2001::3/128/32)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + def test_update_flowspec_vrf_table_vpnv6_without_actions(self): + flowspec_family = 'vpnv6fs' + route_family = 'ipv6fs' + route_dist = '65001:100' + rules = { + 'dst_prefix': '2001::3/128/32', + } + prefix = 'ipv6fs(dst_prefix:2001::3/128/32)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + ) + + @raises(BgpCoreError) + def test_update_flowspec_vrf_table_vpnv6_invalid_actions(self): + flowspec_family = 'vpnv6fs' + route_family = 'ipv6fs' + route_dist = '65001:100' + rules = { + 'dst_prefix': '2001::3/128/32', + } + actions = { + 'invalid_actions': { + 'invalid_param': 10, + }, + } + prefix = 'ipv6fs(dst_prefix:2001::3/128/32)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + @raises(BgpCoreError) + def test_update_flowspec_vrf_table_vpnv6_invalid_route_family(self): + flowspec_family = 'vpnv6fs' + route_family = 'invalid' + route_dist = '65001:100' + rules = { + 'dst_prefix': '2001::3/128/32', + } + prefix = 'ipv4fs(dst_prefix:2001::3/128/32)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + ) + + def test_update_flowspec_vrf_table_l2vpn(self): + flowspec_family = 'l2vpnfs' + route_family = 'l2vpnfs' + route_dist = '65001:100' + rules = { + 'dst_mac': '12:34:56:78:9a:bc', + } + actions = { + 'traffic_rate': { + 'as_number': 0, + 'rate_info': 100.0, + }, + } + prefix = 'l2vpnfs(dst_mac:12:34:56:78:9a:bc)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + def test_update_flowspec_vrf_table_l2vpn_without_actions(self): + flowspec_family = 'l2vpnfs' + route_family = 'l2vpnfs' + route_dist = '65001:100' + rules = { + 'dst_mac': '12:34:56:78:9a:bc', + } + prefix = 'l2vpnfs(dst_mac:12:34:56:78:9a:bc)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + ) + + @raises(BgpCoreError) + def test_update_flowspec_vrf_table_l2vpn_invalid_actions(self): + flowspec_family = 'l2vpnfs' + route_family = 'l2vpnfs' + route_dist = '65001:100' + rules = { + 'dst_mac': '12:34:56:78:9a:bc', + } + actions = { + 'invalid_actions': { + 'invalid_param': 10, + }, + } + prefix = 'l2vpnfs(dst_mac:12:34:56:78:9a:bc)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + actions=actions, + ) + + @raises(BgpCoreError) + def test_update_flowspec_vrf_table_l2vpn_invalid_route_family(self): + flowspec_family = 'l2vpnfs' + route_family = 'invalid' + route_dist = '65001:100' + rules = { + 'dst_mac': '12:34:56:78:9a:bc', + } + prefix = 'l2vpnfs(dst_mac:12:34:56:78:9a:bc)' + + self._test_update_flowspec_vrf_table( + flowspec_family=flowspec_family, + route_family=route_family, + route_dist=route_dist, + rules=rules, + prefix=prefix, + is_withdraw=False, + ) diff --git a/tests/unit/services/protocols/bgp/test_bgpspeaker.py b/tests/unit/services/protocols/bgp/test_bgpspeaker.py new file mode 100644 index 00000000..81a8bb3b --- /dev/null +++ b/tests/unit/services/protocols/bgp/test_bgpspeaker.py @@ -0,0 +1,1088 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +import logging +try: + import mock # Python 2 +except ImportError: + from unittest import mock # Python 3 + +from nose.tools import raises + +from ryu.services.protocols.bgp import bgpspeaker +from ryu.services.protocols.bgp.bgpspeaker import EVPN_MAX_ET +from ryu.services.protocols.bgp.bgpspeaker import ESI_TYPE_LACP +from ryu.services.protocols.bgp.api.prefix import ESI_TYPE_L2_BRIDGE +from ryu.services.protocols.bgp.bgpspeaker import ESI_TYPE_MAC_BASED +from ryu.services.protocols.bgp.api.prefix import REDUNDANCY_MODE_ALL_ACTIVE +from ryu.services.protocols.bgp.api.prefix import REDUNDANCY_MODE_SINGLE_ACTIVE + + +LOG = logging.getLogger(__name__) + + +class Test_BGPSpeaker(unittest.TestCase): + """ + Test case for bgp.bgpspeaker.BGPSpeaker + """ + + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_eth_auto_discovery(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_ETH_AUTO_DISCOVERY + route_dist = '65000:100' + esi = { + 'type': ESI_TYPE_LACP, + 'mac_addr': 'aa:bb:cc:dd:ee:ff', + 'port_key': 100, + } + ethernet_tag_id = EVPN_MAX_ET + redundancy_mode = REDUNDANCY_MODE_ALL_ACTIVE + next_hop = '0.0.0.0' + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'esi': esi, + 'ethernet_tag_id': ethernet_tag_id, + 'redundancy_mode': redundancy_mode, + 'next_hop': next_hop, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + redundancy_mode=redundancy_mode, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_eth_auto_discovery_vni(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_ETH_AUTO_DISCOVERY + route_dist = '65000:100' + esi = { + 'type': ESI_TYPE_L2_BRIDGE, + 'mac_addr': 'aa:bb:cc:dd:ee:ff', + 'priority': 100, + } + ethernet_tag_id = EVPN_MAX_ET + redundancy_mode = REDUNDANCY_MODE_SINGLE_ACTIVE + vni = 500 + next_hop = '0.0.0.0' + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'esi': esi, + 'ethernet_tag_id': ethernet_tag_id, + 'redundancy_mode': redundancy_mode, + 'vni': vni, + 'next_hop': next_hop, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + redundancy_mode=redundancy_mode, + vni=vni + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', **expected_kwargs) + + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_mac_ip_adv(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_MAC_IP_ADV_ROUTE + route_dist = '65000:100' + esi = 0 # denotes single-homed + ethernet_tag_id = 200 + mac_addr = 'aa:bb:cc:dd:ee:ff' + ip_addr = '192.168.0.1' + next_hop = '10.0.0.1' + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'esi': esi, + 'ethernet_tag_id': ethernet_tag_id, + 'mac_addr': mac_addr, + 'ip_addr': ip_addr, + 'next_hop': next_hop, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + mac_addr=mac_addr, + ip_addr=ip_addr, + next_hop=next_hop, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', **expected_kwargs) + + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_mac_ip_adv_vni(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_MAC_IP_ADV_ROUTE + route_dist = '65000:100' + esi = 0 # denotes single-homed + ethernet_tag_id = 200 + mac_addr = 'aa:bb:cc:dd:ee:ff' + ip_addr = '192.168.0.1' + vni = 500 + next_hop = '10.0.0.1' + tunnel_type = bgpspeaker.TUNNEL_TYPE_VXLAN + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'esi': esi, + 'ethernet_tag_id': ethernet_tag_id, + 'mac_addr': mac_addr, + 'ip_addr': ip_addr, + 'vni': vni, + 'next_hop': next_hop, + 'tunnel_type': tunnel_type, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + mac_addr=mac_addr, + ip_addr=ip_addr, + vni=vni, + next_hop=next_hop, + tunnel_type=tunnel_type, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', **expected_kwargs) + + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_multicast_etag(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE + route_dist = '65000:100' + esi = 0 # denotes single-homed + ethernet_tag_id = 200 + mac_addr = 'aa:bb:cc:dd:ee:ff' + ip_addr = '192.168.0.1' + next_hop = '10.0.0.1' + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + # 'esi': esi, # should be ignored + 'ethernet_tag_id': ethernet_tag_id, + # 'mac_addr': mac_addr, # should be ignored + 'ip_addr': ip_addr, + 'next_hop': next_hop, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + mac_addr=mac_addr, + ip_addr=ip_addr, + next_hop=next_hop, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', **expected_kwargs) + + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_multicast_etag_no_next_hop(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE + route_dist = '65000:100' + esi = 0 # denotes single-homed + ethernet_tag_id = 200 + mac_addr = 'aa:bb:cc:dd:ee:ff' + ip_addr = '192.168.0.1' + next_hop = '0.0.0.0' # the default value + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + # 'esi': esi, # should be ignored + 'ethernet_tag_id': ethernet_tag_id, + # 'mac_addr': mac_addr, # should be ignored + 'ip_addr': ip_addr, + 'next_hop': next_hop, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + mac_addr=mac_addr, + ip_addr=ip_addr, + # next_hop=next_hop, # omitted + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_eth_segment(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_ETH_SEGMENT + route_dist = '65000:100' + esi = { + 'type': ESI_TYPE_MAC_BASED, + 'mac_addr': 'aa:bb:cc:dd:ee:ff', + 'local_disc': 100, + } + ip_addr = '192.168.0.1' + next_hop = '0.0.0.0' + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'esi': esi, + 'ip_addr': ip_addr, + 'next_hop': next_hop, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ip_addr=ip_addr, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_ip_prefix_route(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_IP_PREFIX_ROUTE + route_dist = '65000:100' + esi = 0 # denotes single-homed + ethernet_tag_id = 200 + ip_prefix = '192.168.0.0/24' + gw_ip_addr = '172.16.0.1' + next_hop = '0.0.0.0' + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'esi': esi, + 'ethernet_tag_id': ethernet_tag_id, + 'ip_prefix': ip_prefix, + 'gw_ip_addr': gw_ip_addr, + 'next_hop': next_hop, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + ip_prefix=ip_prefix, + gw_ip_addr=gw_ip_addr, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_ip_prefix_route_vni(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_IP_PREFIX_ROUTE + route_dist = '65000:100' + esi = 0 # denotes single-homed + ethernet_tag_id = 200 + ip_prefix = '192.168.0.0/24' + gw_ip_addr = '172.16.0.1' + vni = 500 + tunnel_type = bgpspeaker.TUNNEL_TYPE_VXLAN + next_hop = '0.0.0.0' + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'esi': esi, + 'ethernet_tag_id': ethernet_tag_id, + 'ip_prefix': ip_prefix, + 'gw_ip_addr': gw_ip_addr, + 'tunnel_type': tunnel_type, + 'vni': vni, + 'next_hop': next_hop, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + ip_prefix=ip_prefix, + gw_ip_addr=gw_ip_addr, + tunnel_type=tunnel_type, + vni=vni, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', **expected_kwargs) + + @raises(ValueError) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_invalid_route_type(self, mock_call): + # Prepare test data + route_type = 'foobar' # Invalid EVPN route type + route_dist = '65000:100' + esi = 0 # denotes single-homed + ethernet_tag_id = 200 + mac_addr = 'aa:bb:cc:dd:ee:ff' + ip_addr = '192.168.0.1' + next_hop = '10.0.0.1' + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + mac_addr=mac_addr, + ip_addr=ip_addr, + next_hop=next_hop, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', 'Invalid arguments detected') + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_del_auto_discovery(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_ETH_AUTO_DISCOVERY + route_dist = '65000:100' + esi = { + 'type': ESI_TYPE_LACP, + 'mac_addr': 'aa:bb:cc:dd:ee:ff', + 'port_key': 100, + } + ethernet_tag_id = EVPN_MAX_ET + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'esi': esi, + 'ethernet_tag_id': ethernet_tag_id, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_del( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.delete_local', **expected_kwargs) + + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_del_mac_ip_adv(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_MAC_IP_ADV_ROUTE + route_dist = '65000:100' + ethernet_tag_id = 200 + mac_addr = 'aa:bb:cc:dd:ee:ff' + ip_addr = '192.168.0.1' + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'ethernet_tag_id': ethernet_tag_id, + 'mac_addr': mac_addr, + 'ip_addr': ip_addr, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_del( + route_type=route_type, + route_dist=route_dist, + ethernet_tag_id=ethernet_tag_id, + mac_addr=mac_addr, + ip_addr=ip_addr, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.delete_local', **expected_kwargs) + + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_del_multicast_etag(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE + route_dist = '65000:100' + esi = 0 # denotes single-homed + ethernet_tag_id = 200 + mac_addr = 'aa:bb:cc:dd:ee:ff' + ip_addr = '192.168.0.1' + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + # 'esi': esi, # should be ignored + 'ethernet_tag_id': ethernet_tag_id, + # 'mac_addr': mac_addr, # should be ignored + 'ip_addr': ip_addr, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_del( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + mac_addr=mac_addr, + ip_addr=ip_addr, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.delete_local', **expected_kwargs) + + @raises(ValueError) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_del_invalid_route_type(self, mock_call): + # Prepare test data + route_type = 'foobar' # Invalid EVPN route type + route_dist = '65000:100' + esi = 0 # denotes single-homed + ethernet_tag_id = 200 + mac_addr = 'aa:bb:cc:dd:ee:ff' + ip_addr = '192.168.0.1' + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_del( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ethernet_tag_id=ethernet_tag_id, + mac_addr=mac_addr, + ip_addr=ip_addr, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.delete_local', 'Invalid arguments detected') + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_del_eth_segment(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_ETH_SEGMENT + route_dist = '65000:100' + esi = { + 'esi_type': ESI_TYPE_MAC_BASED, + 'mac_addr': 'aa:bb:cc:dd:ee:ff', + 'local_disc': 100, + } + ip_addr = '192.168.0.1' + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'esi': esi, + 'ip_addr': ip_addr, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_del( + route_type=route_type, + route_dist=route_dist, + esi=esi, + ip_addr=ip_addr, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.delete_local', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_del_ip_prefix_route(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_IP_PREFIX_ROUTE + route_dist = '65000:100' + ethernet_tag_id = 200 + ip_prefix = '192.168.0.0/24' + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'ethernet_tag_id': ethernet_tag_id, + 'ip_prefix': ip_prefix, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_del( + route_type=route_type, + route_dist=route_dist, + ethernet_tag_id=ethernet_tag_id, + ip_prefix=ip_prefix, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.delete_local', **expected_kwargs) + + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_pmsi_no_tunnel_info(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE + route_dist = '65000:100' + ethernet_tag_id = 200 + next_hop = '0.0.0.0' + ip_addr = '192.168.0.1' + pmsi_tunnel_type = bgpspeaker.PMSI_TYPE_NO_TUNNEL_INFO + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'ethernet_tag_id': ethernet_tag_id, + 'next_hop': next_hop, + 'ip_addr': ip_addr, + 'pmsi_tunnel_type': pmsi_tunnel_type, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + ethernet_tag_id=ethernet_tag_id, + ip_addr=ip_addr, + pmsi_tunnel_type=pmsi_tunnel_type, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_pmsi_ingress_rep(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE + route_dist = '65000:100' + ethernet_tag_id = 200 + next_hop = '0.0.0.0' + ip_addr = '192.168.0.1' + pmsi_tunnel_type = bgpspeaker.PMSI_TYPE_INGRESS_REP + expected_kwargs = { + 'route_type': route_type, + 'route_dist': route_dist, + 'ethernet_tag_id': ethernet_tag_id, + 'next_hop': next_hop, + 'ip_addr': ip_addr, + 'pmsi_tunnel_type': pmsi_tunnel_type, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + ethernet_tag_id=ethernet_tag_id, + ip_addr=ip_addr, + pmsi_tunnel_type=pmsi_tunnel_type, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', **expected_kwargs) + + @raises(ValueError) + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_evpn_prefix_add_invalid_pmsi_tunnel_type(self, mock_call): + # Prepare test data + route_type = bgpspeaker.EVPN_MULTICAST_ETAG_ROUTE + route_dist = '65000:100' + ethernet_tag_id = 200 + next_hop = '0.0.0.0' + ip_addr = '192.168.0.1' + pmsi_tunnel_type = 1 + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.evpn_prefix_add( + route_type=route_type, + route_dist=route_dist, + ethernet_tag_id=ethernet_tag_id, + ip_addr=ip_addr, + pmsi_tunnel_type=pmsi_tunnel_type, + ) + + # Check + mock_call.assert_called_with( + 'evpn_prefix.add_local', 'Invalid arguments detected') + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_add_ipv4(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV4 + rules = { + 'dst_prefix': '10.60.1.0/24', + } + + actions = { + 'traffic_marking': { + 'dscp': 24, + } + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'rules': rules, + 'actions': actions, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_add( + flowspec_family=flowspec_family, + rules=rules, + actions=actions) + + # Check + mock_call.assert_called_with( + 'flowspec.add', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_add_ipv4_without_actions(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV4 + rules = { + 'dst_prefix': '10.60.1.0/24', + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'rules': rules, + 'actions': {}, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_add( + flowspec_family=flowspec_family, + rules=rules) + + # Check + mock_call.assert_called_with( + 'flowspec.add', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_del_ipv4(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV4 + rules = { + 'dst_prefix': '10.60.1.0/24', + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'rules': rules, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_del( + flowspec_family=flowspec_family, + rules=rules) + + # Check + mock_call.assert_called_with( + 'flowspec.del', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_add_vpnv4(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_VPNV4 + route_dist = '65001:100' + rules = { + 'dst_prefix': '10.70.1.0/24', + } + + actions = { + 'traffic_marking': { + 'dscp': 24, + } + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'route_dist': route_dist, + 'rules': rules, + 'actions': actions, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_add( + flowspec_family=flowspec_family, + route_dist=route_dist, + rules=rules, + actions=actions) + + # Check + mock_call.assert_called_with( + 'flowspec.add_local', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_del_vpnv4(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_VPNV4 + route_dist = '65001:100' + rules = { + 'dst_prefix': '10.70.1.0/24', + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'route_dist': route_dist, + 'rules': rules, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_del( + flowspec_family=flowspec_family, + route_dist=route_dist, + rules=rules) + + # Check + mock_call.assert_called_with( + 'flowspec.del_local', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_add_ipv6(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV6 + rules = { + 'dst_prefix': '2001::3/128/32', + } + + actions = { + 'traffic_marking': { + 'dscp': 24, + } + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'rules': rules, + 'actions': actions, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_add( + flowspec_family=flowspec_family, + rules=rules, + actions=actions) + + # Check + mock_call.assert_called_with( + 'flowspec.add', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_add_ipv6_without_actions(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV6 + rules = { + 'dst_prefix': '2001::3/128/32', + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'rules': rules, + 'actions': {}, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_add( + flowspec_family=flowspec_family, + rules=rules) + + # Check + mock_call.assert_called_with( + 'flowspec.add', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_del_ipv6(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_IPV6 + rules = { + 'dst_prefix': '2001::3/128/32', + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'rules': rules, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_del( + flowspec_family=flowspec_family, + rules=rules) + + # Check + mock_call.assert_called_with( + 'flowspec.del', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_add_vpnv6(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_VPNV6 + route_dist = '65001:100' + rules = { + 'dst_prefix': '2001::3/128/32', + } + + actions = { + 'traffic_marking': { + 'dscp': 24, + } + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'route_dist': route_dist, + 'rules': rules, + 'actions': actions, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_add( + flowspec_family=flowspec_family, + route_dist=route_dist, + rules=rules, + actions=actions) + + # Check + mock_call.assert_called_with( + 'flowspec.add_local', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_del_vpnv6(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_VPNV6 + route_dist = '65001:100' + rules = { + 'dst_prefix': '2001::3/128/32', + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'route_dist': route_dist, + 'rules': rules, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_del( + flowspec_family=flowspec_family, + route_dist=route_dist, + rules=rules) + + # Check + mock_call.assert_called_with( + 'flowspec.del_local', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_add_l2vpn(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_L2VPN + route_dist = '65001:100' + rules = { + 'dst_mac': '12:34:56:78:9a:bc', + } + + actions = { + 'traffic_marking': { + 'dscp': 24, + } + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'route_dist': route_dist, + 'rules': rules, + 'actions': actions, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_add( + flowspec_family=flowspec_family, + route_dist=route_dist, + rules=rules, + actions=actions) + + # Check + mock_call.assert_called_with( + 'flowspec.add_local', **expected_kwargs) + + @mock.patch( + 'ryu.services.protocols.bgp.bgpspeaker.BGPSpeaker.__init__', + mock.MagicMock(return_value=None)) + @mock.patch('ryu.services.protocols.bgp.bgpspeaker.call') + def test_flowspec_prefix_del_l2vpn(self, mock_call): + # Prepare test data + flowspec_family = bgpspeaker.FLOWSPEC_FAMILY_L2VPN + route_dist = '65001:100' + rules = { + 'dst_mac': '12:34:56:78:9a:bc', + } + + expected_kwargs = { + 'flowspec_family': flowspec_family, + 'route_dist': route_dist, + 'rules': rules, + } + + # Test + speaker = bgpspeaker.BGPSpeaker(65000, '10.0.0.1') + speaker.flowspec_prefix_del( + flowspec_family=flowspec_family, + route_dist=route_dist, + rules=rules) + + # Check + mock_call.assert_called_with( + 'flowspec.del_local', **expected_kwargs) diff --git a/tests/unit/services/protocols/bgp/test_peer.py b/tests/unit/services/protocols/bgp/test_peer.py new file mode 100644 index 00000000..1597efdb --- /dev/null +++ b/tests/unit/services/protocols/bgp/test_peer.py @@ -0,0 +1,375 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +import logging +try: + import mock # Python 2 +except ImportError: + from unittest import mock # Python 3 + +from nose.tools import eq_ + +from ryu.lib.packet import bgp +from ryu.services.protocols.bgp import peer + + +LOG = logging.getLogger(__name__) + + +class Test_Peer(unittest.TestCase): + """ + Test case for peer.Peer + """ + + @mock.patch.object( + peer.Peer, '__init__', mock.MagicMock(return_value=None)) + def _test_construct_as_path_attr( + self, input_as_path, input_as4_path, expected_as_path): + # Prepare input data + input_as_path_attr = bgp.BGPPathAttributeAsPath(input_as_path) + input_as4_path_attr = bgp.BGPPathAttributeAs4Path(input_as4_path) + _peer = peer.Peer(None, None, None, None, None) + + # TEST + output_as_path_attr = _peer._construct_as_path_attr( + input_as_path_attr, input_as4_path_attr) + + eq_(bgp.BGP_ATTR_TYPE_AS_PATH, output_as_path_attr.type) + eq_(expected_as_path, output_as_path_attr.path_seg_list) + + def test_construct_as_path_attr_sequence_only(self): + # Test Data + # Input: + input_as_path = [[65000, 4000, 23456, 23456, 40001]] + input_as4_path = [[400000, 300000, 40001]] + # Expected: + expected_as_path = [[65000, 4000, 400000, 300000, 40001]] + + self._test_construct_as_path_attr( + input_as_path, input_as4_path, expected_as_path) + + def test_construct_as_path_attr_aggregated_as_path_1(self): + # Test Data + # Input: + input_as_path = [[65000, 4000], {10, 20, 30}, [23456, 23456, 40001]] + input_as4_path = [[400000, 300000, 40001]] + # Expected: + expected_as_path = [[65000, 4000], {10, 20, 30}, [400000, 300000, 40001]] + + self._test_construct_as_path_attr( + input_as_path, input_as4_path, expected_as_path) + + def test_construct_as_path_attr_aggregated_as_path_2(self): + # Test Data + # Input: + input_as_path = [[65000, 4000], {10, 20, 30}, [23456, 23456, 40001]] + input_as4_path = [[3000, 400000, 300000, 40001]] + # Expected: + expected_as_path = [[65000, 4000, 3000, 400000, 300000, 40001]] + + self._test_construct_as_path_attr( + input_as_path, input_as4_path, expected_as_path) + + def test_construct_as_path_attr_aggregated_path_3(self): + # Test Data + # Input: + input_as_path = [[65000, 4000, 23456, 23456, 40001]] + input_as4_path = [[400000, 300000, 40001], {10, 20, 30}] + # Expected: + expected_as_path = [[65000, 400000, 300000, 40001], {10, 20, 30}] + + self._test_construct_as_path_attr( + input_as_path, input_as4_path, expected_as_path) + + def test_construct_as_path_attr_aggregated_as4_path(self): + # Test Data + # Input: + input_as_path = [[65000, 4000, 23456, 23456, 40001]] + input_as4_path = [{10, 20, 30}, [400000, 300000, 40001]] + # Expected: + expected_as_path = [[65000], {10, 20, 30}, [400000, 300000, 40001]] + + self._test_construct_as_path_attr( + input_as_path, input_as4_path, expected_as_path) + + def test_construct_as_path_attr_too_short_as_path(self): + # Test Data + # Input: + input_as_path = [[65000, 4000, 23456, 23456, 40001]] + input_as4_path = [[100000, 65000, 4000, 400000, 300000, 40001]] + # Expected: + expected_as_path = [[65000, 4000, 23456, 23456, 40001]] + + self._test_construct_as_path_attr( + input_as_path, input_as4_path, expected_as_path) + + def test_construct_as_path_attr_too_short_as4_path(self): + # Test Data + # Input: + input_as_path = [[65000, 4000, 23456, 23456, 40001]] + input_as4_path = [[300000, 40001]] + # Expected: + expected_as_path = [[65000, 4000, 23456, 300000, 40001]] + + self._test_construct_as_path_attr( + input_as_path, input_as4_path, expected_as_path) + + def test_construct_as_path_attr_empty_as4_path(self): + # Test Data + # Input: + input_as_path = [[65000, 4000, 23456, 23456, 40001]] + input_as4_path = [[]] + # Expected: + expected_as_path = [[65000, 4000, 23456, 23456, 40001]] + + self._test_construct_as_path_attr( + input_as_path, input_as4_path, expected_as_path) + + @mock.patch.object( + peer.Peer, '__init__', mock.MagicMock(return_value=None)) + def test_construct_as_path_attr_as4_path_None(self): + # Test Data + # Input: + input_as_path = [[65000, 4000, 23456, 23456, 40001]] + # input_as4_path = None + # Expected: + expected_as_path = [[65000, 4000, 23456, 23456, 40001]] + + # Prepare input data + input_as_path_attr = bgp.BGPPathAttributeAsPath(input_as_path) + input_as4_path_attr = None + _peer = peer.Peer(None, None, None, None, None) + + # TEST + output_as_path_attr = _peer._construct_as_path_attr( + input_as_path_attr, input_as4_path_attr) + + eq_(bgp.BGP_ATTR_TYPE_AS_PATH, output_as_path_attr.type) + eq_(expected_as_path, output_as_path_attr.path_seg_list) + + @mock.patch.object( + peer.Peer, '__init__', mock.MagicMock(return_value=None)) + def _test_trans_as_path( + self, input_as_path, expected_as_path, expected_as4_path): + # Prepare input data + _peer = peer.Peer(None, None, None, None, None) + + # TEST + output_as_path, output_as4_path = _peer._trans_as_path(input_as_path) + + eq_(expected_as_path, output_as_path) + eq_(expected_as4_path, output_as4_path) + + @mock.patch.object( + peer.Peer, 'is_four_octet_as_number_cap_valid', + mock.MagicMock(return_value=True)) + def test_trans_as_path_as4_path_is_supported(self): + # Test Data + # Input: + input_as_path = [[65000, 4000, 400000, 300000, 40001]] + # Expected: + expected_as_path = [[65000, 4000, 400000, 300000, 40001]] + expected_as4_path = None + + self._test_trans_as_path( + input_as_path, expected_as_path, expected_as4_path) + + @mock.patch.object( + peer.Peer, 'is_four_octet_as_number_cap_valid', + mock.MagicMock(return_value=False)) + def test_trans_as_path_sequence_only(self): + # Test Data + # Input: + input_as_path = [[65000, 4000, 400000, 300000, 40001]] + # Expected: + expected_as_path = [[65000, 4000, 23456, 23456, 40001]] + expected_as4_path = [[65000, 4000, 400000, 300000, 40001]] + + self._test_trans_as_path( + input_as_path, expected_as_path, expected_as4_path) + + @mock.patch.object( + peer.Peer, 'is_four_octet_as_number_cap_valid', + mock.MagicMock(return_value=False)) + def test_trans_as_path_no_trans(self): + # Test Data + # Input: + input_as_path = [[65000, 4000, 40000, 30000, 40001]] + # Expected: + expected_as_path = [[65000, 4000, 40000, 30000, 40001]] + expected_as4_path = None + + self._test_trans_as_path( + input_as_path, expected_as_path, expected_as4_path) + + @mock.patch.object( + peer.Peer, '__init__', mock.MagicMock(return_value=None)) + def _test_extract_and_reconstruct_as_path( + self, path_attributes, ex_as_path_value, + ex_aggregator_as_number, ex_aggregator_addr): + # Prepare test data + update_msg = bgp.BGPUpdate(path_attributes=path_attributes) + _peer = peer.Peer(None, None, None, None, None) + + # Test + _peer._extract_and_reconstruct_as_path(update_msg) + + umsg_pattrs = update_msg.pathattr_map + as_path_attr = umsg_pattrs.get( + bgp.BGP_ATTR_TYPE_AS_PATH, None) + as4_path_attr = umsg_pattrs.get( + bgp.BGP_ATTR_TYPE_AS4_PATH, None) + aggregator_attr = umsg_pattrs.get( + bgp.BGP_ATTR_TYPE_AGGREGATOR, None) + as4_aggregator_attr = umsg_pattrs.get( + bgp.BGP_ATTR_TYPE_AS4_AGGREGATOR, None) + + eq_(ex_as_path_value, as_path_attr.value) + eq_(None, as4_path_attr) + eq_(ex_aggregator_as_number, aggregator_attr.as_number) + eq_(ex_aggregator_addr, aggregator_attr.addr) + eq_(None, as4_aggregator_attr) + + @mock.patch.object( + peer.Peer, '__init__', mock.MagicMock(return_value=None)) + def test_extract_and_reconstruct_as_path_with_no_as4_attr(self): + # Input values + in_as_path_value = [[1000, 2000, 3000]] + # in_as4_path_value + in_aggregator_as_number = 4000 + in_aggregator_addr = '10.0.0.1' + # in_as4_aggregator_as_number + # in_as4_aggregator_addr + + # Expected values + ex_as_path_value = [[1000, 2000, 3000]] + ex_aggregator_as_number = 4000 + ex_aggregator_addr = '10.0.0.1' + + # Prepare test data + path_attributes = [ + bgp.BGPPathAttributeAsPath( + value=in_as_path_value), + bgp.BGPPathAttributeAggregator( + as_number=in_aggregator_as_number, addr=in_aggregator_addr), + ] + + # Test + self._test_extract_and_reconstruct_as_path( + path_attributes, ex_as_path_value, + ex_aggregator_as_number, ex_aggregator_addr) + + @mock.patch.object( + peer.Peer, '__init__', mock.MagicMock(return_value=None)) + def test_extract_and_reconstruct_as_path_with_as4_attr(self): + # Input values + in_as_path_value = [[1000, 23456, 3000]] + in_as4_path_value = [[2000, 3000]] + in_aggregator_as_number = 23456 + in_aggregator_addr = '10.0.0.1' + in_as4_aggregator_as_number = 4000 + in_as4_aggregator_addr = '10.0.0.1' + + # Expected values + ex_as_path_value = [[1000, 2000, 3000]] + ex_aggregator_as_number = 4000 + ex_aggregator_addr = '10.0.0.1' + + # Prepare test data + path_attributes = [ + bgp.BGPPathAttributeAsPath( + value=in_as_path_value), + bgp.BGPPathAttributeAs4Path( + value=in_as4_path_value), + bgp.BGPPathAttributeAggregator( + as_number=in_aggregator_as_number, + addr=in_aggregator_addr), + bgp.BGPPathAttributeAs4Aggregator( + as_number=in_as4_aggregator_as_number, + addr=in_as4_aggregator_addr), + ] + + # Test + self._test_extract_and_reconstruct_as_path( + path_attributes, ex_as_path_value, + ex_aggregator_as_number, ex_aggregator_addr) + + @mock.patch.object( + peer.Peer, '__init__', mock.MagicMock(return_value=None)) + def test_extract_and_reconstruct_as_path_with_not_trans_as_aggr(self): + # Input values + in_as_path_value = [[1000, 23456, 3000]] + in_as4_path_value = [[2000, 3000]] + in_aggregator_as_number = 4000 # not AS_TRANS + in_aggregator_addr = '10.0.0.1' + in_as4_aggregator_as_number = 4000 + in_as4_aggregator_addr = '10.0.0.1' + + # Expected values + ex_as_path_value = [[1000, 23456, 3000]] + ex_aggregator_as_number = 4000 + ex_aggregator_addr = '10.0.0.1' + + # Prepare test data + path_attributes = [ + bgp.BGPPathAttributeAsPath( + value=in_as_path_value), + bgp.BGPPathAttributeAs4Path( + value=in_as4_path_value), + bgp.BGPPathAttributeAggregator( + as_number=in_aggregator_as_number, + addr=in_aggregator_addr), + bgp.BGPPathAttributeAs4Aggregator( + as_number=in_as4_aggregator_as_number, + addr=in_as4_aggregator_addr), + ] + + # Test + self._test_extract_and_reconstruct_as_path( + path_attributes, ex_as_path_value, + ex_aggregator_as_number, ex_aggregator_addr) + + @mock.patch.object( + peer.Peer, '__init__', mock.MagicMock(return_value=None)) + def test_extract_and_reconstruct_as_path_with_short_as_path(self): + # Input values + in_as_path_value = [[1000, 23456, 3000]] + in_as4_path_value = [[2000, 3000, 4000, 5000]] # longer than AS_PATH + in_aggregator_as_number = 4000 + in_aggregator_addr = '10.0.0.1' + # in_as4_aggregator_as_number + # in_as4_aggregator_addr + + # Expected values + ex_as_path_value = [[1000, 23456, 3000]] + ex_aggregator_as_number = 4000 + ex_aggregator_addr = '10.0.0.1' + + # Prepare test data + path_attributes = [ + bgp.BGPPathAttributeAsPath( + value=in_as_path_value), + bgp.BGPPathAttributeAs4Path( + value=in_as4_path_value), + bgp.BGPPathAttributeAggregator( + as_number=in_aggregator_as_number, + addr=in_aggregator_addr), + ] + + # Test + self._test_extract_and_reconstruct_as_path( + path_attributes, ex_as_path_value, + ex_aggregator_as_number, ex_aggregator_addr) diff --git a/tests/unit/services/protocols/bgp/utils/__init__.py b/tests/unit/services/protocols/bgp/utils/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests/unit/services/protocols/bgp/utils/test_bgp.py b/tests/unit/services/protocols/bgp/utils/test_bgp.py new file mode 100644 index 00000000..6933a28b --- /dev/null +++ b/tests/unit/services/protocols/bgp/utils/test_bgp.py @@ -0,0 +1,211 @@ +# Copyright (C) 2017 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +import logging +import unittest + +from nose.tools import eq_, raises + +from ryu.lib.packet.bgp import ( + BGPFlowSpecTrafficRateCommunity, + BGPFlowSpecTrafficActionCommunity, + BGPFlowSpecRedirectCommunity, + BGPFlowSpecTrafficMarkingCommunity, + BGPFlowSpecVlanActionCommunity, + BGPFlowSpecTPIDActionCommunity, +) + +from ryu.services.protocols.bgp.core import BgpCoreError +from ryu.services.protocols.bgp.utils.bgp import create_v4flowspec_actions +from ryu.services.protocols.bgp.utils.bgp import create_v6flowspec_actions +from ryu.services.protocols.bgp.utils.bgp import create_l2vpnflowspec_actions + + +LOG = logging.getLogger(__name__) + + +class Test_Utils_BGP(unittest.TestCase): + """ + Test case for ryu.services.protocols.bgp.utils.bgp + """ + + def _test_create_v4flowspec_actions(self, actions, expected_communities): + communities = create_v4flowspec_actions(actions) + expected_communities.sort(key=lambda x: x.subtype) + communities.sort(key=lambda x: x.subtype) + eq_(str(expected_communities), str(communities)) + + def test_create_v4flowspec_actions_all_actions(self): + actions = { + 'traffic_rate': { + 'as_number': 0, + 'rate_info': 100.0, + }, + 'traffic_action': { + 'action': 3, + }, + 'redirect': { + 'as_number': 10, + 'local_administrator': 10, + }, + 'traffic_marking': { + 'dscp': 24, + } + } + expected_communities = [ + BGPFlowSpecTrafficRateCommunity(as_number=0, rate_info=100.0), + BGPFlowSpecTrafficActionCommunity(action=3), + BGPFlowSpecRedirectCommunity(as_number=10, local_administrator=10), + BGPFlowSpecTrafficMarkingCommunity(dscp=24), + ] + self._test_create_v4flowspec_actions(actions, expected_communities) + + def test_create_v4flowspec_actions_without_actions(self): + actions = None + expected_communities = [] + self._test_create_v4flowspec_actions(actions, expected_communities) + + @raises(ValueError) + def test_create_v4flowspec_actions_not_exist_actions(self): + actions = { + 'traffic_test': { + 'test': 10, + }, + } + expected_communities = [] + self._test_create_v4flowspec_actions(actions, expected_communities) + + def _test_create_v6flowspec_actions(self, actions, expected_communities): + communities = create_v6flowspec_actions(actions) + expected_communities.sort(key=lambda x: x.subtype) + communities.sort(key=lambda x: x.subtype) + eq_(str(expected_communities), str(communities)) + + def test_create_v6flowspec_actions_all_actions(self): + actions = { + 'traffic_rate': { + 'as_number': 0, + 'rate_info': 100.0, + }, + 'traffic_action': { + 'action': 3, + }, + 'redirect': { + 'as_number': 10, + 'local_administrator': 10, + }, + 'traffic_marking': { + 'dscp': 24, + } + } + expected_communities = [ + BGPFlowSpecTrafficRateCommunity(as_number=0, rate_info=100.0), + BGPFlowSpecTrafficActionCommunity(action=3), + BGPFlowSpecRedirectCommunity(as_number=10, local_administrator=10), + BGPFlowSpecTrafficMarkingCommunity(dscp=24), + ] + self._test_create_v6flowspec_actions(actions, expected_communities) + + def test_create_v6flowspec_actions_without_actions(self): + actions = None + expected_communities = [] + self._test_create_v6flowspec_actions(actions, expected_communities) + + @raises(ValueError) + def test_create_v6flowspec_actions_not_exist_actions(self): + actions = { + 'traffic_test': { + 'test': 10, + }, + } + expected_communities = [] + self._test_create_v6flowspec_actions(actions, expected_communities) + + def _test_create_l2vpnflowspec_actions(self, actions, expected_communities): + communities = create_l2vpnflowspec_actions(actions) + expected_communities.sort(key=lambda x: x.subtype) + communities.sort(key=lambda x: x.subtype) + eq_(str(expected_communities), str(communities)) + + def test_create_l2vpnflowspec_actions_all_actions(self): + actions = { + 'traffic_rate': { + 'as_number': 0, + 'rate_info': 100.0, + }, + 'traffic_action': { + 'action': 3, + }, + 'redirect': { + 'as_number': 10, + 'local_administrator': 10, + }, + 'traffic_marking': { + 'dscp': 24, + }, + 'vlan_action': { + 'actions_1': (BGPFlowSpecVlanActionCommunity.POP | + BGPFlowSpecVlanActionCommunity.SWAP), + 'vlan_1': 3000, + 'cos_1': 3, + 'actions_2': BGPFlowSpecVlanActionCommunity.PUSH, + 'vlan_2': 4000, + 'cos_2': 2, + }, + 'tpid_action': { + 'actions': (BGPFlowSpecTPIDActionCommunity.TI | + BGPFlowSpecTPIDActionCommunity.TO), + 'tpid_1': 5, + 'tpid_2': 6, + } + } + expected_communities = [ + BGPFlowSpecTrafficRateCommunity(as_number=0, rate_info=100.0), + BGPFlowSpecTrafficActionCommunity(action=3), + BGPFlowSpecRedirectCommunity(as_number=10, local_administrator=10), + BGPFlowSpecTrafficMarkingCommunity(dscp=24), + BGPFlowSpecVlanActionCommunity( + actions_1=(BGPFlowSpecVlanActionCommunity.POP | + BGPFlowSpecVlanActionCommunity.SWAP), + vlan_1=3000, + cos_1=3, + actions_2=BGPFlowSpecVlanActionCommunity.PUSH, + vlan_2=4000, + cos_2=2, + ), + BGPFlowSpecTPIDActionCommunity( + actions=(BGPFlowSpecTPIDActionCommunity.TI | + BGPFlowSpecTPIDActionCommunity.TO), + tpid_1=5, + tpid_2=6, + ), + ] + self._test_create_l2vpnflowspec_actions(actions, expected_communities) + + def test_create_l2vpnflowspec_actions_without_actions(self): + actions = None + expected_communities = [] + self._test_create_l2vpnflowspec_actions(actions, expected_communities) + + @raises(ValueError) + def test_create_l2vpnflowspec_actions_not_exist_actions(self): + actions = { + 'traffic_test': { + 'test': 10, + }, + } + expected_communities = [] + self._test_create_l2vpnflowspec_actions(actions, expected_communities) diff --git a/tests/unit/services/protocols/bgp/utils/test_validation.py b/tests/unit/services/protocols/bgp/utils/test_validation.py new file mode 100644 index 00000000..6d5f6ac3 --- /dev/null +++ b/tests/unit/services/protocols/bgp/utils/test_validation.py @@ -0,0 +1,215 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import unittest + +from nose.tools import eq_, ok_ + +from ryu.services.protocols.bgp.utils import validation + + +LOG = logging.getLogger(__name__) + + +class Test_Utils_Validation(unittest.TestCase): + """ + Test case for ryu.services.protocols.bgp.utils.validation + """ + + def test_is_valid_mac(self): + ok_(validation.is_valid_mac('aa:bb:cc:dd:ee:ff')) + + def test_is_valid_mac_hyphenation(self): + ok_(validation.is_valid_mac('aa-bb-cc-dd-ee-ff')) + + def test_is_valid_mac_short(self): + eq_(False, validation.is_valid_mac('aa:bb:cc:dd:ee')) + + def test_is_valid_ip_prefix(self): + ok_(validation.is_valid_ip_prefix(24, 32)) + + def test_is_valid_ip_prefix_str(self): + ok_(validation.is_valid_ip_prefix('24', 32)) + + def test_is_valid_ip_prefix_not_digit(self): + eq_(False, validation.is_valid_ip_prefix('foo', 32)) + + def test_is_valid_ip_prefix_over(self): + eq_(False, validation.is_valid_ip_prefix(100, 32)) + + def test_is_valid_ipv4(self): + ok_(validation.is_valid_ipv4('10.0.0.1')) + + def test_is_valid_ipv4_not_dot(self): + eq_(False, validation.is_valid_ipv4('192:168:0:1')) + + def test_is_valid_ipv4_prefix(self): + ok_(validation.is_valid_ipv4_prefix('10.0.0.1/24')) + + def test_is_valid_ipv4_prefix_not_str(self): + eq_(False, validation.is_valid_ipv4_prefix(1234)) + + def test_is_valid_ipv4_prefix_without_prefix(self): + eq_(False, validation.is_valid_ipv4_prefix('10.0.0.1')) + + def test_is_valid_ipv4_prefix_invalid_addr(self): + eq_(False, validation.is_valid_ipv4_prefix('xxx.xxx.xxx.xxx/24')) + + def test_is_valid_ipv6(self): + ok_(validation.is_valid_ipv6('fe80::0011:aabb:ccdd:eeff')) + + def test_is_valid_ipv6_not_colon(self): + eq_(False, validation.is_valid_ipv6('fe80--0011-aabb-ccdd-eeff')) + + def test_is_valid_ipv6_prefix(self): + ok_(validation.is_valid_ipv6_prefix('fe80::0011:aabb:ccdd:eeff/64')) + + def test_is_valid_ipv6_prefix_not_str(self): + eq_(False, validation.is_valid_ipv6_prefix(1234)) + + def test_is_valid_ipv6_prefix_without_prefix(self): + eq_(False, + validation.is_valid_ipv6_prefix('fe80::0011:aabb:ccdd:eeff')) + + def test_is_valid_ipv6_prefix_invalid_addr(self): + eq_(False, validation.is_valid_ipv6_prefix('xxxx::xxxx/64')) + + def test_is_valid_old_asn(self): + ok_(validation.is_valid_old_asn(65000)) + + def test_is_valid_old_asn_negative(self): + eq_(False, validation.is_valid_old_asn(-1)) + + def test_is_valid_old_asn_over(self): + eq_(False, validation.is_valid_old_asn(0xffff + 1)) + + def test_is_valid_asn(self): + ok_(validation.is_valid_asn(6553800)) + + def test_is_valid_asn_old(self): + ok_(validation.is_valid_asn(65000)) + + def test_is_valid_asn_negative(self): + eq_(False, validation.is_valid_asn(-1)) + + def test_is_valid_asn_over(self): + eq_(False, validation.is_valid_asn(0xffffffff + 1)) + + def test_is_valid_vpnv4_prefix(self): + ok_(validation.is_valid_vpnv4_prefix('100:200:10.0.0.1/24')) + + def test_is_valid_vpnv4_prefix_not_str(self): + eq_(False, validation.is_valid_vpnv4_prefix(1234)) + + def test_is_valid_vpnv4_prefix_short_rd(self): + eq_(False, validation.is_valid_vpnv4_prefix('100:10.0.0.1/24')) + + def test_is_valid_vpnv4_prefix_invalid_rd(self): + eq_(False, validation.is_valid_vpnv4_prefix('foo:bar:10.0.0.1/24')) + + def test_is_valid_vpnv6_prefix(self): + ok_(validation.is_valid_vpnv6_prefix( + '100:200:fe80::0011:aabb:ccdd:eeff/64')) + + def test_is_valid_vpnv6_prefix_not_str(self): + eq_(False, validation.is_valid_vpnv6_prefix(1234)) + + def test_is_valid_vpnv6_prefix_short_rd(self): + eq_(False, validation.is_valid_vpnv6_prefix('100:eeff/64')) + + def test_is_valid_vpnv6_prefix_invalid_rd(self): + eq_(False, validation.is_valid_vpnv6_prefix('foo:bar:10.0.0.1/24')) + + def test_is_valid_med(self): + ok_(validation.is_valid_med(100)) + + def test_is_valid_med_not_num(self): + eq_(False, validation.is_valid_med('foo')) + + def test_is_valid_med_negative(self): + eq_(False, validation.is_valid_med(-1)) + + def test_is_valid_med_over(self): + eq_(False, validation.is_valid_med(0xffffffff + 1)) + + def test_is_valid_mpls_label(self): + ok_(validation.is_valid_mpls_label(100)) + + def test_is_valid_mpls_label_reserved(self): + eq_(False, validation.is_valid_mpls_label(4)) + + def test_is_valid_mpls_label_not_num(self): + eq_(False, validation.is_valid_mpls_label('foo')) + + def test_is_valid_mpls_label_negative(self): + eq_(False, validation.is_valid_mpls_label(-1)) + + def test_is_valid_mpls_label_over(self): + eq_(False, validation.is_valid_mpls_label(0x100000 + 1)) + + def test_is_valid_mpls_labels(self): + ok_(validation.is_valid_mpls_labels([100, 200])) + + def test_is_valid_mpls_labels_not_list(self): + eq_(False, validation.is_valid_mpls_labels(100)) + + def test_is_valid_mpls_labels_with_invalid_label(self): + eq_(False, validation.is_valid_mpls_labels(['foo', 200])) + + def test_is_valid_route_dist(self): + ok_(validation.is_valid_route_dist('65000:222')) + + def test_is_valid_route_dist_ipv4_based(self): + ok_(validation.is_valid_route_dist('10.0.0.1:333')) + + def test_is_valid_route_not_str(self): + eq_(False, validation.is_valid_route_dist(65000)) + + def test_is_valid_route_dist_short(self): + eq_(False, validation.is_valid_route_dist('65000')) + + def test_is_valid_route_dist_invalid_ipv4_addr(self): + eq_(False, validation.is_valid_route_dist('xxx.xxx.xxx.xxx:333')) + + def test_is_valid_esi(self): + ok_(validation.is_valid_esi(100)) + + def test_is_valid_esi_not_int(self): + eq_(False, validation.is_valid_esi('foo')) + + def test_is_valid_ethernet_tag_id(self): + ok_(validation.is_valid_ethernet_tag_id(100)) + + def test_is_valid_ethernet_tag_id_not_int(self): + eq_(False, validation.is_valid_ethernet_tag_id('foo')) + + def test_is_valid_ethernet_tag_id_negative(self): + eq_(False, validation.is_valid_ethernet_tag_id(-1)) + + def test_is_valid_ethernet_tag_id_over(self): + eq_(False, validation.is_valid_ethernet_tag_id(0xffffffff + 1)) + + def test_is_valid_vni(self): + ok_(validation.is_valid_vni(100)) + + def test_is_valid_vni_not_int(self): + eq_(False, validation.is_valid_vni('foo')) + + def test_is_valid_vni_negative(self): + eq_(False, validation.is_valid_vni(-1)) + + def test_is_valid_vni_over(self): + eq_(False, validation.is_valid_vni(0xffffff + 1)) diff --git a/tests/unit/test_requirements.py b/tests/unit/test_requirements.py new file mode 100644 index 00000000..b31110b4 --- /dev/null +++ b/tests/unit/test_requirements.py @@ -0,0 +1,85 @@ +# Copyright (C) 2016 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import logging +import os +import sys +import unittest + +import pkg_resources +from pip.req import parse_requirements +from pip.download import PipSession +from six.moves import urllib + +from nose.tools import ok_ + + +LOG = logging.getLogger(__name__) + +MOD_DIR = os.path.dirname(sys.modules[__name__].__file__) +_RYU_REQUIREMENTS_FILES = [ + '../../tools/pip-requires', + '../../tools/optional-requires', +] +RYU_REQUIREMENTS_FILES = [ + os.path.join(MOD_DIR, f) for f in _RYU_REQUIREMENTS_FILES] + +OPENSTACK_REQUIREMENTS_REPO = 'https://github.com/openstack/requirements' +OPENSTACK_REQUIREMENTS_URL = ( + 'https://github.com/openstack/requirements/raw/master/') +_OPENSTACK_REQUIREMENTS_FILES = [ + 'requirements.txt', + 'global-requirements.txt', +] +OPENSTACK_REQUIREMENTS_FILES = [ + urllib.parse.urljoin(OPENSTACK_REQUIREMENTS_URL, f) + for f in _OPENSTACK_REQUIREMENTS_FILES] + + +def _get_requirements(files): + requirements = {} + for f in files: + req = parse_requirements(f, session=PipSession()) + for r in req: + requirements[r.name] = str(r.req) + + return requirements + +OPENSTACK_REQUIREMENTS = _get_requirements(OPENSTACK_REQUIREMENTS_FILES) +RYU_REQUIREMENTS = _get_requirements(RYU_REQUIREMENTS_FILES) + + +class TestRequirements(unittest.TestCase): + """ + Test whether the requirements of Ryu has no conflict with that + of other projects. + """ + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_with_openstack_requirements(self): + try: + for name, req in OPENSTACK_REQUIREMENTS.items(): + if name in RYU_REQUIREMENTS: + ok_(pkg_resources.require(req)) + except pkg_resources.VersionConflict as e: + LOG.exception( + 'Some requirements of Ryu are conflicting with that of ' + 'OpenStack project: %s' % OPENSTACK_REQUIREMENTS_REPO) + raise e diff --git a/tests/unit/test_utils.py b/tests/unit/test_utils.py new file mode 100644 index 00000000..165f8acc --- /dev/null +++ b/tests/unit/test_utils.py @@ -0,0 +1,84 @@ +# Copyright (C) 2014 Nippon Telegraph and Telephone Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +# implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import unittest +import logging +import six +from nose.tools import eq_ + +from ryu import utils + +LOG = logging.getLogger(__name__) + + +class Test_utils(unittest.TestCase): + + def setUp(self): + pass + + def tearDown(self): + pass + + def test_hex_array_string(self): + """ + Test hex_array() with str type. + """ + expected_result = '0x01 0x02 0x03 0x04' + data = b'\x01\x02\x03\x04' + eq_(expected_result, utils.hex_array(data)) + + def test_hex_array_bytearray(self): + """ + Test hex_array() with bytearray type. + """ + expected_result = '0x01 0x02 0x03 0x04' + data = bytearray(b'\x01\x02\x03\x04') + eq_(expected_result, utils.hex_array(data)) + + def test_hex_array_bytes(self): + """ + Test hex_array() with bytes type. (Python3 only) + """ + if six.PY2: + return + expected_result = '0x01 0x02 0x03 0x04' + data = bytes(b'\x01\x02\x03\x04') + eq_(expected_result, utils.hex_array(data)) + + def test_binary_str_string(self): + """ + Test binary_str() with str type. + """ + expected_result = '\\x01\\x02\\x03\\x04' + data = b'\x01\x02\x03\x04' + eq_(expected_result, utils.binary_str(data)) + + def test_binary_str_bytearray(self): + """ + Test binary_str() with bytearray type. + """ + expected_result = '\\x01\\x02\\x03\\x04' + data = bytearray(b'\x01\x02\x03\x04') + eq_(expected_result, utils.binary_str(data)) + + def test_binary_str_bytes(self): + """ + Test binary_str() with bytes type. (Python3 only) + """ + if six.PY2: + return + expected_result = '\\x01\\x02\\x03\\x04' + data = bytes(b'\x01\x02\x03\x04') + eq_(expected_result, utils.binary_str(data)) diff --git a/tools/normalize_json.py b/tools/normalize_json.py index 48243584..7d7fddc9 100755 --- a/tools/normalize_json.py +++ b/tools/normalize_json.py @@ -17,7 +17,7 @@ # limitations under the License. # usage example: -# for x in ../ryu/tests/unit/ofproto/json/**/*.json;do echo $x;./normalize_json.py < $x > xx&& mv xx $x;done +# for x in ../tests/unit/ofproto/json/**/*.json;do echo $x;./normalize_json.py < $x > xx&& mv xx $x;done import json import sys diff --git a/tox.ini b/tox.ini index cb6df7f7..5ffbc675 100644 --- a/tox.ini +++ b/tox.ini @@ -12,13 +12,13 @@ passenv= NOSE_VERBOSE # for running Ryu, the following runs ryu-manager berfore installing # the addtional requirements. commands = - ryu-manager ryu/tests/unit/cmd/dummy_openflow_app.py + ryu-manager tests/unit/cmd/dummy_openflow_app.py pip install -r{toxinidir}/tools/optional-requires -r{toxinidir}/tools/test-requires - coverage run --source=ryu ryu/tests/run_tests.py '{posargs}' + coverage run --source=ryu tests/run_tests.py '{posargs}' [testenv:scenario] commands = - python ryu/tests/integrated/run_test.py + python tests/integrated/run_test.py [testenv:py27] commands = -- cgit v1.2.3